Afftdn is a frequency-domain denoiser for audio. It computes a short-time Fourier transform, identifies the noise floor in each frequency bin, and subtracts it. The result is a clean signal with the speech or music preserved, useful for field recordings, voice memos, and old tapes.

The command

ffmpeg -i noisy.wav -af "afftdn=nf=-25" clean.wav

What it does

The `afftdn` filter takes a noise floor in dB. Set the value to the RMS level of the noise you want to remove; a typical value for office hum is -40 dB, for traffic noise -30 dB. The filter learns the noise profile from the first 0.5 seconds of the file by default, so start the input with a known-silent section. The output is a single-pass denoised file.

Requirements

Any audio input. The filter is in libavfilter. CPU-only — the FFT is not cheap on long files, so budget for a one-time cost. The filter is mono by default; for stereo, pass `afftdn=nf=-25:channels=stereo` or run two instances.

Things to avoid

  • Setting the noise floor too high. A value of -10 dB will cut not just the noise but also the speech, leaving a hollow-sounding file.
  • Running afftdn on a file with no silent intro. The filter needs a sample of the noise floor to learn; if the file starts with speech, it will treat the speech as noise and remove it.
  • Confusing afftdn with the `anlmdn` filter. anlmdn is a non-local means denoiser; it preserves transients better but is much slower. Use afftdn for steady-state noise (hum, hiss); use anlmdn for transient noise (clicks, pops).
  • Applying denoise to the entire file. For a music track with a long quiet intro, the filter may erase the room tone. Trim the file first if the noise is concentrated in a section.