動画に新しいサウンドトラック(BGM、ナレーション、整音し直した音声ミックスなど)を付けるのは、FFmpegの定番作業です。コツは、映像を一方のファイルから、音声をもう一方から取り出し、映像を無劣化のまま1つの出力に結合するようFFmpegに指示することです。本記事では基本となる2入力コマンド、-shortest で長さを合わせる方法、そして削除してから追加するシンプルな手順を解説します。所要時間:8分。

動作確認: FFmpeg 8.1


この記事でわかること

  1. 基本コマンド:一方から映像、もう一方から音声をマッピング
  2. -shortest で再生時間を合わせる方法
  3. 先に古い音声を削除する方法(クリーンな単一入力ステップ)
  4. 音声を再エンコードするかコピーするか
  5. 音声のディレイ・オフセットを加える方法
  6. トラブルシューティングとFAQ

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に再エンコード

このコマンドは -i 入力が2つあるため、実行可能ブロックではなくプレーンテキストで示しています。映像と音声の両方のファイルが必要だからです。これがこの作業の正しいコマンドです。-map の文法は Map wiki に詳しくあります。


2. -shortest で再生時間を合わせる

映像と新しい音声の長さが同じであることはまれです。-shortest は、短いほうのストリームが尽きた時点で出力を終了するようFFmpegに指示します。これにより、末尾が無音の動画や、フリーズした最後のフレームに音声だけが流れ続ける状態を防げます。

  • 音声が映像より長い場合、余った音声はカットされる。
  • 映像が音声より長い場合、映像は音声の長さに切られる。

映像を丸ごと残し、音楽が早めに終わるのを許容したい場合は -shortest を外します。ただし、その場合は動画の末尾が無音になります。


3. 先に古い音声を削除する(単一入力ステップ)

クリーンな2段階の方法として、まず元の音声を取り除き、それから新しいものを追加する手があります。音声削除は単一入力の操作なので、通常のコマンドとして実行できます。

ffmpeg -i input.mp4 -c:v copy -an output.mp4
  • -c:v copy … 映像をそのままコピー
  • -an … すべての音声を削除

これで無音の動画が得られます。新しいサウンドトラックの多重化は第1章の2入力ステップです。音声削除の詳細は音声削除ガイドを参照してください。


4. 音声を再エンコードするかコピーするか

第1章ではMP4がAACで最もよく再生できるため、音声を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 aacMP4ネイティブではないのでAACに再エンコード
MP3-c:a aac(または -c copyMP3は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が映像ファイル自身の音声を自動選択した。 解決策: -map 0:v:0 -map 1:a:0 を追加してストリームを明示的に選びます(第1章)。

症状2: 音声と映像がずれていく

原因: 2つのストリームでフレームレートや開始オフセットが異なる。 解決策: -itsoffset でタイミングを微調整するか(第5章)、映像を再エンコードしてタイムスタンプをきれいに再生成します。

症状3: 音声をコピーすると Could not find tag for codec が出る

原因: 元の音声コーデックがMP4で有効でない。 解決策: -c copy ではなく -c:a aac で再エンコードします(第1章)。


よくある質問

Q1. なぜ基本コマンドが実行可能ブロックではなくプレーンテキストなのですか? A. 入力を2つ(映像と音声)使うため、汎用的な単一ファイルのテストでは実行できないからです。コマンド自体は正しいので、ご自身の映像と音声ファイルを与えてください。

Q2. 先に古い音声を削除する必要がありますか? A. ありません。第1章の2入力コマンドは1パスで差し替えます。先に削除する方法(第3章)は分かりやすい代替案です。

Q3. 音声を差し替えると画質は落ちますか? A. 落ちません。-c:v copy は映像をそのままコピーし、音声だけが新しく書き込まれます。

Q4. 音楽が映像より長いとき、どう切りますか? A. -shortest を付けたままにします。映像が終わった時点で出力を終了します。

Q5. 元の音声を残したまま新しい音声も追加できますか? A. できます。差し替えではなく両方の音声ストリームをマッピングします。マルチトラックのファイルになります。複数音声トラックの扱い方を参照してください。


関連記事


Tested with FFmpeg 8.1 — verified with our command-check script 一次ソース: ffmpeg.org/ffmpeg.html / trac.ffmpeg.org/wiki/Map