ffmpeg 2.3.2 で映像と音声を結合させる

メモです。
ffmpegはバージョンが違うとオプションの使い方が大きく変わったりしますのでご注意ください*1

ffmpegのバージョン

$ ffmpeg -version
ffmpeg version 2.3.2 Copyright (c) 2000-2014 the FFmpeg developers
built on Aug 17 2014 23:24:49 with Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/2.3.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid --enable-libvorbis --enable-librtmp --enable-openssl

映像の音声の代わりに音声ファイルを使う

  • orig_video_jpn_audio.mp4 の映像(map0のストリーム0)と
  • orig_eng_audio.m4a の音声(英語:map1のストリーム0)と

を結合する。

$ ffmpeg -i orig_video_jpn_audio.mp4 -i orig_eng_audio.m4a -map 0:0 -map 1:0 output.mp4
 :
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #1:0 -> #0:1 (aac (native) -> aac (libfaac))

映像の音声も使い音声チャンネルを2チャンネルにする

  • orig_video_jpn_audio.mp4 の映像(map0のストリーム0)を使い、音声(日本語:map0のストリーム1)を第2チャンネルに「日本語」として
  • orig_eng_audio.m4a の音声(英語:map1のストリーム0)を第1チャンネルに「英語」として

それぞれ設定して結合する。

$ ffmpeg -i orig_video_jpn_audio.mp4 -i orig_eng_audio.m4a -map 0:0 -map 1:0 -metadata:s:a:0 language=eng -map 0:1 -metadata:s:a:1 language=jpn -t 60 output.mp4
 :
Output #0, mp4, to 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.48.100
    Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 480x270 [SAR 1:1 DAR 16:9], q=-1--1, 29.97 fps, 30k tbn, 29.97 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc55.69.100 libx264
    Stream #0:1(eng): Audio: aac (libfaac) ([64][0][0][0] / 0x0040), 22050 Hz, stereo, s16, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      encoder         : Lavc55.69.100 libfaac
    Stream #0:2(jpn): Audio: aac (libfaac) ([64][0][0][0] / 0x0040), 32000 Hz, stereo, s16, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      encoder         : Lavc55.69.100 libfaac
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #1:0 -> #0:1 (aac (native) -> aac (libfaac))
  Stream #0:1 -> #0:2 (aac (native) -> aac (libfaac))

残念ながら Mac の場合は QuickTime でも iTunes でもチャンネル分離せず同時に再生してしまいます。
仕方ないので再生には VLC を使ってください。

*1:-newaudio とか -alang とか…