FFmpeg使って複数の音声と字幕から一つの動画を作成する
ffmpeg
を使って複数の音声と字幕から一つの動画を作成する方法。
ffmpeg.exe -i video.mp4 -i de.mp4 -i de_sw.mp4 -i fr.mp4 -i ru.mp4 -i de_co.mp4 -i de.srt -i en.srt -map 0:0 -metadata:s:v:0:0 language=ger -map 2:0 -metadata:s:a:1:0 language=ger -map 1:0 -metadata:s:a:0:0 language=ger -map 3:0 -metadata:s:a:2:0 language=fre -map 4:0 -metadata:s:a:3:0 language=rus -map 5:0 -metadata:s:a:4:0 language=ger -map 6:0 -metadata:s:s:0:0 language=ger -map 7:0 -metadata:s:s:1:0 language=eng -c copy -scodec mov_text out.mp4
コマンドの解説
まず入力ソースに使う動画は一つ一つに-i
オプションを付けて呼び出します。
そして-map
の横についてる数字は何個目の引数として呼び込まれたか:その動画や音声のどのストリームか
を表しています。そして-metadata
を使って音声や字幕の言語を指定するのですがこの時に映像・音声・字幕でそれぞれ別のストリームとして言語を設定しないといけません。これがわからずにかなりの時間を費やしてしまいました…。
ちなみに-acodec copy -vcodec copy
という使い方をされてる人が多いですが-c copy
で一括指定できます。
知っとくと便利なこと
-t 数値
で出力する長さを選べるのでちゃんと合成で来てるか確認したいだけの時は-t 180
などして簡単に動画の確認だけすると良いでしょう。
ffmpeg
はなんでもできるし、どのOSでも使えるのに引数がめんどくさすぎるせいであまり情報がないのがもったいないですよね。
何かわからないことがあったらコメント欄で聞いてください。