ffmpeg合併檔案

對於ffmpeg這個全能多媒體轉換工具,大家應該非常熟悉,就不再介紹了。

ffmpeg其中有三種合併功能,大家Google搜尋[ffmpeg 合併]應該會有一大堆,這次會講講比較少人用的concat filter。

老實說光看官方Document的話估計就會一頭霧水。直接看例子:

ffmpeg -i opening.mkv -i episode.mkv -i ending.mkv -filter_complex \
'[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2]
concat=n=3:v=1:a=2 [v] [a1] [a2]' \
-map '[v]' -map '[a1]' -map '[a2]' output.mkv

先不管分行用的\,還有windows要替換成雙引號(“)的(‘),直接運行的話,如果三個文件resolution跟sar一致的話那還沒問題,萬一有一點不一樣,那肯定要悲劇。

剛巧我需要用到這功能,花了一些時間研究後做了以下修改(我只需要一條video跟一條audio,聰明的朋友自己看著上面例子修改應該也不會出問題)

ffmpeg.exe -i 001.mp4 -i 002.mp4 -i 003.mp4 -filter_complex "[0:v]scale=1280:720,setsar=1/1[v0];[1:v]scale=1280:720,setsar=1/1[v1];[2:v]scale=1280:720,setsar=1/1[v2];[v0][0:a] [v1][1:a] [v2][2:a] concat=n=3:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output.mkv

一開始輸入3個文件,然後用filter_complex濾鏡

[0:v]scale=1280:720,setsar=1/1[v0] 中[0:v]代表第0個檔案的video部分,設定成1280*720,sar=1:1 ,之後賦予參數[v0],其他的照樣

[v0][0:a] [v1][1:a] [v2][2:a] [v0][0:a] 要上面的處理過的[v0]跟第0個檔案的audio

concat=n=3:v=1:a=1 [v] [a] 內n=3代表有3個檔案,v=1代表一條video軌,a=1代表一條audio軌,然後就是將video軌跟audio軌分別賦予[v]跟[a]

-map “[v]” -map “[a]” 代表將[v]跟[a]輸出到對應輸出文件。

output.mkv 是輸出檔案,當然也可以在之前加c:v之類的參數控制輸出檔案類型跟編碼參數。

p.s.留意,這方法不能套用-an或者-vn參數,因為在filter裏面就指定了一條video跟一條audio。

講到這裡估計大家也明白大概運行方式了,那麼只輸出video/audio或者多於3個檔案要怎麼改也不需要我羅嗦了。

下次再講些有關編碼的東西吧。

2016-22-10 補充:應該是FFMPEG的BUG吧,部分影片合併後會出現黑色方塊,但用Movie Maker又沒有問題。這個問題也出現在Corel VideoStudio(會聲會影),估計是對某些編碼格式檔案的兼容問題,暫時無解。建議合併後測試影片再使用。

發佈回覆

你的電郵地址並不會被公開。