ffmpegコマンドで字幕を映像ファイルに追加

手元に、映像ファイル(video.mp4)、音声ファイル(audio.mp4)、字幕ファイル(sub.srt)があるため、それらを一つのファイルにまとめたい。

FFmpegで動画に字幕・副音声を追加する | DevelopersIO

に解決策が書かれている。

ffmpeg -i video.mp4 -i audio.mp4 -i sub.srt -map 0:v -map 1:a -map 2 -metadata:s:s:0 language=Japanese -c:v copy -c:a copy -c:s copy output.mkv

のコマンドを実行すればよい。

参考URLには

ffmpeg -i video.mp4 -i audio.mp4 -i sub.srt -map 0:v -map 1:a -map 2 -metadata:s:s:0 language=jpn -metadata:s:s:0 title="Japanese" -c:v copy -c:a copy -c:s copy output.mkv

オプションもついていたが、表示される字幕の言語が「jpn」のままだった。

追記:

作成した動画を再生するとき、デフォルトでは字幕が表示されない。

デフォルト字幕を表示させるため、

-disposition:s:0 default

のオプションをつければよい。また、今後のマルチ音声に対応するため、音声にもメタデータをつけることも可能なので、最終的なコマンドは

ffmpeg -i video.mp4 -i audio.mp4 -i sub.srt -map 0:v -map 1 -metadata:s:a:0 language=Japanese -map 2 -metadata:s:s:0 language=Japanese -c copy -disposition:s:0 default output.mkv

となる。