Asset & Resource Problems May 24, 2026

ffmpeg loudnorm Fails or Reports Wrong LUFS on Stereo Fest Trailer - How to Fix

Fix ffmpeg loudnorm failures on stereo fest trailers—ffprobe channel_layout, -ac 2 aresample, two-pass loudnorm JSON, loudness_receipt_v1.json, and −14 LUFS verification.

By GamineAI Team

ffmpeg loudnorm Fails or Reports Wrong LUFS on Stereo Fest Trailer - How to Fix

Problem: ffmpeg -af loudnorm on your fest trailer prints Incomplete stream, -inf LUFS, or integrated loudness that does not match Youlean on the same file. Your MP4 is clearly stereo in headphones, but ffprobe reports mono or a missing channel_layout.

Who is affected now: Indies batch-normalizing May–June 2026 store trailers after the fourteen-tool LUFS listicle traffic spike—Tool 3 ffmpeg loudnorm in CI or a shell script, without checking container metadata first.

Fastest safe fix: ffprobe -show_streams on the source → if layout is wrong, remux to stereo PCM with -ac 2 and aresample → run two-pass loudnorm with print_format=json → re-measure in Youlean → log loudness_receipt_v1.json with integrated LUFS in −14 ±1 band (or your signed target).

Direct answer

loudnorm implements ITU-R BS.1770 on the decoded channel set ffmpeg believes you have. When an AAC or MP4 stream tags mono but carries dual-mono stereo content, or when peaks clip before measurement, the filter sees the wrong layout and returns garbage. Fix the layout and headroom, then normalize—not the other way around.

Why this issue spikes in May 2026

  1. Listicle-driven ffmpeg adoption — Teams copy one-line loudnorm without ffprobe.
  2. Agency MP4 handoffs — Video editors export dual mono or 1.0 + stereo pair mux quirks.
  3. Gameplay capture → trailer — OBS/Unity exports with odd channel masks.
  4. CI gates — Scripts fail builds on parse errors teams cannot reproduce in GUI meters.
  5. October fest locks — Audio column on Wednesday smoke now expects receipt-backed LUFS.

Pair with 14 Free fest trailer LUFS tools (resource) and Wwise/FMOD fest LUFS refresh for middleware + meter cross-links.

Symptoms and search phrases

  • ffmpeg stderr: loudnorm Incomplete stream or Value inf for parameter.
  • Printed Input Integrated: -inf on a file that sounds normal.
  • Youlean shows −15 LUFS; ffmpeg summary shows −22 or +3.
  • ffprobe reports channels=1 / channel_layout=mono on stereo headphones mix.
  • Two identical-looking MP4s—one passes CI, one fails (different mux history).
  • True peak above 0 dBTP before loudnorm → wild gain reduction.

Root causes (check in order)

  1. Wrong channel_layout tag — stereo content labeled mono.
  2. Missing downmix — filter runs on mono downmix of wide mix incorrectly.
  3. Duplicate mono tracks muxed — player sums; ffprobe picks track 0 only.
  4. Clipped master — peaks over 0 dBFS before loudness measurement.
  5. One-pass loudnorm on high LRA — dialogue + explosion stinger skews single pass.
  6. Measuring MP4 audio without extract — video codec warnings abort filter graph.
  7. Floating WAV exported 32-bit with NaNs — rare but produces -inf.

Beginner path (30 minutes)

  1. Install ffmpeg 6.x+ and Youlean Loudness Meter (free).
  2. Run Step 1 ffprobe below—screenshot channel_layout.
  3. Run Step 2 stereo repair WAV export.
  4. Measure repaired WAV in Youlean only (skip loudnorm until layout is sane).
  5. If still off target, use Step 3 two-pass loudnorm.
  6. Copy numbers into receipt JSON—attach to trailer upload ticket.

Working dev path

  1. Add scripts/audio_probe.sh to CI that fails when channel_layoutstereo for trailer assets.
  2. Store pass 1 loudnorm JSON under release-evidence/audio/ffmpeg-logs/.
  3. Gate promotion on receipt promotion_allowed: true.
  4. Cross-check BUILD_RECEIPT audio_integrated_lufs column.

Step 1 — Probe streams with ffprobe

ffprobe -v error -select_streams a:0 -show_entries stream=channels,channel_layout,codec_name -of default=nw=1 trailer.mp4
ffprobe output Meaning Next action
channels=2 channel_layout=stereo Layout OK Skip to Step 3 if levels wrong
channels=1 channel_layout=mono Tag or mix is mono Step 2 force stereo
channels=2 layout empty Mask missing Step 2 + verify in Youlean
Multiple Stream #0:… audio Dual audio tracks Map -map 0:a:0 explicitly

List all audio streams when mux is suspicious:

ffprobe -v error -show_streams -select_streams a trailer.mp4

Step 2 — Force stereo PCM before loudnorm

Extract and repair layout (safe default for fest stereo trailers):

