オーディオダッキングとは

オーディオダッキングは、ナレーションなどの声が入ったときに、BGM の音量を自動で下げる処理です。映像作品やポッドキャスト、解説動画でよく使われます。FFmpeg では sidechaincompress フィルタを使います。

基本的な仕組み

ナレーション(サイドチェイン信号)
       ↓ 音量が上がる
コンプレッサーが BGM を圧縮
       ↓
BGM の音量が自動で下がる

sidechaincompress には、音声を2つ入力します。

  1. 主信号(BGM):音量を下げられる側
  2. サイドチェイン信号(ナレーション):BGM を下げるきっかけになる側

基本コマンド

動画の音声(BGM)を、別ファイルのナレーションに合わせて下げる例です。

ffmpeg -i input.mp4 -i input.mp3 \
  -filter_complex "[0:a]aformat=fltp:44100:stereo[bg];[1:a]aformat=fltp:44100:stereo,apad[voice];[bg][voice]sidechaincompress=threshold=0.02:ratio=4:attack=200:release=1000[ducked]" \
  -map 0:v -map "[ducked]" -c:v copy output_ducked.mp4

input.mp4 の音声を BGM、input.mp3 をナレーションとして扱い、ナレーションが鳴っている間だけ BGM を下げます。apad は、ナレーションが終わったあとを無音で埋める指定です。これがないと、ナレーションが BGM より短いときに、ナレーションが終わったところで BGM も途切れます。出力に入る音声は、下げたあとの BGM だけです。ナレーションも重ねる方法は「ナレーションと BGM を最終的にミックスする」にあります。

パラメータの説明

パラメータ 説明 デフォルト 推奨範囲
threshold BGM を下げ始めるナレーションの音量 0.125 0.01〜0.05
ratio 下げる強さ(例: 4 = 4:1 で圧縮) 2 3〜8
attack 下げ始めるまでの時間(ms) 20 100〜300
release 元の音量に戻るまでの時間(ms) 250 500〜2000
makeup 処理後に上げる音量(dB ではなく 1〜64 の倍率) 1 —
knee 下げ始めの境目をなめらかにする幅 2.82843 —

threshold の調整

threshold は、ナレーションの音量に合わせて変えます。値が小さいほど、小さな声でも BGM が下がります。次の例は threshold=0.05 にしたもので、基本コマンドより反応しにくくなります。

ffmpeg -i input.mp4 -i input.mp3 \
  -filter_complex "[0:a]aformat=fltp:44100:stereo[bg];[1:a]aformat=fltp:44100:stereo,apad[voice];[bg][voice]sidechaincompress=threshold=0.05:ratio=4:attack=200:release=1000[ducked]" \
  -map 0:v -map "[ducked]" -c:v copy output.mp4

自然なダッキング効果のための設定

attack(下げ始めるまでの時間)と release(元に戻るまでの時間)を変えると、BGM の下がり方と戻り方が変わります。

ゆっくりとしたダッキング(自然な感じ)

ffmpeg -i input.mp4 -i input.mp3 \
  -filter_complex "[0:a]aformat=fltp:44100:stereo[bg];[1:a]aformat=fltp:44100:stereo,apad[voice];[bg][voice]sidechaincompress=threshold=0.02:ratio=6:attack=300:release=1500[ducked]" \
  -map 0:v -map "[ducked]" -c:v copy output_natural.mp4

素早く反応するダッキング(タイトな感じ)

ffmpeg -i input.mp4 -i input.mp3 \
  -filter_complex "[0:a]aformat=fltp:44100:stereo[bg];[1:a]aformat=fltp:44100:stereo,apad[voice];[bg][voice]sidechaincompress=threshold=0.02:ratio=8:attack=50:release=500[ducked]" \
  -map 0:v -map "[ducked]" -c:v copy output_tight.mp4

BGM の音量を事前に調整してからダッキング

BGM がもともと大きすぎるときは、先に volume フィルタで小さくしてからダッキングします。

ffmpeg -i input.mp4 -i input.mp3 \
  -filter_complex "[0:a]volume=0.5,aformat=fltp:44100:stereo[bg];[1:a]aformat=fltp:44100:stereo,apad[voice];[bg][voice]sidechaincompress=threshold=0.02:ratio=4:attack=200:release=1000[ducked]" \
  -map 0:v -map "[ducked]" -c:v copy output.mp4

ナレーションと BGM を最終的にミックスする

下げた BGM にナレーションを重ねて、完成版の音声を作ります。

ffmpeg -i input.mp4 -i input.mp3 \
  -filter_complex "[0:a]aformat=fltp:44100:stereo[bg];[1:a]aformat=fltp:44100:stereo,asplit=2[sc][voice2];[sc]apad[voice1];[bg][voice1]sidechaincompress=threshold=0.02:ratio=4:attack=200:release=1000[ducked];[ducked][voice2]amix=inputs=2:duration=longest[out]" \
  -map 0:v -map "[out]" -c:v copy output_mixed.mp4

最後の amix が、下げた BGM とナレーションを1本の音声にまとめます。amix は初期設定で各入力の音量を半分(N 本なら 1/N)にするので、ナレーションも BGM も約 6 dB 小さくなります。元の音量のまま重ねるには、amix に normalize=0 を付けます(音割れに注意してください)。

ここで asplit が必要な理由

このコマンドでは、ナレーションを 2 回使っています。BGM を下げるきっかけ(サイドチェイン入力)として 1 回、amix で重ねる音としてもう 1 回です。フィルタグラフのラベル([voice] のような名前)は 1 度しか使えないため、asplit=2 で 2 本に複製します。

FFmpeg 8.x は、この複製を自動で入れるので、asplit を書かなくても動きます。一方、Ubuntu 24.04 に標準で入る FFmpeg 6.1 は自動で入れないため、次のエラーで止まります。

Invalid stream specifier: voice.
Stream specifier 'voice' in filtergraph description ... matches no streams.

asplit を自分で書いておけば、どのバージョンでも動きます。

注意事項

sidechaincompress に入れる 2 つの音声は、サンプルレートやチャンネル数が違っていてもかまいません。FFmpeg が自動で変換してそろえます。aformat フィルタを付けておくと、どの形式にそろえるかを自分で決められます。

例: aformat=fltp:44100:stereo

関連記事

よくある質問

サイドチェーンコンプレッションって何?

別の音(ナレーション)が大きくなったときに、対象の音(BGM)を自動で下げるコンプレッサーです。FFmpeg では sidechaincompress を使います。

スレッショルドとレシオの初期値は?

ポッドキャストなら、スレッショルド 0.05(約 -26dB)、レシオ 8:1 から始めます。アタック 200ms、リリース 1000ms(基本コマンドと同じ値)にすると、言葉の切れ目ごとに BGM がほとんど上下せず、文と文の間で自然に戻ります。

BGM の音量を下げるだけと比べて何が違う?

BGM 全体の音量を下げると、話していない間(ま)の BGM まで小さくなり、寂しく聞こえます。ダッキングなら話している間だけ下がるので、メリハリが残ります。

声 1 + BGM 2 つでもダッキングできる?

できます。2 つの BGM それぞれに、同じ声をサイドチェイン入力として sidechaincompress をかけ、下げたあとの 2 本を合成します。同じ声を何度も使うので、asplit で複製してください。

ポンピング(不自然な音量変動)が出る

アタックとリリースが速すぎます。上の表の範囲(アタック 100〜300ms、リリース 500〜2000ms)まで長くしてください。レシオを 4:1 まで下げても、音量の変化が穏やかになります。