今天錄了一段演講的影片,不過格式居然是 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 的一點小小心得。