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より多言語トラックのサポートが限られています:
| 機能 | MKV | MP4 |
|---|---|---|
| 複数音声トラック | ◯ 対応 | ◯ 対応(ただし互換性に注意) |
| 言語タグ | ◯ | ◯ |
| 字幕のテキスト形式 | ◯(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.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=..." を使ってください。