以 ffmpeg 轉檔為 Youtube 建議的影音格式

Photo by Jakob Owens

今天錄了一段演講的影片,不過格式居然是 JVC 特有的 TOD,為了上傳到 Youtube,只好借助於強大的 command line 影音轉檔工具 — ffmpeg

Youtube 本身也有一些建議的編碼設定,要怎麼用 ffmpeg 來符合這些建議又是個大問題,幸好這位斯洛維尼亞的工程師 Jernej Virag 替大家整理好了,我就翻譯了一下,另外也加上其他自己要用的參數。

執行指令大概是:

ffmpeg -i <input file> -codec:v libx264 -crf 21 -bf 2 -flags +cgop -pix_fmt yuv420p -codec:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart <output file>.mp4

參數說明如下:

參數 意義
-codec:v libx264 用 H.264 影片轉碼器
-crf 21 設定影片品質。設為 21 大概可以符合建議的視訊位元率
-bf 2 建議為 2 個連續 B 影格
-flags +cgop 封閉的 GOP;GOP 為影格速率的一半
-pix_fmt yuv420p 色彩取樣:4:2:0
-codec:a aac -strict -2 用 AAC 音訊轉碼器
-b:a 384 立體聲的音訊位元率建議為 384 kbps
-r:a 48000 音訊取樣頻率建議為 96khz 或 48khz
-movflags faststart 將 moov atom 置於檔案開頭 (快速啟動)

調整音量大小

因為我錄影的時候收音品質不是很好,音量太小,所以轉檔的時候可以順便調整音量大小:

加入 -af "volume=15dB" 參數

按照 ffmpeg 的 manual,應該也可以用 -af "volume=1.5"
之類的來依比例增加音量,但我試了幾次都不成功,只有用 dB 的方式轉檔才行。

多個檔案合併為一個

在錄影時,因為長度會超過 FAT32 檔案系統的 4GB 限制,所以會被分割成幾個檔案,轉檔後還要進行合併。如果每個小檔的影片轉碼器都是相同的話,可以建立一個依序包含要合併影片檔路徑的文字檔,內容如下:

file '/path/to/video1.mp4'
file '/path/to/video2.mp4'
file '/path/to/video3.mp4'

再使用 concatenate 功能:

ffmpeg -f concat -safe 0 -i <input list>.txt -c copy <output file>.mp4

加上 -safe 0 參數主要是會出現 Unsafe file name 的錯誤。

以上是今天操作 ffmpeg 的一點小小心得。