ノイズゲートとは

ノイズゲートは、音が一定の大きさ(閾値、threshold)より小さくなったときに、自動で音量を下げる(またはミュートする)エフェクトです。

  • 声や楽器が鳴っている間:音をそのまま通す(ゲートが開く)
  • 無音か、小さなノイズしかない間:ゲートを閉じて、音を消すか小さくする

マイクの「サー」というヒスノイズ、エアコンの音、会場のざわめきのように、ずっと鳴っているノイズを、話していない間だけ下げるのに向いています。声と重なっている間のノイズは残ります。ノイズを抑えた声に BGM を重ねる方法は「動画へBGMを追加・ミックスする」にあります。

基本コマンド

ノイズゲートを適用する

ffmpeg -i input.mp3 -af "agate=threshold=0.02:attack=5:release=100:range=0.0" output.mp3
パラメータ 値 説明
threshold 0.02 ゲートが開く音量の閾値(0.0〜1.0)
attack 5 ゲートが開くまでの時間(ms)
release 100 ゲートが閉じるまでの時間(ms)
range 0.0 ゲートが閉じたときに下げる量の上限(1.0=変化なし、0.0=上限なし)

パラメータ詳細

パラメータ 説明 デフォルト 範囲
level_in 入力ゲイン(倍率) 1 0.015625〜64
mode ゲートの動作モード downward downward/upward
range ゲートが閉じたときの最小比率 0.06125 0.0〜1.0
threshold ゲートを開く閾値 0.125 0.0〜1.0
ratio 閾値より小さい音を下げる比率 2 1〜9000
attack アタック時間(ms) 20 0.01〜9000
release リリース時間(ms) 250 0.01〜9000
makeup メイクアップゲイン 1 1〜64
knee 閾値の前後で下げ方をなめらかにする幅(dB ではなく倍率) 2.828 1〜8
detection 検出方式 rms peak/rms
link ステレオリンク average average/maximum

ポッドキャスト・ボイスオーバー向け設定

ffmpeg -i voice_recording.mp3 \
  -af "agate=threshold=0.015:attack=5:release=200:range=0.0" \
  output_clean.mp3

各値の意味は次のとおりです。

  • threshold=0.015:声の大きさに合わせて変えます。小さい声なら 0.01、大きい声なら 0.025 程度です。
  • attack=5:ゲートが 5ms で開きます。長すぎると、開くのが遅れて語頭が切れます。
  • release=200:話し終わってから 200ms でゲートを閉じます。長めにすると自然に聞こえます。
  • range=0.0:下げる量に上限を付けません。どこまで下がるかは、ratio(初期値 2)と、音が閾値をどれだけ下回るかで決まります。

ノイズレベルを測定してからthresholdを設定する

threshold を決める前に、声のない部分のノイズがどれくらいの大きさかを測ります。RMS(平均的な音の大きさ)やピークなど、ほかの数値も見たいときは「astats フィルタで音声統計を測定する方法」を見てください。

ffmpeg -i input.mp3 -af "astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level" -f null - 2>&1 | grep RMS

表示される RMS レベル(単位は dBFS。小さい音ほどマイナスの数が大きくなります)を、声のない部分と話している部分で見比べます。ノイズのレベルと声のレベルの中間の値を threshold にします。dBFS からの換算式は「注意点」にあります。

入力ゲインと組み合わせる

ffmpeg -i input.mp3 \
  -af "agate=threshold=0.02:attack=5:release=150:range=0.0:level_in=1.5" \
  output.mp3

level_in=1.5 は、入力を 1.5 倍に大きくしてからゲートをかけます。マイクの音が小さいときに使います。

silenceremove との使い分け

フィルタ 動作 適した用途
agate 無音の間の音量を下げる(切り取りはしない) リアルタイム処理、自然な仕上がり
silenceremove 無音の部分を切り取って削除する 編集後のトリミング、ポッドキャストの短縮

会話や音楽の間(ま)をそのまま残したいなら agate、無音の部分を切り取って短くしたいなら silenceremove を使います。

複数フィルタとの組み合わせ

ノイズゲート → ノーマライズのパイプライン

ffmpeg -i input.mp3 \
  -af "agate=threshold=0.02:attack=5:release=150:range=0.0, \
       loudnorm=I=-16:TP=-1.5:LRA=11" \
  output.mp3

ノイズゲートで話していない間のノイズを下げたあと、loudnorm で全体の音量をそろえます。

動画ファイルの音声トラックに適用する

ffmpeg -i input.mp4 \
  -af "agate=threshold=0.02:attack=5:release=150:range=0.0" \
  -c:v copy \
  output.mp4

-c:v copy で映像は再エンコードせずにそのまま使い、音声だけにゲートをかけます。

注意点

  • threshold は 0.0〜1.0 のリニア値(dB ではなく、振幅の比で表した値)です。dBFS からは threshold = 10^(dBFS/20) で換算します。たとえば -40dBFS は約 0.01 です。
  • attack が長すぎると、ゲートが開くのが遅れて、語頭の子音(「さ」「た」など)が切れます。5〜20ms が目安です。
  • release が短すぎると、語尾の自然な響きまで消えます。100〜300ms がよく使われます。
  • range=0.0 は完全なミュートではありません。閾値のすぐ下の音は少ししか下がりません。完全に消したいときは、ratio=9000 のように ratio を大きくします。下がりすぎて不自然に聞こえるときは、range=0.02(最大で約 34dB 下げる)程度を試してください。

関連フィルタ

  • silenceremove — 無音の部分を切り取る
  • loudnorm — 聞こえ方の音量(ラウドネス)をそろえる
  • afade — 音声のフェードイン・フェードアウト
  • acompressor — 大きな音を抑えて音量の差を縮める(コンプレッサー)

よくある質問

agate(オーディオゲート)って何?

一定の音量より小さい音を、小さくするか消すフィルタです。マイクに入る背景ノイズの除去や、ナレーション録音の手直しに使います。閾値より小さい音を下げ、大きい音はそのまま通します。

threshold の設定値は?

背景ノイズより 5〜10dB 上で、声より 10〜20dB 下が目安です。スタジオ録音なら -50dB、屋外録音なら -30dB 程度です。

attack と release は何を制御する?

attack はゲートが開く速さ(ノイズから声に切り替わるとき)、release はゲートが閉じる速さ(声からノイズに戻るとき)です。attack は 1〜10ms、release は 100〜500ms がよく使われます。

ゲートで言葉の冒頭が切れる

attack が遅すぎます。1〜5ms に下げてください。

ノイズリダクションとゲート、どっち使う?

役割が違うので、組み合わせて使えます。ノイズリダクション(FFT という周波数の分析を使う方式)は、ずっと続く背景ノイズに効きます。agate は、声が途切れた無音の間に聞こえるノイズに効きます。両方を続けてかけることもよくあります。