將字幕「燒錄」到影片中,但可以自訂字幕的顯示樣式
由於 FFmpeg 可以指定的樣式非常多,你幾乎可以調整出任何你想要的字幕樣式,包含文字大小、文字顏色、背景顏色、邊框顏色、邊框寬度、陰影等等,幾乎都可以自訂,功能十分強大。
基本上 FFmpeg 在燒錄字幕時,使用的是 libass 開源套件,所以其實你很難在 FFmpeg Filters Documentation 官方文件找到任何資訊,頂多只能知道有個 force_style 選項可以設定而已。這也是我覺得 FFmpeg 很難上手的其中一個原因,他真的太複雜了。
我最後從 ASS File Format Specification 找到了所有樣式參數的清單,總共有 Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding 共 23 個。這是我找出最權威的資訊來源了!
其實我第一時間不到 10 秒鐘就從 ChatGPT 問到了這 23 種 force_style 可用的選項,但我實在無法判斷他是不是在胡說八道,所以花了十幾分鐘才找到我要的權威資料!😅
以下這組參數是我調整無數次之後覺得最美觀的字幕樣式,但你其實還可以做出許多特殊的調整!
ffmpeg -i video.mp4 -vf "subtitles=video.zh_TW.srt:force_style='PrimaryColour=0xCCCCCC,BackColour=0x000000,OutlineColour=0x000000,BorderStyle=1,Outline=1,Shadow=0,MarginV=10,Fontsize=14'" -c:a copy output.mp4
如果你的影片擁有比較雜亂的畫面,那麼你可以改用以下參數,讓整個字幕套上一個不透明的方框(BorderStyle=3):
ffmpeg -i video.mp4 -vf "subtitles=video.zh_TW.srt:force_style='PrimaryColour=0xCCCCCC,BackColour=0x000000,OutlineColour=0x000000,BorderStyle=3,Outline=1,Shadow=0,MarginV=10,Fontsize=14'" -c:a copy output.mp4
如果字太小,也可以調整 Fontsize 參數調大字體。