有效率地將 avi 音軌連接到 mp4

有效率地將 avi 音軌連接到 mp4

我有大約 100 個影片(系列的劇集)兩次。

  1. [avi] 720p 視訊解析度和我喜歡的音軌
  2. [mp4] 1080p 但語言錯誤

顯然,我想要使用我喜歡的語言的好視頻。但如果可能的話,我想保留這兩個音訊選項。

我嘗試使用 mp4 joiner(mp4box 的 GUI)手動加入它們,但這需要很長時間。我希望看到一些自動化和優化該流程的建議。

答案1

你可以很容易地做到這一點ffmpeg(下載靜態版本)如下圖所示:

ffmpeg -i input.mp4 -i input.avi -c copy -map 0:v:0 -map 1:a output.mp4

這會地圖以下流到輸出檔:

  • 第一個輸入的第一個視訊通道 ( 0:v:0)
  • 第二個輸入的音訊通道 ( 1:a) – 如果您只需要第一個輸入,請使用1:a:0等。

視訊和音訊串流被複製,因此這個過程很快。

音訊不相容

如果 AVI 檔案使用 MP3 作為音訊串流,則無法將它們對應到 MP4 檔案。在這種情況下,使用:

ffmpeg -i input.mp4 -i input.avi -c:v copy -c:a aac -b:a 192k -map 0:v:0 -map 1:a output.mp4

這將使用 AAC 以 192 kBit/s 的速度重新編碼音訊串流,這應該具有足夠高的質量,讓您不會注意到重新編碼產生的任何瑕疵。

或者,您可以使用 MKV 作為輸出容器,它幾乎支援任何編解碼器:

ffmpeg -i input.mp4 -i input.avi -c copy -map 0:v:0 -map 1:a output.mkv

如何批量運行

顯然,您可以在循環中使用此命令在所有文件上運行它,例如在使用 Bash 的 Linux 下,假設 MP4 和 AVI 文件具有相同的基本名稱,並且您只運行一次(否則它會嘗試也可以轉換其輸出文件):

for f in *.mp4; do
    aviFile="${f%%.mp4}.avi" # replace the extension
    outputFile="${f%%.mp4}-output.mp4" # create output filename
    ffmpeg -i "$f" -i "$aviFile" -c copy -map 0:v:0 -map 1:a "$outputFile"
done

您將在網路上找到許多有關如何在 Windows 批次檔循環中執行命令的範例。

相關內容