FFmpeg recipe
FFmpeg: Normalize Loudness with EBU R128 (loudnorm)
Loudnorm implements the EBU R128 standard: perceptual loudness normalization (not peak normalization). Required by Spotify, Apple Podcasts, and TV broadcasters.
Command
ffmpeg -i input.mp4 -af loudnorm=I=-16:TP=-1.5:LRA=11 -y output.mp4Prefer no terminal?
Use the Audio Normalizer in your browser
What each flag does
| -i | Input file. Can be a video, audio, or image. Repeat for multiple inputs. |
|---|---|
| -af | Audio filter chain. e.g. silenceremove, loudnorm. |
| -y | Overwrite output file without confirmation. |
| I=-16 | Integrated loudness target (LUFS). -16 = podcast standard, -14 = Spotify, -23 = TV broadcast. |
| TP=-1.5 | Maximum true peak (dBTP). -1.5 leaves headroom for codec-induced clipping. |
| LRA=11 | Loudness range. 11 LU is standard for spoken content. |
Notes & gotchas
- For two-pass loudnorm (much more accurate), see the FFmpeg wiki: https://trac.ffmpeg.org/wiki/AudioVolume.
- For YouTube, target I=-14 to match algorithm-normalized playback.
Check it worked
ffmpeg -i output.mp3 -af loudnorm=print_format=summary -f null -Measured loudness within about half a LU of your target.
What to change
| I=-16 is the streaming target | -16 LUFS suits podcasts and web video. -14 is Spotify, -23 is EBU broadcast. Pick the one your destination asks for. |
|---|---|
| Two passes are more accurate | A single pass estimates as it goes. Measure first, then pass the measured values back in, and the result lands on the target. |
| TP=-1.5 is headroom, not loudness | True peak below -1 dB leaves room for the distortion that lossy encoding adds afterwards. |
If it fails
The result is still not at the target loudness.
Why: Single-pass loudnorm estimates as it goes and cannot correct what it has already written.
Fix: Run two passes: measure with print_format=json, then pass the measured values back in on the second run.
Quiet passages became noisy.
Why: Normalising raised the whole signal, room noise included.
Fix: Reduce the noise first with afftdn or arnndn, then normalise.