ffmpeg -y -i trailer.mp4 -map 0:a:0 -vn -ac 2 -ar 48000 -sample_fmt s16 -af aresample=resampler=soxr trailer_stereo.wav

Rules:

  • -ac 2 — explicit stereo channel count for the filter graph.
  • aresample=soxr — stable resample when source rate is 44.1 kHz or odd.
  • -map 0:a:0 — first audio track only when editors left a silent track 0.

If source is true mono VO, do not fake stereo—target −23 LUFS mono policy instead and document in receipt notes.

Step 3 — Two-pass loudnorm (measure then apply)

Pass 1 — measure (prints JSON stats):

ffmpeg -y -i trailer_stereo.wav -af loudnorm=I=-14:TP=-1.5:LRA=11:print_format=json -f null - 2> loudnorm_pass1.json

Parse input_i, input_tp, input_lra, input_thresh from the JSON blob at the bottom of stderr (ffmpeg writes stats to stderr).

Pass 2 — apply using measured values (replace placeholders):

ffmpeg -y -i trailer_stereo.wav -af loudnorm=I=-14:TP=-1.5:LRA=11:measured_I=INPUT_I:measured_TP=INPUT_TP:measured_LRA=INPUT_LRA:measured_thresh=INPUT_THRESH:linear=true:print_format=summary trailer_normalized.wav

Target band: −14 LUFS integrated ±1 for many 2026 fest stereo trailers (document if you choose −16 per listicle targets).

One-pass shortcut (only when LRA is tame):

ffmpeg -y -i trailer_stereo.wav -af loudnorm=I=-14:TP=-1.5:LRA=11:print_format=summary -f null -

Step 4 — Verify against Youlean

  1. Open trailer_normalized.wav in Youlean.
  2. Confirm integrated loudness within your signed band.
  3. Confirm true peak−1.0 dBTP (stricter than −1.5 if laptop clip is reported).
  4. If ffmpeg and Youlean still disagree by >1.5 LU, re-run Step 2—layout is still wrong.

loudness_receipt_v1.json

{
  "schema": "loudness_receipt_v1",
  "build_label": "trailer-nextfest-2026-05-rc2",
  "assets": [
    {
      "file": "store/trailer_main_v3_normalized.wav",
      "tool": "ffmpeg loudnorm two-pass",
      "source_probe": "channels=1 mono → repaired stereo",
      "integrated_lufs": -14.2,
      "true_peak_dbtp": -1.1,
      "pass": true
    }
  ],
  "promotion_allowed": true,
  "ffmpeg_log": "release-evidence/audio/ffmpeg-logs/trailer-v3-loudnorm.json"
}

Proof table (working dev)

Check Command / tool Pass criterion
Layout ffprobe stereo or documented mono policy
Headroom Youlean true peak ≤ −1.0 dBTP before norm
Integrated Youlean + ffmpeg summary Within −14 ±1 LUFS (or signed target)
Receipt loudness_receipt_v1.json promotion_allowed: true
Store truth Trailer frame audit Audio matches uploaded MP4

Prevention

  1. Add channel_layout_check to trailer export template in Resolve/Audacity—export stereo WAV for mastering, MP4 last.
  2. Put audio_layout column on Wednesday smoke BUILD_RECEIPT row.
  3. Never run loudnorm on agency MP4 without extract—use VLC + ffmpeg extract workflow Tool 9.
  4. Limit true peak in DAW before CLI normalization.
  5. When batching many trailers, fail CI on ffprobe not on parseable English stderr strings only.

Troubleshooting

Symptom Fix
Still -inf after -ac 2 Source may be silent—check ffmpeg -i duration and audible waveform
Left/right identical mono Re-export true stereo from DAW; do not duplicate one channel
Pass 2 worse than pass 1 Copy pass 1 JSON fields exactly; watch linear=true
MP4 fast, WAV fails Extract audio first; avoid copying video codec into audio-only graph
Youlean OK, ffmpeg fails Measure WAV only; do not loudnorm directly on H.264 container
Louder after norm Lower I= target; check for limiter double-stacking in DAW

FAQ

Is −14 LUFS mandatory for Steam?
Steam does not publish a fixed LUFS law for all trailers—teams pick −16 to −14 and document it. This article uses −14 ±1 as a common 2026 fest stereo band; align with your listicle target table.

Should I use ebur128 instead of loudnorm?
ebur128 measures; loudnorm measures and normalizes. Use ebur128 for read-only CI; use two-pass loudnorm when you need rendered output.

Audacity vs ffmpeg disagree?
See upcoming Audacity vs Youlean integrated LUFS mismatch help—often export bit depth or stereo sum differences.

Mono VO trailer?
Do not force -ac 2; set I=-23 (dialogue-forward) and mark mono_policy: true in receipt.

Related links

Probe layout before you normalize—loudnorm fixes level, not a mis-tagged mono stream pretending to be stereo.