動画の音声を、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 で選びます。音声トラックを複数持つファイルになります。複数音声トラックの扱い方を参照してください。

関連記事