オーディオダッキングとは
オーディオダッキングは、ナレーションなどの声が入ったときに、BGM の音量を自動で下げる処理です。映像作品やポッドキャスト、解説動画でよく使われます。FFmpeg では sidechaincompress フィルタを使います。
基本的な仕組み
ナレーション(サイドチェイン信号)
↓ 音量が上がる
コンプレッサーが BGM を圧縮
↓
BGM の音量が自動で下がる
sidechaincompress には、音声を2つ入力します。
- 主信号(BGM):音量を下げられる側
- サイドチェイン信号(ナレーション):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
関連記事
- 音量の正規化(loudnorm/LUFS)
- 音量の検出と調整(volumedetect/volume)
- 音声フォーマット変換
よくある質問
サイドチェーンコンプレッションって何?
別の音(ナレーション)が大きくなったときに、対象の音(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 まで下げても、音量の変化が穏やかになります。