我想合並音頻文件(.wav或.au格式)與視頻文件(.mp4格式)。
如何做到這一點呢? 了解到ffmpeg命令應該可以做合並,但是具體怎麽做?
最佳解決方法
下麵分三中情形分別說明:
合並音頻和視頻,給音頻重新編碼
例子來自this blog entry,下麵的命令做了更改,使用了最新的語法:
ffmpeg -i video.mp4 -i audio.wav \
-c:v copy -c:a aac -strict experimental output.mp4
在這裏,我們假定視頻文件沒有包含任何音頻流,並且希望具有與輸入格式相同的輸出格式(此處為MP4)。
上述命令轉碼音頻,因為MP4不能攜帶PCM音頻流。如果需要,可以使用任何其他所需的音頻編解碼器,更多信息,請參閱AAC Encoding Guide。
如果您的音頻或視頻流較長,可以添加-shortest
選項,以便一個文件結束後ffmpeg將停止編碼。
合並音頻和視頻,複製音頻(不需要重新編碼)
如果輸出容器可以處理(幾乎)任何編解碼器(如MKV),那麽可以簡單地複製音頻和視頻流:
ffmpeg -i video.mp4 -i audio.wav -c copy output.mkv
合並音頻和視頻,替換音頻流
如果輸入的視頻已經包含音頻,並且想要替換它,需要告訴ffmpeg采取哪個音頻流:
ffmpeg -i video.mp4 -i audio.wav \
-c:v copy -c:a aac -strict experimental \
-map 0:v:0 -map 1:a:0 output.mp4
map
選項使ffmpeg隻使用來自第一個輸入的第一個視頻流和來自第二個輸入的第一個音頻流作為輸出文件。
次佳解決方法
編碼webms時也遇到了這個問題。如果音頻流比視頻流長,則必須剪切它。否則視頻播放完時,音頻繼續播放,最後一個視頻幀會以靜止圖像呈現直到音頻結束。
要剪切任何一個流,可以在每個-i “file.ext”之前使用-ss [hh:mm:ss] -t [ss]。
- -ss […]定義要切割的起點
- -t […]以秒為單位定義段的長度
示例如下:
ffmpeg.exe -ss 00:00:10 -t 5 -i "video.mp4" -ss 0:00:01 -t 5 -i "music.m4a" -map 0:v:0 -map 1:a:0 -y out.mp4