Level every chapter to -16 LUFS with ffmpeg loudnorm
One ffmpeg line that brings a file to -16 LUFS integrated and -1.5 dBTP true peak without touching the video, the two-pass version for exact results, and the timestamp trap on upload.
# one pass, good enough for most chapters ffmpeg -i chapter.mp4 -af loudnorm=I=-16:TP=-1.5:LRA=11 -c:v copy chapter.lv.mp4 # two passes, exact: measure first ffmpeg -i chapter.mp4 -af loudnorm=I=-16:TP=-1.5:LRA=11:print_format=json -f null - # then apply the measured values from the JSON ffmpeg -i chapter.mp4 -af loudnorm=I=-16:TP=-1.5:LRA=11:measured_I={input_i}:measured_TP={input_tp}:measured_LRA={input_lra}:measured_thresh={input_thresh}:offset={target_offset}:linear=true,asetpts=N/SR/TB -c:v copy chapter.lv.mp4
Paste into your assistant as the first message of a new chat; fill the braces first.
Steps
- Run the measure pass; copy input_i, input_tp, input_lra, input_thresh and target_offset from the JSON into the apply pass.
- Check with ffprobe that the output duration equals the input; a change here means the audio clock moved.
- Level each chapter of a long film separately, before joining them.
Example
Unlevelled neighbouring chapters of one long film differed by 9 dB. After loudnorm at I=-16 the whole cut played at one level from start to end.
Tips
- Put `asetpts=N/SR/TB` last in the audio chain when the file was cut with -ss and joined with concat: loudnorm can leave packet timestamps crammed together, and YouTube and Instagram place audio by timestamp and play seconds of silence where your player sounded fine.
- Verify on the copy the platform serves, not only on your file.
| works with | ffmpeg: A terminal command you run yourself. |
| cost | Free. No API, no key. |
| status | Unverified: written from the technique, not yet run end to end by us. |
| license | CC BY 4.0 for the text here; skills are MIT. |
| updated | 2026-11-01 |
| for agents | loudness-normalize-minus-16-lufs-ffmpeg.md |
Related
Voice cleanup checklist: room tone, de-ess, noise gate, in that order
Six passes that turn a phone or lav recording into a usable voice track, each with the ffmpeg filter and a starting parameter to adjust by ear, in the order that keeps the gate off word endings.
Live music in frame: one continuous audio span, picture cuts on top
When a band or a busker is in the shot, keep one unbroken stretch of that clip's audio under the whole scene and cut only the picture; cut the audio per shot and the beat restarts.
Score with a hole, not ducking, where something plays live
Cut the score to silence under live music, a laugh or a knock instead of ducking it; ducking is audible, a hole is not. The rule, the measured levels and the ffmpeg line.
Edit real footage into a film with the agent as the editor (/video-edit)
Edit real footage into a film with the agent as the editor — read the day's speech as text, write the cut as a script, lay cutaways that match the words, score it, strip other people's music, and…
Strip other people's music before upload with Demucs and ffmpeg
Car radio, shop speakers and festival stages trigger Content ID. Split the soundtrack into stems, find the music on drums plus bass, keep the voice, replace the music, rebuild audio only.
Beat-sync cutting: cut on the beat, not on every beat
A rule and an agent prompt for cutting to music from a list of beat timestamps: cuts land on beats, phrases get room to breathe, and the best shot is held through the hook.