動画の音声を、BGMやナレーション、整音し直した音声などに差し替える手順です。映像は元の動画から、音声は新しい音声ファイルから取り出して、1つのファイルにまとめます。映像は再エンコードしないので、画質は落ちません。
1. 基本コマンド:2入力をまとめてマッピング
FFmpegに入力ファイルを2つ渡します。-map で、1つ目から映像、2つ目から音声を選びます。
ffmpeg -i input.mp4 -i input.mp3 -map 0:v:0 -map 1:a:0 -c:v copy -c:a aac -shortest output.mp4
-i input.mp4… 入力0(映像)-i input.mp3… 入力1(新しい音声)-map 0:v:0… 入力0から映像ストリーム(映像のデータ)を取る-map 1:a:0… 入力1から音声ストリームを取る-c:v copy… 映像を無劣化コピー(再エンコードなし)-c:a aac… 新しい音声をAACにエンコード(MP4向き)-shortest… 2つのうち短いほうが終わった時点で止める
| 記法 | 読み方 |
|---|---|
0:v:0 |
入力0、最初の映像ストリーム |
1:a:0 |
入力1、最初の音声ストリーム |
-c:v copy |
映像を1ビットも変えずに保持 |
-c:a aac |
音声をAACに再エンコード |
入力やストリームの番号は0から数えます。-map の書き方は Map wiki に詳しく載っています。
2. -shortest で再生時間を合わせる
映像と新しい音声の長さは、たいてい一致しません。-shortest を付けると、短いほうのストリームが終わった時点で出力を終えます。末尾が無音になったり、止まった最後のフレームのまま音声だけが流れ続けたりするのを防げます。
- 音声が映像より長い場合、余った音声はカットされます。
- 映像が音声より長い場合、映像が音声の長さで切られます。
映像を最後まで残したい場合は、-shortest を外します。音楽が先に終わると、動画の末尾は無音になります。
3. 先に古い音声を削除する
2段階に分ける方法もあります。先に元の音声を取り除き、あとから新しい音声を加えます。まず、音声を削除します。
ffmpeg -i input.mp4 -c:v copy -an output.mp4
-c:v copy… 映像をそのままコピー-an… すべての音声を削除
これで無音の動画ができます。新しい音声は、この動画を入力にして第1章のコマンドで加えます。音声の削除について詳しくは音声削除ガイドを参照してください。
4. 音声を再エンコードするかコピーするか
第1章では、音声をAACに再エンコードしています。MP4では、AACの音声がいちばん多くの環境で再生できるからです。新しい音声が最初からAAC(.m4a ファイルなど)なら、再エンコードせずにそのままコピーできます。
ffmpeg -i input.mp4 -i input.m4a -map 0:v:0 -map 1:a:0 -c copy -shortest output.mp4
-c copy… 映像も音声も再エンコードせずにコピー
| 新しい音声 | 推奨 | 理由 |
|---|---|---|
| WAV / FLAC | -c:a aac |
MP4にも入れられるが、AACのほうが再生できる環境が広い |
| MP3 | -c:a aac(または -c copy) |
MP3はMP4にコピー可能だが、AACの方が互換性が最も広い |
| AAC / M4A | -c copy |
すでに互換、無劣化でコピー |
5. 音声のディレイ・オフセットを加える
新しい音声を少し遅らせて始めたい場合は、音声ファイルの -i の前に -itsoffset を置きます。
ffmpeg -i input.mp4 -itsoffset 1.5 -i input.mp3 -map 0:v:0 -map 1:a:0 -c:v copy -c:a aac -shortest output.mp4
-itsoffset 1.5… 次の入力(音声)を1.5秒後ろにずらす
音声が合うまで数値を調整します。負の値にすると、音声が前にずれます。
6. トラブルシューティング
症状1: 新しい音声ではなく元の音声が残ってしまう
原因: -map を指定しないと、FFmpegは音声を1つだけ自動で選びます。各ファイルから候補を1つずつ選び(ファイルの中では既定に設定された音声が優先)、そのうちチャンネル数が最も多い音声を使います。同じなら先に指定したファイル(動画)の音声です。
解決策: -map 0:v:0 -map 1:a:0 を追加して、使うストリームを指定します(第1章)。
症状2: 音声と映像がずれていく
原因: 新しい音声の長さが、映像と少し違います(別の機器で録った音声など)。
解決策: atempo フィルタで音声の速さを合わせます。倍率は「音声の長さ ÷ 映像の長さ」です。100.1秒の音声を100秒の映像に合わせるなら、-af atempo=1.001 を加えます。-itsoffset(第5章)は全体を同じだけずらすので、最初から最後まで同じだけずれている場合に使います。
症状3: 音声をコピーすると Could not find tag for codec が出る
原因: コピーしようとした音声のコーデックが、MP4に対応していません。
解決策: -c copy ではなく -c:a aac で再エンコードします(第1章)。
よくある質問
Q1. 先に古い音声を削除する必要がありますか? A. ありません。第1章のコマンドなら、1回の実行で差し替えられます。第3章のように先に削除する方法は、手順が分かりやすい別のやり方です。
Q2. 音声を差し替えると画質は落ちますか?
A. 落ちません。-c:v copy は映像をそのままコピーし、音声だけを新しく書き込みます。
Q3. 音楽が映像より長いとき、どう切りますか?
A. -shortest を付けたままにします。映像が終わった時点で出力が終わります。
Q4. 元の音声を残したまま新しい音声も追加できますか?
A. できます。差し替えるのではなく、両方の音声ストリームを -map で選びます。音声トラックを複数持つファイルになります。複数音声トラックの扱い方を参照してください。