使用ffmpeg合併(連接)文件

部分翻譯來自:
https://trac.ffmpeg.org/wiki/How%20to%20concatenate%20%28join,%20merge%29%20media%20files

關鍵詞:concatenate;append;合併;連接
使用ffmpeg連接文件分兩類,連接編碼完全相同的文件連接編碼不同的文件

連接編碼完全相同的文件
有兩種方式,使用concat "分離器(demuxer)"和concat "協議(protocol)。demuxer比較自由,編碼相同、但是多媒體文件容器不同也能連接。因此demuxer能處理各種容器,而protocol只能處理區區幾種容器。老版本的ffmpeg只能用protocol,最近demuxer在ffmpeg中出現。

concat demuxer是FFmpeg 1.1添加進來的,文檔見此
使用方法
創建一個 mylist.txt 文件,每行寫一個想要連接的文件的路徑,格式如下:

代碼: 全選

#該行爲註釋
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

可以用絕對路徑,也可以用相對路徑。然後使用stream copy或重編碼:

代碼: 全選

ffmpeg -f concat -i mylist.txt -c copy output


demuxer在“流”層面工作,與之不同的 是protocol在文件層面工作,因此只有特定格式的文件能連接(像mpg或mpeg transport stream文件,也可能有其他的),類似於UNIX類系統裏的cat和windows系統裏的copy。

代碼: 全選

ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg

如果不是mpg格式的文件呢?可以先用ffmpeg轉成mpeg transport stream,再連接。舉個例子,h264視頻和aac音頻的mp4:

代碼: 全選

ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4


這種方法會產生不少臨時文件,如果你會用named pipe,原帖有方法可以一行解決。
所有mpeg編碼的格式(H.264, MPEG4/divx/xvid, MPEG2; MP2, MP3, AAC)都可以轉成mpeg transport stream,不過有時需要加一些額外的命令(具體的-bsf命令)。

連接不同編碼的多媒體文件
concat濾鏡
最近新版本的ffmpeg裏有concat濾鏡。更多信息參考concat濾鏡文檔。
使用方法用例子說明

代碼: 全選

ffmpeg -i input1.mp4 -i input2.webm \
-filter_complex '[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]' \
-map '[v]' -map '[a]' <encoding options> output.mkv

-filter_complex這行的 '[0:0] [0:1] [1:0] [1:1] 是告訴ffmpeg將哪些碼流送到concat濾鏡裏。這裏,代表輸入文件0(例子中的input1.mp4)的0號流和1號流、輸入文件1(栗子中的input2.webm)的0號流和1號流。

concat=n=2:v=1:a=1 [v] [a]' 就是調用concat濾鏡。n=2告訴濾鏡有兩個輸入文件;v=1告訴濾鏡有1個視頻流,a=1告訴濾鏡有1個音頻流。 [v]和[a]定義輸出流的名稱,ffmpeg的其他部分就知道concat的輸出了。
需要注意的是,整個濾鏡需要用單引號包圍。

代碼: 全選

-map '[v]' -map '[a]'

告訴ffmpeg用concat濾鏡的輸出流,而不是用原來文件的流。
注意:此濾鏡和重新封裝(流複製stream copying)不兼容,不能用-c copy。另外,不知道這種方式支不支持軟字幕。
這個例子還告訴我們,輸入文件格式不同concat也是支持的。ffmpeg能夠解碼的任何格式都可以操作,但是分辨率和一些其他的屬性需要匹配。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章