使用 FFmpeg 合併影片與字幕

使用 FFmpeg 將影片嵌入字幕
使用 FFmpeg 將影片嵌入字幕

FFmpeg 可以解析 srt、ass 等字幕檔,但是在 compile FFmpeg 時需要開啟 libass,FFmpeg 才能正確載入 ass 字幕檔。

若是使用 Windows 平台且還沒安裝 FFmpeg 的,可以點此前往安裝說明文喔。要如何判斷目前安裝的 FFmpeg 有沒有開啟 libass 的功能呢?很簡單,在終端機(Terminal)、命令提示字元(以下簡稱 cmd)、Powershell 等文字介面下打上 ffmpeg -version,由 FFmpeg 回傳的內容中有出現 --enable-libass 則代表有 libass 的功能。

ffmpeg version git-2020-07-24-21442a8 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9.3.1 (GCC) 20200621
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
libavutil 56. 57.100 / 56. 57.100
libavcodec 58. 97.100 / 58. 97.100
libavformat 58. 49.100 / 58. 49.100
libavdevice 58. 11.101 / 58. 11.101
libavfilter 7. 87.100 / 7. 87.100
libswscale 5. 8.100 / 5. 8.100
libswresample 3. 8.100 / 3. 8.100
libpostproc 55. 8.100 / 55. 8.100

上方是由我電腦回傳的內容,可以用 Ctrl + F 搜尋 --enable-libass 找到他出現的位置。

基礎指令

ffmpeg -i input.mkv -vf "ass=filename=input.ass:fontsdir=fonts" output.mp4

ass 字幕檔含有不同的字體設定,預設 ffmpeg 會自動抓取系統內已安裝的字體進行使用,如果遇到沒有安裝的字體則會另外找替代字體。若每次輸出時都需要安裝所有的字體想必系統內的字體會非常雜亂、混亂,所以在指令列中可以用 fontsdir 指定字體儲存的資料夾。

ass filter 的參數大部分與 subtitles 的參數相同,相同的有 filename(可用 f 縮寫)、original_size、fontsdir、alpha、force_style,剩下的是專屬於 subtitles 的有:charenc、stream_index(可用 si 縮寫)。

  • filename:檔案名稱。無其他參數時可省略不寫。
  • original_size:原始影片的尺寸,相關的尺寸縮寫可以點此前往 FFmpeg Documentation 查看
  • fontsdir:字體檔資料夾。
  • alpha:是否開啟 alpha channel
  • force_style:以後方指定的參數覆蓋檔案中的設定,若有多參數請用英文半形逗號分隔。值使用 ass 之格式(採 KEY=VALUE 形式)。
  • charenc(subtitle 限定):編碼,預設為 UTF-8。
  • stream_index:串流索引,指定 mkv 檔案中字幕的串流編號。

此外,在 ass filter 裡各個參數間使用英文半形冒號分隔,請不要與其他分隔符號搞混。為了避免空白的老馬,建議在輸入參數的值的時候用雙括號或單括號包起來,避免因為空白等讓 FFmpeg 誤判指令。

因為包在 mkv 裡的 ass 字幕檔不支援使用 stream_index 指定,所以需要用到 mkv 的抽出程式將字幕檔抽出後再用指令以 FFmpeg 合併。

雖然這裡主要以 ass 做例子,但 subtitles 的用法也大同小異。ass filter 與 subtitles filter 的差異在於 ass filter 是給 ass 字幕使用;subtitles filter 是給 srt 字幕使用。

題外話

想知道本篇文的封面圖利用那些資源製成的請下方留言。

0 則留言

熱門文章

《Minecraft》快捷鍵一覽表

《Minecraft》快捷鍵一覽表

鍵盤 嗨!歡迎造訪我的部落格。良好的運用快捷鍵可以讓一件事在短時間內完成,如:整理箱子,而當箱子內的物品不是擺放整齊的單個拿出又太花時間導致你不想整理?或是對箱子的整潔有強迫症每次都會整理卻找不到比較…
前往閱讀 前往閱讀右箭頭
《Pokémon Go》3 個途徑取得神奧之石

《Pokémon Go》3 個途徑取得神奧之石

神奧之石(Sinnoh Stone,又稱神奧石)是 Pokémon Go 的寶可夢進化道具。許多第四代寶可夢都需要用到神奧石才能獲得。神奧石稀有,獲得途徑也有限,遊戲中目前一共有三個途徑。
前往閱讀 前往閱讀右箭頭
《崩壞:星穹鐵道 & 原神》國際服最新的兌換碼、前瞻兌換碼

《崩壞:星穹鐵道 & 原神》國際服最新的兌換碼、前瞻兌換碼

2.1 前瞻直播 兌換碼依照過期時間近到遠以及更新時間新到舊的順序排序;沒有標註過期時間的代表未知;如果連結的顏色是灰色的,代表你可能兌換過了。如果有需要也可以 點這裡前往官方的兌換頁 。 ST3SHPNL…
前往閱讀 前往閱讀右箭頭
《特戰英豪 Valorant》預設快捷鍵

《特戰英豪 Valorant》預設快捷鍵

特戰英豪 特戰英豪是我第一個接觸的射擊競技遊戲,因為我本身對於射擊遊戲非常不上手,瞄準、發射、槍的後座力、等等的影響精準度的變數實在太多。雖然我覺得特戰英豪的鍵位提示、說明、指示、等等做的很清楚,但還…
前往閱讀 前往閱讀右箭頭
《原神》楓丹七天神像升級需要的水神瞳數量表

《原神》楓丹七天神像升級需要的水神瞳數量表

楓丹廷 / Source: Fandom 楓丹是原神旅行者第五個拜訪的國家,是水的國度,第一個潛水的玩法也在這裡開始。供奉楓丹的七天神像需要一定數量的水神瞳才能供奉至滿級,也就是 10 級。這裡將統整…
前往閱讀 前往閱讀右箭頭
7 個能輕鬆找到理想 Minecraft Skin 的網站

7 個能輕鬆找到理想 Minecraft Skin 的網站

忍者外觀 / pxfuel Minecraft(麥塊、當個創世神、我的世界)是一個可以自訂外觀(skin、皮膚)的遊戲。Minecraft 外觀千百萬種,由許多玩家協力製作出數量如此龐大的外觀,想在其…
前往閱讀 前往閱讀右箭頭
《原神》須彌七天神像升級所需的草神瞳數量一覽表

《原神》須彌七天神像升級所需的草神瞳數量一覽表

蘭那羅:蘭那庫拉 有需要須彌所有草神瞳的位置可以參考原神官方的提瓦特互動地圖,可從 HoYoLAB 進入。目前完整蒐集完會是 10 級神像和 1 個草神瞳(一共 271 顆草神瞳)。
前往閱讀 前往閱讀右箭頭
《刀劍亂舞》全刀種鍛刀時間以及鍛刀配方

《刀劍亂舞》全刀種鍛刀時間以及鍛刀配方

山姥切国広 孫六兼元期間限定鍛刀開跑中。刀劍亂舞九周年!有一組 兌換碼 可以使用。 刀劍亂舞中,鍛刀的時間與投入的資源、最終成品是有關係的: 投入的資源愈多,鍛刀的時間愈長(純屬趨勢並非絕對) 鍛刀時間愈長,成…
前往閱讀 前往閱讀右箭頭
如何進化《Pokémon Go》伽勒爾型態的哭哭面具至死神板

如何進化《Pokémon Go》伽勒爾型態的哭哭面具至死神板

Ghost 562 哭哭面具 デスマス Yamask 《Pokémon 劍/盾》為寶可夢的世界帶來第八代新的寶可夢,當然也連帶影響 Pokémon Go 的遊戲內容。伽勒爾地區是《Pokémon 劍/盾》的主…
前往閱讀 前往閱讀右箭頭