FFmpeg 可以解析 srt、ass 等字幕檔,但是在 compile FFmpeg 時需要開啟 libass,FFmpeg 才能正確載入 ass 字幕檔。
本文介紹如何檢查是否引入 libass ,並介紹 ffmpeg 合併影片與字幕時使用的指令,以及介紹指令中的參數。
若是使用 Windows 平台且還沒安裝 FFmpeg 的,可以點此前往安裝說明文喔。
檢查是否具有引入 libass
檢查有沒有引入 libass 只需要在終端機上打入 ffmpeg -version
,回傳的內容中有出現 --enable-libass
則代表有 libass 的功能。
基礎指令
ffmpeg -i input.mkv -vf "ass=filename=input.ass:fontsdir=fonts" output.mp4
ass 字幕檔含有不同的字體設定,預設 ffmpeg 會自動抓取系統內已安裝的字體進行使用,如果遇到沒有安裝的字體則會另外找替代字體。
若每次輸出時都需要安裝所有的字體想必系統內的字體會非常雜亂、混亂,所以在指令列中可以用 fontsdir 指定字體儲存的資料夾。
ass filter 的參數大部分與 subtitles 的參數相同:
- filename(可用 f 縮寫):檔案名稱。無其他參數時可省略不寫。
- original_size:原始影片的尺寸,相關的尺寸縮寫可以點此前往 FFmpeg Documentation 查看。
- fontsdir:字體檔資料夾。
- alpha:是否開啟 alpha channel。
- force_style:以後方指定的參數覆蓋檔案中的設定,若有多參數請用英文半形逗號分隔。值使用 ass 之格式(採
KEY=VALUE
形式)。 - charenc(subtitle 限定):編碼,預設為 UTF-8。
- stream_index(subtitle 限定,可用 si 縮寫):串流索引,指定 mkv 檔案中字幕的串流編號。
此外,在 ass filter 裡各個參數間使用英文半形冒號分隔,請不要與其他分隔符號搞混。為了避免空白的老馬,建議在輸入參數的值的時候用雙括號或單括號包起來,避免使 FFmpeg 誤判指令。
因為包在 mkv 裡的 ass 字幕檔不支援使用 stream_index 指定,所以需要用到 mkv 的抽出程式將字幕檔抽出後再用指令以 FFmpeg 合併。
雖然這裡主要以 ass 做例子,但 subtitles 的用法也大同小異。ass filter 與 subtitles filter 的差異在於 ass filter 是給 ass 字幕使用,而 subtitles filter 是給 srt 字幕使用。