- Verify ReplayGain tags and choose track or album mode correctly.
- Confirm loudnorm or dynaudnorm insertion with clean commands and logs.
- Find config, profile, script, track, and audio-output conflicts systematically.
- Confirm the Symptom With a Minimal Clean mpv Command
- Choose the Correct Normalization Method
- Check Configuration, Profiles, Bindings, and Scripts
- Verify Tracks, Audio Output, and Source Limitations
- Use Logs to Confirm Filter Insertion
- Run a Clean Temporary Test Before Making Permanent Changes
- Quick Fix Checklist
- Frequently Asked Questions
When mpv volume normalization is not working, the cause is usually one of four things: ReplayGain metadata is missing or being interpreted in the wrong mode, an audio filter was never inserted, another configuration rule replaced the intended filter chain, or the source changes in ways that normalization cannot fully correct. The fastest solution is to test one known file with a clean command, confirm which normalization method you actually want, and inspect mpv's terminal output before editing several settings at once.
ReplayGain, loudness normalization, and dynamic range compression are related but different. ReplayGain applies stored gain metadata. The FFmpeg loudnorm filter analyzes loudness and adjusts it toward a target. The dynaudnorm filter changes gain dynamically over time. Understanding that distinction prevents a common mpv troubleshooting mistake: expecting one method to behave like another.

