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:
- First Pass (Analysis) – The
measure_loudnessfunction analyzes the source material to determine current loudness statistics. - Second Pass (Application) – The
apply_loudnorm_two_passfunction applies theloudnormfilter 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_loudnessandapply_loudnorm_two_passfunctions. - 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:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →