[FFmpeg] 串聯媒體檔案

FFmpeg

簡介與其他資料:
 http://www.mobile01.com/topicdetail.php?f=510&t=3734550

其他範例:
  http://www.mobile01.com/topicdetail.php?f=510&t=4487462

參考資料

FFmpeg 官方資料:
  https://trac.ffmpeg.org/wiki/Concatenate


直接串聯相同編碼參數的檔案

如果媒體檔案有完全相同的編碼與編碼參數,可以直接將它們串連起來,而不需要經過重新編碼。

使用 `concat` protocol 串聯 clip1 clip2 clip3:
ffmpeg -i "concat:clip1.mp4|clip2.mp4|clip3.mp4" -c copy -bsf:a aac_adtstoasc output.mp4

使用 `concat` demuxer 串聯檔案列表 mylist.txt 中的檔案:
ffmpeg -f concat -i mylist.txt -c copy output.mp4

檔案列表格式:
# 這是一個註解
file '路徑\檔案1'
file '路徑\檔案2'
file '路徑\檔案3'

※ 文字編碼格式必須是 ANSI 或 UTF-8

CMD 快速建立檔案列表

將工作目錄下所有 m2ts 檔案的路徑寫入 mylist.txt:
chcp 65001
(for %%i in (*.m2ts) do @echo file '%%i') > mylist.txt


路徑字元限制

`concat` demuxer 預設會拒絕"不安全"的檔案路徑 (安全檔名組成為英、數、底線、句點、連接號)。

使用 `-safe 0` 來接受所有檔名:
ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mkv


串聯不同編碼參數的檔案

如果媒體檔案沒有完全相同的編碼與編碼參數,可以直接將它們重新編碼為相同的編碼與編碼參數,再直接串聯。

先將片源統一參數重新編碼再使用 `concat` protocol 串聯影片:
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 串聯輸入並統一參數重新編碼:
ffmpeg -f concat -i mylist.txt -s 1280x720 -ac 2 -c:v libx264 -c:a libfdk_aac output.mp4

將不同寬高比的影片以自動填充黑邊方式統一比例:
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


自動填充黑邊: http://www.mobile01.com/topicdetail.php?f=510&t=4038239
2015-07-15 23:52 發佈
k大您好,我想請教關於.avi影片合併的問題。

我使用以下語法將圖片檔與聲音檔合併成.avi檔
ffmpeg -i 1.jpg -i 1.wav 1.avi
ffmpeg -i 2.jpg -i 2.wav 2.avi
ffmpeg -i 3.jpg -i 3.wav 3.avi


資料夾有3個.avi影片,1個txt文字檔
1.avi
2.avi
3.avi

filelist.txt 內容寫入
file '1.avi'
file '2.avi'
file '3.avi'


我使用以下語法

ffmpeg -f concat -i filelist.txt -c copy final.avi

最後得到合併後的檔案 final.avi,聲音有合併,但是圖片卻沒有隨著播放而跟著切換,不知道是否整個流程都有錯誤呢?
望請指點一二,謝謝您。
赤鍊鎖金手 wrote:
k大您好,我想請教...(恕刪)

大概是影像時間長度問題....
試試 -loop 1 與 -shortest 選項

http://www.mobile01.com/topicdetail.php?f=510&t=4251956rn

ffmpeg -loop 1 -i 1.jpg -i 1.wav -r 30 -shortest 1.avi
ffmpeg -loop 1 -i 1.jpg -i 2.wav -r 30 -shortest 2.avi
ffmpeg -loop 1 -i 1.jpg -i 3.wav -r 30 -shortest 3.avi
赤鍊鎖金手 wrote:
k大您好,我想請教...(恕刪)


ffmpeg -f concat -i filelist.txt -c copy final.mp4

用你以上語法沒問題
語音引用你話題分三段.合拼3個Jpg..3個wav 分别是7秒+7秒+26秒 MP4合拼結果沒問題.

别被我選中..為何又選中..

ahwaiyuen98 wrote:
ffmpeg -f...(恕刪)


感謝k大與a大的協助,後來確認是因3張圖片尺寸都不一樣造成無法切換影像,
只要先把圖片經過裁切即可順利合成。
請問一下 我有一個軟體只吃有ffmpeg 的檔案 像mp4 , mkv, a i 問題是有些我mkv 的檔案不知道是不是沒有 ffmpeg 沒辦法使用. 請問有辦法解決嗎 可付費 謝謝🙏
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?