Start with free Canva bundles
Browse the freebies page to claim ready-to-use Canva bundles, then get 25% off your first premium bundle after you sign up.
Free to claim. Canva-ready. Instant access.
1. Confirm the Symptom With a Minimal Clean mpv Command
Begin outside your normal configuration. This separates an mpv player issue from a profile, script, input binding, or filter-chain conflict. Use a short local audio or video file that plays reliably and contains clearly audible changes in level.
1.1 Test Without Your Existing Configuration
Open Command Prompt, PowerShell, Terminal, or a shell and run mpv with --no-config. Quote the file path so spaces and shell characters do not alter the command.
For a ReplayGain test, use:
mpv --no-config --replaygain=track "path/to/test-file.flac"
For a loudnorm test, use:
mpv --no-config --af-add="lavfi=[loudnorm=I=-16:LRA=11:TP=-1.5]" "path/to/test-file.mkv"
On shells that interpret brackets or punctuation, keep the complete filter argument quoted. Windows PowerShell, Windows Command Prompt, Bash, Zsh, and Fish do not always process quotation marks identically. If the filter command fails immediately, shell parsing is more likely than an audio problem.
Success means the file plays, the terminal reports no filter initialization error, and its perceived level moves toward the intended target. Stop changing settings if the clean command works. That result proves mpv and the filter are functional; the remaining problem is in your regular configuration or launch path.
1.2 Use a Suitable Comparison
Do not judge normalization by moving a volume slider during one quiet scene. Compare two files with obviously different average loudness, or replay the same passage with and without the option. Keep mpv's software volume, operating system volume, audio device, and listening position unchanged.
Avoid using only a short intro, silence, or a scene containing a sudden explosion. Loudness processing operates on signal characteristics, not dialogue alone. A quiet artistic mix can remain less aggressive than a heavily compressed recording even when both are adjusted toward a similar loudness target.
2. Choose the Correct Normalization Method
The phrase volume normalization can describe several different goals. Select the method that matches the symptom before changing values.
2.1 ReplayGain Modes and Metadata
mpv supports ReplayGain processing through --replaygain=no, --replaygain=track, and --replaygain=album. ReplayGain does not analyze an untagged file during playback. It reads gain information already stored in supported metadata.
trackadjusts each tagged track according to its track gain.albumpreserves intentional level differences within an album while adjusting the album as a group.nodisables ReplayGain processing.
Use track mode for mixed playlists where songs come from unrelated releases. Use album mode when listening to an album whose quiet and loud tracks are intentionally related. Album mode can appear to be broken if you expect every track to reach the same perceived level.
If a file has no usable ReplayGain tags, selecting track or album mode cannot produce metadata-based normalization. The practical fixes are to add valid tags with a trusted tagging or scanning tool, configure an intentional fallback gain, or use an audio filter that evaluates the decoded signal.
Options such as replaygain-preamp, replaygain-clip, and replaygain-fallback affect the resulting gain. A preamp offsets the tagged recommendation. Clipping prevention may reduce an intended boost when the signal would exceed the permitted peak. A fallback applies a chosen gain when metadata is unavailable, but it is not genuine loudness analysis.
Success means tagged files receive the expected track or album adjustment and untagged files behave according to your chosen fallback policy. If that happens, stop adding filters unless you specifically need dynamic processing.
2.2 loudnorm Expectations
The FFmpeg loudnorm filter targets loudness using EBU R128-style measurements. It is appropriate when you want signal-based loudness processing rather than dependence on file tags. In mpv, it is commonly loaded through the lavfi audio-filter wrapper.
A basic example is:
af=lavfi=[loudnorm=I=-16:LRA=11:TP=-1.5]
Placing this line in mpv.conf requests a target integrated loudness, loudness range, and true-peak limit. These values are examples, not universal recommendations. Playback environments and content types differ.
Real-time loudnorm processing is not identical to a carefully measured two-pass offline normalization workflow. At the beginning of playback, after seeking, or during a short clip, the filter has less program history available. It may not make every sentence equally loud, and it should not be expected to eliminate the creative dynamic range of a film.
Success means mpv inserts the filter without errors and average loudness is more consistent across suitable sources. If dialogue remains quiet only because effects are intentionally much louder, a dynamic compressor or dialogue-oriented mix may be more appropriate than increasingly aggressive loudnorm targets.
2.3 dynaudnorm Expectations
The dynaudnorm filter dynamically adjusts gain over time. A simple test is:
mpv --no-config --af-add="lavfi=[dynaudnorm]" "path/to/test-file.mkv"
This can make changing program levels more manageable, especially for speech-heavy material. However, dynamic adjustment may raise background noise during quiet passages, react gradually, or make ambience pump if configured too aggressively. It is not the same as ReplayGain and does not preserve album-level relationships.
Success means quiet and loud sections become easier to hear at a fixed listening volume without objectionable pumping or noise lift. Once the result is acceptable, stop increasing filter strength. More processing is not automatically better.
3. Check Configuration, Profiles, Bindings, and Scripts
If a clean command works but normal playback does not, inspect how mpv is launched and configured. The most common cause is an option being overridden later.
3.1 Verify the Active Config File
Check the platform-appropriate mpv configuration directory and confirm that you are editing the file used by the executable you launch. Package-manager builds, portable Windows builds, sandboxed applications, and graphical front ends can use different configuration locations or command-line arguments.
Temporarily add a visible or audible test option to the suspected profile, or launch mpv explicitly with --config-dir pointing to a small test directory. Do not delete your entire configuration folder. Rename one test file, comment out one line, or use a separate temporary directory instead.
Within mpv.conf, use mpv option syntax without the leading --. For example:
replaygain=track
or:
af=lavfi=[loudnorm=I=-16:LRA=11:TP=-1.5]
3.2 Look for Filter Replacement
The af option represents an audio-filter chain. A later assignment can replace an earlier chain. Profiles, command-line options, scripts, or input commands may clear or rebuild it. Search your configuration files for af=, af-add, af-remove, af-toggle, and af-clr.
An input binding may toggle a filter only for the current session. A script may change the chain after a file loads. An auto profile can apply only to certain extensions, protocols, audio codecs, channels, or file paths. If normalization disappears only for online URLs or multichannel video, profile conditions deserve close inspection.
Success means the intended filter remains present after the file loads, after seeking, and after switching playlist entries. Stop editing when the active chain remains stable and the audible result is correct.
3.3 Inspect Profiles Directly
Use --show-profile=PROFILE_NAME to inspect a named profile. Compare its settings with the global configuration and command line. Pay particular attention to profiles intended for music, movies, headphones, streaming, HDR, high-bitrate content, or low-latency playback.
Profiles associated with subtitles, screenshots, shaders, video output, HDR mapping, or hardware decoding do not normally normalize audio by themselves. They matter only if the profile also changes audio filters, audio tracks, playback speed, or the selected output device. Focus on the active audio path instead of changing unrelated video settings.
3.4 Check Script and IPC Changes
User scripts and IPC clients can issue runtime property changes. Temporarily test with --no-config, which also provides a useful baseline without normal user configuration behavior. If necessary, create a temporary config directory containing only the normalization line and no scripts.
If an IPC controller launches mpv, inspect its generated arguments and property commands. Verify that it does not set af to an empty value or restore a saved filter chain after file load. The same applies to graphical front ends that expose their own equalizer, compressor, or audio-filter settings.

