ノイズゲートとは
ノイズゲートは、音が一定の大きさ(閾値、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 は、声が途切れた無音の間に聞こえるノイズに効きます。両方を続けてかけることもよくあります。