ffmpegで動画と音声を結合する

最近のDVD & Blu-rayコンテンツは副音声があることが多いので、ffmpegを使って映像と主音声でエンコードした動画ファイルに副音声の音声ファイルにつっこむやり方メモ。

ストリームの確認

結合対象のファイル達をとりあえず-iオプションで食わせてみます。

ffmpeg -i movie.mkv -i audio.flac

すると出力の最後のほうはこんな感じに。

...
Input #0, matroska,webm, from 'movie.mkv':
...
    Stream #0:0: Video: h264 (High), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 180k tbc (default)
    Stream #0:1(jpn): Audio: flac, 48000 Hz, stereo, s32 (default)
Input #1, flac, from 'audio.flac':
...
    Stream #1:0: Audio: flac, 48000 Hz, stereo, s16
...

movie.mkvは「Stream #0:0」としてh264フォーマット、「Stream #0:1」としてflacフォーマット、audio.flacは「Stream #1:0」としてflacフォーマットが読み込まれているのがわかります。

ストリームを結合

上記のストリームを読み込み、-mapオプションを使っては1番目のストリームに「Stream #0:0」、2番目のストリームに「Stream #0:1」、3番目のストリームに「Stream #1:0」をつっこんだ動画ファイルを出力します。再エンコードは特にしたくないのでコーデックはコピーするために-c copyオプションを追加。

ffmpeg -i movie.mkv -i audio.flac -c copy -map 0:0 -map 0:1 -map 1:0 new.mkv

すると以下のような出力はこんな感じになって、new.mkvとして結合された動画ファイルが出来ます。

...
Output #0, matroska, to 'new.mkv':
...
    Stream #0:0: Video: h264 (H264 / 0x34363248), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 1k tbn, 1k tbc (default)
    Stream #0:1(jpn): Audio: flac ([172][241][0][0] / 0xF1AC), 48000 Hz, stereo (default)
    Stream #0:2: Audio: flac ([172][241][0][0] / 0xF1AC), 48000 Hz, stereo
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
  Stream #1:0 -> #0:2 (copy)
...

なんでか-mapオプションの使い方をよく忘れるのでメモでした。