# [FFmpeg] 串聯影音檔案 ## 直接串聯相同編碼參數的檔案 如果媒體檔案有完全相同的編碼與編碼參數,可以直接將它們串連起來,而不需要經過重新編碼。 使用 `concat` protocol 串聯 clip1 clip2 clip3: ```powershell ffmpeg -i "concat:clip1.mp4|clip2.mp4|clip3.mp4" -c copy -bsf:a aac_adtstoasc output.mp4 ``` 使用 `concat` demuxer 串聯檔案列表 mylist.txt 中的檔案: ```powershell ffmpeg -f concat -i mylist.txt -c copy output.mp4 ``` 檔案列表格式: ```text # 這是一個註解 file '路徑\檔案1' file '路徑\檔案2' file '路徑\檔案3' ``` > 註:文字編碼格式必須是 ANSI 或 UTF-8 ### 路徑字元限制 `concat` demuxer 預設會拒絕"不安全"的檔案路徑 (安全檔名組成為英、數、底線、句點、連接號)。 使用 `-safe 0` 來接受所有檔名: ```powershell ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mkv ``` ## CMD 快速建立檔案列表 將工作目錄下所有 m2ts 檔案的路徑寫入 mylist.txt: ```cmd chcp 65001 (for %%i in (*.m2ts) do @echo file '%%i') > mylist.txt ``` ## 串聯不同編碼參數的檔案 如果媒體檔案沒有完全相同的編碼與編碼參數,可以直接將它們重新編碼為相同的編碼與編碼參數,再直接串聯。 先將片源統一參數重新編碼再使用 `concat` protocol 串聯影片: ```powershell ffmpeg -i input.mp4 -s 1280x720 -ac 2 -c:v libx264 -c:a libfdk_aac clip1.mp4 ffmpeg -i input.avi -s 1280x720 -ac 2 -c:v libx264 -c:a libfdk_aac clip2.mp4 ffmpeg -i input.mkv -s 1280x720 -ac 2 -c:v libx264 -c:a libfdk_aac clip3.mp4 ffmpeg -i "concat:clip1.mp4|clip2.mp4|clip3.mp4" -c copy -bsf:a aac_adtstoasc output.mp4 ``` 使用 `concat` demuxer 串聯輸入並統一參數重新編碼: ```powershell ffmpeg -f concat -i mylist.txt -s 1280x720 -ac 2 -c:v libx264 -c:a libfdk_aac output.mp4 ``` 將不同寬高比的影片以自動填充黑邊方式統一比例: ```powershell ffmpeg -f concat -i mylist.txt -vf "scale='w=min(1280,trunc((720*dar)/2+0.5)*2):h=min(720,trunc((1280/dar)/2+0.5)*2)',pad='w=1280:h=720:x=(ow-iw)/2:y=(oh-ih)/2',setsar='r=1'" -c:v libx264 -c:a libfdk_aac output.mp4 ``` ###### tags: `ffmpeg`