Social Media Loudness Normalization Targets in video-use: -14 LUFS, -1 dBTP, LRA 11 Explained

video-use normalizes audio to -14 LUFS integrated loudness, -1 dBTP true peak, and 11 LU loudness range to match YouTube, Instagram, TikTok, X, and LinkedIn standards.

The browser-use/video-use repository automatically applies industry-standard social media loudness normalization targets to ensure video audio plays consistently across major platforms. These targets align with the "social-ready" audio specification used by the largest content distribution networks, preventing clips from sounding too quiet or distorted when posted online.

The Three Core Social Media Loudness Targets

In helpers/render.py, the library defines three constants that dictate the final audio characteristics:

Integrated Loudness (-14 LUFS)

The integrated loudness target of -14 LUFS (Loudness Units relative to Full Scale) represents the overall perceived loudness of the entire audio track averaged over time. This measurement ensures the video matches the playback level that social platforms expect, preventing automatic volume adjustment by platform algorithms.

True Peak (-1 dBTP)

The true peak limit of -1 dBTP (decibels relative to True Peak) caps the maximum instantaneous signal level. This safety margin prevents inter-sample peaks that cause clipping during mp3 compression or mobile device playback, ensuring clean audio even on low-quality speakers.

Loudness Range (11 LU)

The loudness range (LRA) target of 11 LU controls the dynamic range between the softest and loudest parts of the audio. This value strikes a balance between compression (which sounds flat) and excessive dynamic range (which makes dialogue hard to hear on mobile devices).

Implementation in helpers/render.py

These values are hardcoded as constants in helpers/render.py at lines 90-94:


# Social-media standard: -14 LUFS integrated, -1 dBTP peak, LRA 11 LU.

# Matches YouTube / Instagram / TikTok / X / LinkedIn normalization targets.

LOUDNORM_I = -14.0
LOUDNORM_TP = -1.0
LOUDNORM_LRA = 11.0

The module uses these constants when invoking FFmpeg's loudnorm filter. According to the source code, any video processed through the library's rendering pipeline automatically adheres to these specifications unless explicitly disabled via CLI flags.

Two-Pass Normalization Process

The repository implements a two-pass loudness normalization workflow using FFmpeg:

  1. First Pass (Analysis) – The measure_loudness function analyzes the source material to determine current loudness statistics.
  2. Second Pass (Application) – The apply_loudnorm_two_pass function applies the loudnorm filter using the measured values and the target constants.

This approach ensures accurate loudness measurement before applying gain adjustments, preventing the pumping or breathing artifacts common in single-pass normalization.

Practical Code Examples

Measuring Source Loudness

Use the measure_loudness function to analyze input audio before processing:

from pathlib import Path
from helpers.render import measure_loudness

video = Path("my_video.mp4")
data = measure_loudness(video)
print(data)  # Returns input_i, input_tp, input_lra, and other measured values

Applying Social Media Normalization

Apply the standard targets using the two-pass function:

from pathlib import Path
from helpers.render import apply_loudnorm_two_pass

src = Path("my_video.mp4")
dst = Path("my_video_normalized.mp4")
apply_loudnorm_two_pass(src, dst)  # Applies -14 LUFS / -1 dBTP / LRA 11

Complete Workflow Integration

from helpers.render import apply_loudnorm_two_pass

def normalize_for_social_media(input_path, output_path):
    """
    Runs the full two-pass loudnorm process using social media targets.
    """
    success = apply_loudnorm_two_pass(input_path, output_path)
    if not success:
        raise RuntimeError("Loudness normalization failed")
    return output_path

Summary

  • -14 LUFS serves as the integrated loudness target, matching YouTube, Instagram, TikTok, X, and LinkedIn standards.
  • -1 dBTP prevents clipping by limiting true peak levels during playback and compression.
  • 11 LU maintains appropriate dynamic range for mobile and desktop listening environments.
  • helpers/render.py defines these constants at lines 90-94 and implements them via measure_loudness and apply_loudnorm_two_pass functions.
  • The two-pass FFmpeg workflow ensures accurate loudness normalization without artifacts.

Frequently Asked Questions

Why does video-use use -14 LUFS instead of broadcast standards like -23 LUFS?

video-use targets -14 LUFS because major social media platforms normalize uploaded content to approximately this level. Broadcast standards like -23 LUFS (used in television) result in audio that sounds too quiet when played on social feeds, potentially causing platforms to apply their own aggressive compression that degrades quality.

What happens if my video exceeds the -1 dBTP true peak limit?

If the source audio exceeds -1 dBTP, the apply_loudnorm_two_pass function applies limiting to bring peaks under the threshold. This prevents clipping distortion that occurs when audio is converted to lossy formats like AAC or played back on devices with limited headroom.

Can I disable loudness normalization in video-use?

Yes, the repository supports disabling normalization via CLI flags mentioned in the README.md. However, leaving it enabled ensures your content matches platform expectations and avoids automatic volume adjustments by YouTube, Instagram, and TikTok algorithms.

What is Loudness Range (LRA) and why is 11 LU the target?

Loudness Range measures the difference between loud and soft sections of your audio. An LRA of 11 LU ensures dialogue remains intelligible on mobile speakers while preserving enough dynamic range for music and effects. Values below 8 LU sound overly compressed, while values above 14 LU may cause listeners to constantly adjust their device volume.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →