2026年7月16日 木曜日
AI時短ラボ
活用· 約7

ffmpegでナレーションとBGMをミックスする手順──全体loudnormでBGMが浮く音量事故を防ぐ処理順序

ffmpegでナレーションとBGMを混ぜる際、完成音声全体にloudnormをかけるとナレーション無音部でBGMが持ち上がる事故が起きます。声だけにloudnorm→BGMは固定音量→amixはnormalize=0→alimiterという処理順序で防ぐ方法を解説します。

ffmpegでナレーションとBGMをミックスする手順──全体loudnormでBGMが浮く音量事故を防ぐ処理順序
執筆・編集:
目次

ffmpegでナレーションとBGMを1本の音声にまとめるとき、ありがちな失敗が「完成したミックス全体にloudnorm(ラウドネス正規化=聞こえの大きさを一定に揃える処理)をかける」ことです。これをやると、ナレーションの無音部分でBGMだけがグッと持ち上がり、不自然な仕上がりになります。この記事では、その原因と、事故を防ぐ処理順序――①声だけにloudnorm、②BGMは固定の低音量、③amixはnormalize=0で合成、④最後にalimiterでピーク保護――を解説します。

  • ミックス済み音声に全体loudnormをかけると、ナレーションの無音区間でBGMが持ち上がって不自然になる
  • 防ぐ順序は「声だけ正規化 → BGMは固定音量 → amixはnormalize=0で合成 → alimiterでピーク保護」
  • amixはデフォルトで入力音量を自動的に下げるため、normalize=0の明示が要点になる

なぜ「全体にloudnorm」でBGMが浮くのか

loudnormはffmpegに標準搭載されたラウドネス正規化フィルタで、音声全体を目標の聞こえの大きさに近づけてくれます。便利な半面、ミックス済みの音声にかけると「ナレーションが鳴っている区間」と「ナレーションが無音でBGMだけの区間」を区別しません。無音区間は全体として音が小さいと扱われ、ゲイン(音量の増幅)が持ち上がる方向に働くため、BGMだけがフワッと大きくなる――これが典型的な音量事故です。

しかも、一度ミックスした音声から声とBGMを後から分離するのは困難です。「書き出してから直す」のではなく、処理の順序で最初から防ぐのが現実的です。

事故を防ぐ4ステップの処理順序

  1. ラウドネス正規化はナレーション単体にかける。 声だけのファイルに対してloudnormを適用すれば、無音区間で持ち上がるのはナレーション側の背景(ほぼ無音)だけで、BGMには影響しません。
  2. BGMは固定の低音量にする。 BGM側には自動的な正規化をかけず、volumeフィルタで一定の音量に下げるだけにします。
  3. amixはnormalize=0で合成する。 amixは複数の音声を混ぜるフィルタですが、デフォルトでは入力同士の音量を自動でスケール(各入力を下げてから加算)します。①で整えた声の音量を勝手に下げられないよう、normalize=0で「そのまま足す」挙動にします。
  4. alimiterでピークを保護する。 normalize=0の単純加算は、声とBGMの山が重なった瞬間にピークが天井を超えて音割れ(クリップ)する可能性があります。最後にalimiter(リミッター=音量の天井を抑えるフィルタ)を通して保護します。

コマンド例(数値パラメータは環境に合わせて調整)

概念を示すための例です。loudnormの目標値(I/TP/LRA)、BGMのvolume値、alimiterの設定は素材と配信先に合わせて調整してください。

# ① ナレーション単体をラウドネス正規化
ffmpeg -i narration.wav -af loudnorm voice_norm.wav

# ②〜④ BGMを固定音量にして合成し、リミッターで保護
ffmpeg -i voice_norm.wav -i bgm.mp3 \
  -filter_complex "[1:a]volume=<BGMの固定値>[bgm]; \
                   [0:a][bgm]amix=inputs=2:duration=first:normalize=0[mix]; \
                   [mix]alimiter[out]" \
  -map "[out]" mixed.wav

ポイントは、loudnormが登場するのが①の「声単体」の段階だけであること。ミックス後の音声には正規化をかけません。

amixのnormalize=0とalimiterはセットで考える

normalize=0を指定すると、amixは入力を自動で下げずに加算します。声のラウドネスを①で整えた意味を保つには必要な指定ですが、その代償としてピーク超過のリスクを自分で管理することになります。そこで④のalimiterが受け皿になる、という役割分担です。「自動で下げられるのを止める」と「上がりすぎを止める」を別のフィルタに分けて担当させる構図だと理解すると、順序を忘れにくくなります。

筆者の現場から

解説動画の音声制作で、完成音声全体にloudnormをかけて、ナレーション無音部のBGMが浮く事故を経験しました。以来、「声だけにloudnorm→BGMは固定音量→amixはnormalize=0→alimiter」という順序に固定してから、この事故は再発していません。

正直な但し書き

  • loudnorm・volume・alimiterの適切なパラメータは、素材の録音状態・視聴環境・配信先によって変わります。この記事の主眼は「処理の順序」であり、数値は各自の環境で試聴しながら詰めてください。
  • BGM音源自体の音量変化が大きい曲では、固定音量にしても聞こえ方がばらつくことがあります。その場合はBGM側に別途の処理を検討する余地があります。
  • ffmpegのバージョンによってフィルタのオプションや既定値が異なる場合があります。手元のバージョンの公式ドキュメントを確認してください。
  • 音の「自然さ」の最終判定は耳で行うものです。コマンドが通ったことと、仕上がりが聴けるものであることは別問題として、必ず試聴してください。

出典

シェア: ポスト はてブ

出典・参照資料

AIニュースの解説を動画でも

YouTubeでは注目ニュースの背景を解説し、Xでは新着記事をお知らせしています。

コメント

まだコメントはありません。最初のコメントを書いてみませんか?

AIについて聞きたいことはありますか?

質問箱で無料で受け付けています。回答は公開され、他の方の参考にもなります。

質問箱を見る →

関連記事