用FFmpeg拼接多部影片、並加速

前一陣子,我用了GoPro錄了一段不短的影片,後來發現他會自己把他分割成很多段小影片。
這篇文章會說明,如何快速的(不重新編碼)的把小影片合併、加速、甚至加上第二聲道。

一、FFmpeg簡介

FFmpeg 是一個開放原始碼的自由軟體,可以執行音訊和視訊多種格式的錄影、轉檔、串流功能,這個專案最初是由法國程式設計師Fabrice Bellard發起的,而現在是由Michael Niedermayer在進行維護。

可以到這裏下載Windows版本,我會下載有寫win64-lgpl.zip的。

二、合併影片片段

要合併影片片段,我會先做一個文字檔concat.txt在影片所在資料夾,把想要拼接的影片依序打進去:

file 'GX010305.MP4'
file 'GX020305.MP4'
file 'GX030305.MP4'
file 'GX040305.MP4'
file 'GX050305.MP4'
...

然後,在影片所在資料夾開啓PowerShell,執行:

ffmpeg -f concat -i .\concat.txt -c copy OUTPUT.MP4

-f concat: 讓程式知道你要拼接
-i .\concat.txt: 讓程式知道你要拼接concat.txt裡面的這些片段
-c copy: 單純把這些片段排排站,不重新解碼編碼
OUTPUT.MP4: 將結果輸出到OUTPUT.MP4

三、加速影片

假設我們只要把影片加速60倍,但是聲音靜音,只要這樣輸入:

ffmpeg -i INPUT.MP4 -filter:v "setpts=PTS/60" -an OUTPUT.MP4

-i : 讓程式知道你要加速INPUT.MP4
-filter:v "setpts=PTS/60": 影片的編輯模式是加速60倍
-an: 聲音拿掉
OUTPUT.MP4: 將結果輸出到OUTUPUT.MP4

如果我們要把聲音和影片都加速60倍,則要這樣輸入:

ffmpeg -i INPUT.mp4 -filter:v "setpts=PTS/60" -filter:a "atempo=60" OUTPUT.MP4

-i : 讓程式知道你要加速INPUT.MP4
-filter:v "setpts=PTS/60": 影片的編輯模式是加速60倍
-filter:a "atempo=60": 聲音加速60倍,音頻不變(Lossy)
OUTPUT.MP4: 將結果輸出到OUTUPUT.MP4

四、附加多個音檔到一個影片

ffmpeg -i INPUT.MP4 -i AUDIO1.M4A -i AUDIO2.M4A -map 0:v -map 1:a -map 2:a -metadata:s:a:1 title="1st audio" -metadata:s:a:2 title="2nd audio" -c copy OUTPUT.MP4

1 comment

Leave a comment

Your email address will not be published. Required fields are marked *