1本の動画に日本語と英語の音声を入れて切り替え可能にしたい、コメンタリーを副音声として追加したい——こうした多言語・複数音声の管理は FFmpeg で行えます。この記事では複数音声トラックの作成・追加・抽出・削除、jpn/eng などの言語タグ付け、デフォルト音声トラックの指定、そして MKV と MP4 の対応差までをまとめます。

動作確認: FFmpeg 6.1(ubuntu-latest / GitHub Actions CI 検証済み)/対象 OS: Windows / macOS / Linux


なぜ複数音声トラックが必要か

複数音声トラックは以下の用途で使われます:

  • 多言語対応(日本語・英語の吹き替え)
  • オーディオコメンタリー(映画の副音声)
  • 音声形式違い(AACとDolby AC-3を両方収録)
  • ステレオ+5.1chサラウンドを一つのファイルに

ストリーム情報を確認する

まず入力ファイルの音声トラック数を確認します:

ffprobe -v quiet -show_streams -select_streams a input.mkv

2つの音声ファイルを1本の動画にまとめる

ffmpeg -i video.mp4 -i audio_ja.aac -i audio_en.aac \
  -map 0:v:0 \
  -map 1:a:0 \
  -map 2:a:0 \
  -c:v copy -c:a copy \
  output_bilingual.mkv
  • 0:v:0:入力0(video.mp4)の映像ストリーム
  • 1:a:0:入力1(audio_ja.aac)の音声ストリーム
  • 2:a:0:入力2(audio_en.aac)の音声ストリーム

言語メタデータを設定する

ffmpeg -i video.mp4 -i audio_ja.aac -i audio_en.aac \
  -map 0:v:0 \
  -map 1:a:0 \
  -map 2:a:0 \
  -c copy \
  -metadata:s:a:0 language=jpn \
  -metadata:s:a:1 language=eng \
  output.mkv

-metadata:s:a:0 はゼロ番目の音声ストリームのメタデータを設定します。言語コードは ISO 639-2(3文字)形式を使います(jpn, eng, fra, deu など)。


デフォルト音声トラックを設定する

ffmpeg -i input.mkv \
  -c copy \
  -disposition:a:0 default \
  -disposition:a:1 0 \
  output.mkv
  • -disposition:a:0 default:0番目の音声をデフォルトに設定
  • -disposition:a:1 0:1番目の音声のデフォルトフラグを解除

既存の動画に音声トラックを追加する

ffmpeg -i existing.mp4 -i new_audio.aac \
  -map 0 \
  -map 1:a \
  -c copy \
  output_added.mkv

-map 0(既存ファイルの全ストリーム)に加えて、-map 1:a(新しい音声)を追加します。


特定の音声トラックだけを抽出する

ffmpeg -i input.mkv -map 0:a:1 -c:a copy audio_track2.aac

0始まりで数えて2番目(インデックス1)の音声トラックを抽出します。


特定の音声トラックを削除する

ネガティブマッピングを使って特定のトラックを除外:

ffmpeg -i input.mkv -map 0 -map -0:a:1 -c copy output.mkv

-map 0(全ストリーム)から -map -0:a:1(2番目の音声を除外)を引いた結果を出力します。


音声トラックのコーデックを変換する

1番目の音声はAACにして2番目はコピーする例:

ffmpeg -i input.mkv \
  -map 0:v -map 0:a:0 -map 0:a:1 \
  -c:v copy \
  -c:a:0 aac -b:a:0 192k \
  -c:a:1 copy \
  output.mkv

-c:a:0-c:a:1 で各音声ストリームのコーデックを個別に指定できます。


MP4での注意点

MP4はMKVより多言語トラックのサポートが限られています:

機能MKVMP4
複数音声トラック◯ 対応◯ 対応(ただし互換性に注意)
言語タグ
字幕のテキスト形式◯(ASS/SRT)△(mov_text形式)
無制限のトラック数△(プレーヤー依存)

複数音声の長期保存にはMKVを推奨します。


よくある問題

音声トラックを追加したらファイルが大きくなりすぎた

-c:a copy を使うと再エンコードなしで音声をコピーできます。ただし既存トラックと新しいトラックのフォーマットが異なる場合はMP4の互換性に注意。

プレーヤーが特定の音声トラックを認識しない

-disposition:a:0 default で最初のトラックをデフォルトに設定するか、プレーヤー側のトラック選択設定を確認してください。


音声トラック情報の一覧表示

ffprobe -v quiet -show_streams -select_streams a \
  -show_entries stream=index,codec_name,channels:stream_tags=language \
  -of csv input.mkv

関連リソース

よく使うオプション・フィルタ・コーデック設定をまとめた PDF チートシートです。手元に置いておくと調べる時間を短縮できます。

FFmpeg チートシート

関連記事


一次ソース: ffmpeg.org/ffmpeg.html#Stream-specifiers-1 / trac.ffmpeg.org/wiki/Map


よくある質問

複数音声トラックの動画を保つには?

-map 0:a で全ての音声ストリームをコピーします。-c copy を併用するとさらに高速かつ無劣化で出力できます。

日本語音声と英語音声を切り替えたい

出力時に各音声トラックに metadata:s:a:0 language=jpn のように言語タグを付けると、対応プレーヤー(VLC / mpv / Plex)でメニューから切替えられます。

MP4 で複数音声トラックは使える?

はい、MP4 は複数音声トラックに対応しています。ただし古い iPhone やメールアプリは最初の音声トラックしか再生できないため、配信環境を確認してください。

デフォルトで再生される音声を指定したい

-disposition:a:0 default -disposition:a:1 0 のように disposition フラグで設定します。0 番目の音声がデフォルト、1 番目はデフォルトでない、という意味です。

5.1ch を 2ch にダウンミックスしたい

-ac 2 で自動的にステレオダウンミックスされます。より細かく制御したい場合は -af "pan=stereo|FL=...|FR=..." を使ってください。