使用 FFmpeg 合併影片與字幕

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 字幕使用。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端