YJYW's Style Life

影音編輯|使用 ffmpeg 合併影片與字幕

目的

觀看影片時,通常需要將繁體中文的字幕檔與影片放在同一個資料夾底下。播放的時候,大多數的播放器(像是 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 – ExtractSubtitles

ffmpeg: how to add several subtitle streams

ffmpeg set subtitles track as default

發佈留言

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