Normalizing loudness for a 3-hour DJ mix without killing the transitions
这篇内容暂时只有 English 版本,以下是原文。
A friend handed me a 3-hour 24-bit/48kHz recording of a live DJ set — 2.9 GB, one continuous file, transitions that ride for 60–90 seconds each. He wanted it split for streaming and “made the quiet parts audible.” I ran loudnorm in one pass, uploaded, and he called back ten minutes later: the build into the second hour now sounded like someone stepping on a compressor. I’d flattened exactly the dynamics the set was built around.
What I do now for continuous mixes: measure first, then apply one gain, not per-window normalization.
ffmpeg -i set.wav -af loudnorm=I=-14:TP=-1.5:LRA=11:print_format=json -f null -
That two-pass first pass gives me input_i, input_tp, input_lra, input_thresh. For a mix I usually keep the measured LRA rather than force 11 — if the source reports LRA 6, asking for 11 makes the encoder chase a range that isn’t there and pump instead. Then the second pass is a single linear gain with a limiter only for true peaks:
ffmpeg -i set.wav -af "loudnorm=I=-14:TP=-1.5:LRA=6:linear=true:measured_I=-21.3:measured_TP=-0.8:measured_LRA=6.1:measured_thresh=-31.6:offset=0.2" -ar 48000 out.wav
linear=true is the part that matters. It computes one gain for the whole file instead of riding the level, so a 6 dB drop at minute 40 stays a 6 dB drop — the arrangement still breathes, and the transition at 1:12 doesn’t get squashed relative to the drop before it. The cost: if the source has a genuinely bad section (a clipped vocal sample, a too-hot mic), linear mode can’t rescue it. I’ve had one set where a single distorted drop forced me back to dynamic mode for that region only, exported separately, and crossfaded at a quiet point. Ugly, but honest.
Where this fails: sources with huge silences. A 90-second silent intro skews the integrated measurement down and the limiter then overworks the loud middle. I trim silence before measuring (silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-50dB) and add it back after, or just measure a 5-minute representative slice and apply that gain manually. Also, loudnorm on 24-bit sources occasionally reports a measured_I that disagrees with a second run by a few tenths — I run the measurement twice and use the second, which has been stable in my experience, though I can’t explain why.
For splitting, I don’t trust silence detection alone on a mix with long blends. I render a waveform at low resolution, eyeball the transition midpoints, and cut there with 10 ms fades — the DJ’s own crossfader did the musical work already.
What do you do with material that’s supposed to be quiet for a minute — spoken intro, field recording, ambient bed — when the platform’s target is -14 LUFS? Do you leave it under target and accept the complaint, or ride it up and lose the intent?


0 条评论
还没有评论,写下第一条。