4. Verify Tracks, Audio Output, and Source Limitations
4.1 Confirm the Selected Audio Track
Many video files and streams contain several audio tracks, such as stereo, surround, commentary, descriptive audio, and alternate languages. A normalization test is invalid if one run selects stereo and another selects a quieter surround mix.
Display the track list in mpv or inspect the stats overlay, normally opened with the i key unless your bindings replace it. Confirm the selected audio track, codec, channel layout, and sample rate. You can select a track explicitly for a controlled test.
Subtitle tracks do not directly alter audio loudness. However, a script or profile associated with subtitle language selection could also choose an audio track. Diagnose the selected track rather than assuming subtitles themselves changed volume.
4.2 Examine Downmixing and Channel Layout
Quiet dialogue can result from multichannel content being downmixed to stereo, an incorrect speaker layout, or a missing center-channel contribution. This can resemble failed normalization even when loudnorm or ReplayGain is active.
Check whether mpv decodes a 5.1 or 7.1 track while the operating system or receiver expects stereo. Verify the output device and channel layout. Compare against a native stereo track from the same file when available. If the stereo track has clear dialogue but the surround track does not, fix routing or downmixing before tuning normalization.
4.3 Check the Audio Backend and External Device Processing
mpv sends decoded audio through an operating-system backend such as WASAPI, PulseAudio, PipeWire, ALSA, or CoreAudio, depending on the platform and build. Confirm that the expected device is selected and that the system is not applying separate enhancements, spatial audio, automatic gain control, per-application volume, or receiver-level processing.
Test one ordinary output path rather than switching drivers repeatedly. Hardware video decoding and GPU drivers generally do not control audio normalization. Investigate them only if playback stalls, loses synchronization, or prevents the file from decoding smoothly enough for a valid audio test.
Success means the same audio track reaches the intended device with stable channel routing and without competing gain processing. At that point, return to the normalization method rather than changing HDR, shaders, or display-server options.
4.4 Account for URLs, yt-dlp, and Network Streams
For online media, yt-dlp may select a different audio format, track, or combined stream than expected. Network streams may also change representations during playback. First determine whether the problem occurs with the downloaded or resolved media itself by comparing it with a reliable local file.
Confirm that mpv can find the intended yt-dlp executable through a trusted installation path. Do not download random binaries or codec packs. If URL playback fails before audio decoding begins, normalization has no signal to process.
A live stream also has no fixed album context and may contain broadcaster-controlled level changes. ReplayGain tags are often unavailable. A dynamic filter can help, but discontinuities, advertisements, and source-side processing may still produce audible differences.
5. Use Logs to Confirm Filter Insertion
Listening alone can be misleading. mpv's terminal output and log facilities can show whether the requested filter was parsed, inserted, reconfigured, or rejected.
5.1 Create a Focused Log
Run a short test with a log file and more detailed audio-filter messages:
mpv --no-config --msg-level=af=trace --log-file=mpv-normalization.log --af-add="lavfi=[loudnorm=I=-16:LRA=11:TP=-1.5]" "path/to/test-file.mkv"
Use a writable path for the log. On Windows, quote an absolute path if it contains spaces. On Linux or macOS, make sure the current directory permits file creation.
Search the log for the filter name, audio-filter initialization, lavfi messages, parsing errors, unsupported filter errors, and later changes to the filter chain. A successful insertion should be visible without a fatal initialization message.
5.2 Interpret Common Results
- If the filter name never appears, the option probably did not reach mpv or was misquoted.
- If parsing fails, simplify the command and check brackets, colons, commas, and quotation marks.
- If the filter is unavailable, confirm that your trusted mpv build includes the relevant FFmpeg filter.
- If insertion succeeds and later disappears, inspect profiles, scripts, bindings, and front-end commands.
- If insertion succeeds and remains active, examine the source, track selection, expectations, and output routing.
The stats overlay can supplement logs by showing the active media and playback state. It is useful for confirming track and format differences, but terminal logs are generally more authoritative for filter initialization.
6. Run a Clean Temporary Test Before Making Permanent Changes
Create a temporary directory containing only an mpv.conf file. Add one normalization method, not ReplayGain, loudnorm, and dynaudnorm simultaneously. Launch mpv with that directory through --config-dir and use one known local file.
- Test the file with
--no-configand no normalization. - Repeat with only ReplayGain if the file has confirmed tags.
- Repeat with only loudnorm if signal-based normalization is required.
- Try dynaudnorm separately if the goal is real-time leveling.
- Compare the same passage at the same mpv and system volume.
- Move the working line into the normal configuration.
- Re-enable profiles and scripts one group at a time.
This method identifies the exact change that breaks normalization. Do not combine multiple filters until each one has a defined purpose. Stacking normalization, compression, equalization, channel remixing, and limiter filters can affect headroom, latency, CPU use, and perceived quality.
Filter performance matters most on low-power systems, very high sample rates, large channel counts, or already demanding playback. If audio becomes choppy only after inserting a filter, monitor CPU use, simplify the chain, and test without expensive video shaders. That does not mean the video renderer controls normalization; it means both workloads compete for system resources.
7. Quick Fix Checklist
- Run the same local file with
--no-config. - Use
replaygain=trackfor mixed tagged tracks. - Use
replaygain=albumto preserve album-level differences. - Confirm ReplayGain tags exist before expecting metadata-based adjustment.
- Test loudnorm or dynaudnorm separately, not simultaneously.
- Quote the complete lavfi filter argument in the shell.
- Search every config and profile for later
afassignments. - Check input bindings, scripts, front ends, and IPC commands.
- Verify the selected audio track and channel layout.
- Check the operating system's output device and audio enhancements.
- Use
--show-profileto inspect named profiles. - Use
--msg-level=af=traceand--log-fileto verify insertion. - Test online sources against a known local file.
- Stop changing settings when the filter remains active and the comparison sounds correct.
8. Frequently Asked Questions
8.1 Why Does ReplayGain Do Nothing in mpv?
The file may not contain usable ReplayGain metadata, ReplayGain may be disabled, or album mode may be preserving intentional differences between tracks. Test a confirmed tagged file with --no-config --replaygain=track. If that works, inspect your normal configuration for overrides.
8.2 Should I Use track or album ReplayGain?
Use track mode for shuffled playlists and unrelated files when you want each track adjusted independently. Use album mode for complete albums when relative loudness differences are part of the presentation. Neither mode analyzes untagged audio during playback.
8.3 Why Does loudnorm Not Make Every Scene Equally Loud?
Loudnorm targets measured loudness and peak constraints; it is not designed to flatten every moment. Films can retain substantial dynamic range, and real-time processing has limited information at startup or after seeking. For stronger moment-to-moment leveling, test dynaudnorm or another carefully configured dynamic processor.
8.4 How Can I Tell Whether mpv Loaded My Audio Filter?
Launch mpv from a terminal with --msg-level=af=trace and write output using --log-file. Search for the requested filter and any initialization or parsing errors. If the filter loads and remains in the chain, stop troubleshooting configuration syntax and evaluate the source and output path.
8.5 Can Hardware Decoding, HDR, or Subtitles Break Normalization?
They do not normally control audio normalization directly. They become relevant when a shared profile also changes audio options, a script modifies multiple properties, or heavy playback causes performance problems. Confirm the active audio filter and track before changing GPU, HDR, subtitle, or screenshot settings.
8.6 Why Is Normalization Different on a Stream?
Streams may lack ReplayGain tags, switch audio representations, contain source-side level changes, or use different channel layouts. Live content also has no completed program measurement. Verify that the filter is active, check the selected track, and compare the setup with a stable local file before blaming mpv.