目的
觀看影片時,通常需要將繁體中文的字幕檔與影片放在同一個資料夾底下。播放的時候,大多數的播放器(像是 VLC)會自動偵測字幕檔的存在,並且在影片播放時載入,將字幕顯示在影片底部。
本篇文章主要是希望將影片與字幕檔合併在一起,讓影片本身即包含了我們希望看到的字幕檔,而不需要另外放在同一個資料夾。
以下的流程,會先從原始影片取出需要的字幕檔,再將取出的字幕檔與額外的字幕檔,與原始影片中的 video track 與 audio track 合併,產生新的影片檔案。
方法
從原始影片取出英文字幕檔
.\ffmpeg.exe -i .\original_video.mkv -map 0:2 eng-sub.srt
以上是在 Windows PowerShell 使用的指令
-i
後面跟著的檔名指的是輸入的原始影片檔案
-map 0:2
指的是取出原始檔案中第三個 track 的資料,在本範例中,原始檔案第三個 track 是英文字幕的 track
eng-sub.srt
指的是輸出的檔名
合併字幕與影片
.\ffmpeg.exe -i .\original_video.mkv -i .\cht.srt -i .\eng-sub.srt -c:v copy -c:a copy -c:s subrip -map 0:0 -map 0:1 -map 1 -map 2 -metadata:s:s:0 language=chi -metadata:s:s:1 language=eng -disposition:s:0 default output.mkv
第一個 -i
後面跟著的是原始影片檔
第二個 -i
後面跟著的是要加入的中文字幕檔
第三個 -i
後面跟著的是要加入的英文字幕檔
-c:v copy
代表直接複製原始影片檔的 video codec
-c:a copy
代表直接複製遠使影片檔的 audio codec
-c:s subrip
指定字幕使用 subrip 這個 codec
-map 0:0 -map 0:1
代表從第一個輸入的檔案(也就是原始影片檔),取出 track 編號 0 與 1(在本範例中 0 是 video track,1 是 audio track)
-map 1
代表從第二個輸入的檔案取出所有 tracks(在本範例中,第二個輸入的檔案只有字幕,所以所有的 tracks 指的即是中文字幕 track)
-map 2
意思同上,從第三個輸入檔案取出所有 tracks(英文字幕 track)
-metadata:s:s:0 language=chi
設定輸出檔案中,第一個字幕 track 的名稱為 chi(chi = Chinese = 中文)
-metadata:s:s:1 language=eng
設定輸出檔案中,第一個字幕 track 的名稱為 eng(eng = English)
-disposition:s:0 default
將第一個字幕 track 設定為 default(預設使用的字幕)
output.mkv
輸出的檔案名稱
References
ffmpeg: how to add several subtitle streams
ffmpeg set subtitles track as default
發佈留言