2024/03/29

以FFmpeg的指令合併連接影片

本文已發佈逾3 年,除非文中有標注更新,否則內含的資訊有可能不合時宜,敬請注意!

先前曾經寫過用FFmpeg,經過文字命令界面(Commandline interface / CLI)去進行剪片,把影片視頻的一小部份剪下來。對於在下載回來的影片視頻裡面,頭、尾的廣告部份尤其方便。

剪接剪接,有剪就有接。有Cut有Trim,就有merge和combine了。如果是電視節目之類,廣告是插播在節目內容中間的話,就要用方法把上下半部合併,而這次就寫寫如何簡單用FFmpeg,經CLI命令列去合併影片視頻檔。

前提是,要合併的影片,如果格式(mp4 / ts / mpg / mkv / avi)、編碼(CODEC,如Xcid、H.264、H.265等),還有Bitrate(中文是位元率或比特率)的設定都要幾乎完全一樣,才可以不用重新編碼和進行Render(運算/渲染),可以直接合併成一個新的影片檔一樣,才可以不用重新編碼和進行Render(運算/渲染),可以直接合併成一個新的影片檔案。

下面的例子假設是Mac OS或UNIX / Linux系的系統,如NAS的操作系統,所以檔案所在的位置是以Unix/Linux的方式標示──像肥叔叔通常都是在Synology的NAS上進行這類操作。

先是建立一個原檔案的純文字檔列表,叫 videolist.txt ,裡面寫有完整的檔案路徑──

file '/home/video/video1.mp4'
file '/home/video/video2.mp4'
file '/home/video/video3.mp4'

那假設我們想在檔前的文件夾把合併後的單一條影片生成出來,名叫「video.mp4」,就執行下面的命令──

ffmpeg -f concat -safe 0 -i videolist.txt -c copy video.mp4

指令是讓FFmpeg去執行名為「concat demuxer」的一個filter(濾鏡),從名為「videolist.txt」的列表中的影片合併,然後以「-c copy」,即是編碼是直接複寫輸出,去生成一個叫video.mp4的檔案。

有關FFMpeg的Concat demuxer:
https://ffmpeg.org/ffmpeg-formats.html#concat-1

這解決方案的原文:
https://stackoverflow.com/questions/7333232/how-to-concatenate-two-mp4-files-using-ffmpeg