mpv Subtitle Delay Keeps Resetting: How to Fix It

  • Separate temporary runtime adjustments from persistent mpv configuration defaults.
  • Find profile, script, binding, or watch-later settings overriding subtitle delay.
  • Use clean tests and logs before changing unrelated playback options.

You adjust the subtitles until dialogue and text line up, only for the delay to disappear when mpv opens another file, advances through a playlist, activates a profile, or starts a new session. When mpv subtitle delay keeps resetting, the cause is usually not subtitle rendering itself. The important distinction is persistence: a runtime adjustment may be intentionally local to the current file, while a config option establishes a reusable default. Profiles, scripts, input commands, and per-file saved state can also overwrite that value. The steps below isolate those possibilities without disturbing an otherwise working HDR, hardware-decoding, streaming, shader, or yt-dlp setup.

Video player and terminal arranged for a clean subtitle timing test.

1. Confirm the Symptom With a Minimal Clean mpv Command

Begin by separating a real synchronization problem from a persistence problem. A synchronization problem means the chosen delay does not align the subtitle with speech. A persistence problem means the delay works, but later returns to zero or another value.

Close other mpv instances and open a terminal in a directory containing a local test video. Run one of these commands, replacing the path with your actual file:

mpv --no-config --sub-delay=1 "test-video.mkv"

On Windows, use the command name appropriate to your installation, such as mpv.exe. On Linux or macOS, it is normally mpv. The quoted path protects spaces and shell-sensitive characters.

A positive subtitle delay makes subtitles appear later. A negative value makes them appear earlier. Use an obvious value such as one second during diagnosis so the effect is easy to recognize.

1.1 Test runtime adjustment separately

While the video is playing, open mpv's console if your build and bindings provide it, or use your subtitle-delay keys. You can also add explicit commands to a temporary input configuration:

z add sub-delay -0.1
x add sub-delay 0.1
Ctrl+z set sub-delay 0

The key names are examples. The commands are the significant part. The first two subtract or add one tenth of a second, while the third resets the property to zero.

Success means the subtitle timing changes immediately and remains changed while that file continues playing. Stop investigating subtitle decoding if this works. The renderer and the sub-delay property are functioning.

1.2 Observe exactly when the value resets

Test each transition relevant to your normal workflow:

  1. Seek within the same file.
  2. Change subtitle tracks.
  3. Advance to the next playlist item.
  4. Stop playback and reopen the same file.
  5. Open a different local file.
  6. Open an online URL or network stream.

Write down the first action that loses the adjustment. A reset only on the next playlist item strongly suggests file-local runtime behavior. A reset when switching tracks may come from a script or binding. A reset only after restarting mpv indicates that the change was never placed in a persistent configuration source.

2. Choose the Correct Persistence Method

mpv settings can come from command-line options, the main configuration file, profiles, input commands, scripts, and saved per-file state. These mechanisms solve different problems. Selecting the wrong one is the most common reason an apparently successful fix later disappears.

2.1 Runtime changes versus config defaults

A runtime command such as add sub-delay 0.1 changes the active playback property. It is ideal for correcting one release, one subtitle file, or one stream. It should not be treated as a promise that all later playlist entries or future sessions will inherit that value.

To establish a default for files opened in future sessions, add this to mpv.conf:

sub-delay=0.5

Use the value that matches your situation. Restart mpv and open a test file. Success means playback starts with that delay without pressing an adjustment key. Once that happens, stop editing unrelated options.

Common user-level configuration locations include %APPDATA%\mpv\mpv.conf on traditional Windows setups, ~/.config/mpv/mpv.conf on Linux, and ~/.config/mpv/mpv.conf on many macOS command-line installations. Windows portable configurations may use a portable_config directory beside the executable. Packaging choices can affect the active location, so verify which configuration mpv actually loads through terminal output rather than assuming.

2.2 File-local option reset behavior

Playback-related properties may be reinitialized as mpv loads a new file. Consequently, adjusting subtitle delay during playlist item one does not necessarily make it the starting value for item two. This is expected behavior when the correction belongs to the currently loaded media.

If every episode in a playlist needs the same correction, set sub-delay on the command line when launching that playlist or define a suitable profile. If only one episode is wrong, keep the correction local instead of making it a global default.

Success means the setting now persists over precisely the scope you intended: one file, one playlist launch, a matching profile, or every future file. Do not continue broadening the scope once that requirement is met.

2.3 Profile-specific sub-delay values

Search every loaded configuration file for sub-delay. A profile can replace your normal value when its conditions match. For example:

[series-fix]
sub-delay=0.7

A profile may be activated explicitly with --profile=series-fix, selected by a script, or associated with conditions in more advanced configurations. Also inspect included config files if your main configuration uses mpv's include mechanism.

Use this command to inspect a named profile:

mpv --show-profile=series-fix

If a profile contains an obsolete delay, remove that line or change it to the intended value. Success means activating the profile no longer produces an unexpected reset.

2.4 Input bindings that set instead of adjust

Inspect input.conf and script-defined bindings. These commands have different effects:

  • add sub-delay 0.1 adjusts the current value incrementally.
  • set sub-delay 0.1 replaces the current value with exactly 0.1.
  • set sub-delay 0 resets synchronization.
  • cycle-values sub-delay ... selects from predefined values.

A key intended to add delay may therefore appear to reset it if the binding uses set. Duplicate bindings are another possibility because a later definition can replace an earlier one.

Temporarily assign clear test keys to incremental commands. Success means repeated presses move the delay predictably instead of jumping to a fixed value.

2.5 Watch-later limitations

mpv's watch-later feature is primarily designed to resume saved playback state for a particular media item. Do not assume it saves every property or creates a universal subtitle preference. The exact saved option set is controlled by mpv's watch-later configuration and can vary with configuration or build capabilities.

If your installed mpv supports configuring the watch-later option list, consult its matching manual and consider appending sub-delay to that list. Treat this as per-media restoration, not as a global default. It may also be unsuitable for unstable stream URLs whose identifiers change between sessions.

Test by saving playback state, closing mpv normally, and reopening the identical local file. Success means that file recovers its delay. If you want every unrelated file to start with the same value, use mpv.conf instead.

3. Check Tracks, Scripts, Streams, and Related Options

Subtitle timing can look like it reset even when the property did not. Confirm that mpv is still displaying the same subtitle track and that no automation reacts to file or track changes.

3.1 Verify the selected subtitle track

Use mpv's track list or on-screen track controls to identify the active subtitle. Embedded subtitles, external SRT files, forced tracks, and secondary subtitles can have different timing. If a playlist item automatically selects a different track, the new text may need a different correction.

Also check whether a script automatically loads subtitles or changes sid, secondary-sid, or subtitle visibility. Disable only the suspected script for a temporary test rather than removing the whole config directory.

Success means the same intended subtitle source remains selected and responds consistently to delay changes.

3.2 Separate subtitle delay from audio delay

If dialogue itself is late relative to the image, changing subtitle timing may only hide a broader audio and video synchronization issue. Test a scene where a visible impact or lip movement has clear sound.

  • If audio and video agree but text is early or late, adjust sub-delay.
  • If subtitles match the image but audio is displaced, investigate audio delay or backend behavior.
  • If synchronization drifts progressively, the source timestamps or subtitle frame-rate conversion may be involved.

Do not add permanent subtitle delay to compensate for a temporary Bluetooth audio delay, a malfunctioning audio backend, or a single damaged media file.

3.3 Treat yt-dlp and stream URLs as identity issues

yt-dlp integration, online URLs, and network streams do not normally determine the basic behavior of sub-delay. They can, however, change the media identity, selected format, subtitle source, or URL between launches. That can prevent per-file watch-later state from matching the next session.

Run a local-file test first. If persistence works locally but not with an online URL, inspect whether the resolved URL or selected subtitle track changes. Keep yt-dlp updated through its trusted official distribution channel, but do not replace binaries randomly as a first response to a subtitle-delay issue.

3.4 Avoid changing unrelated video options

HDR output, shaders, output drivers, screenshot settings, and hardware decoding generally do not control whether sub-delay persists. GPU or display-server problems can cause timing instability or dropped frames, but they do not normally rewrite the configured property.

Only test --hwdec=no, another video output, or a simpler shader setup when audio and video timing is unstable, frames drop heavily, or logs report decoder and presentation errors. If the numeric delay itself returns to zero at a file boundary, inspect configuration scope, profiles, scripts, and bindings first.

4. Verify Paths, Permissions, and Config Loading

A correct sub-delay line has no effect if mpv never reads that file. This is especially common when multiple mpv installations, portable builds, graphical front ends, or different user accounts are involved.

4.1 Confirm the active executable and config

From a terminal, identify the executable your shell launches. On Windows, use where mpv. On Linux and macOS, use which mpv or command -v mpv. Compare that result with the executable used by shortcuts or file associations.

Make a harmless, obvious temporary config change, such as a distinctive window title if supported by your setup, and start mpv normally. Revert it after confirming the active file. Avoid deleting the complete config folder because that destroys useful evidence and may remove scripts or profiles unrelated to the problem.

4.2 Check write permissions only when saving state

Reading mpv.conf requires file access, while watch-later persistence also requires permission to create or update state files. Check ownership and permissions on the specific mpv config and state directories. On Windows, also consider whether security software or controlled-folder protection blocks writes.

Do not run mpv permanently as an administrator merely to work around a permissions error. Correct the affected user directory or choose a user-writable configuration location.

Success means logs show the intended config being loaded and watch-later state, if used, can be written without access errors.

4.3 Quote paths correctly

Configuration arguments and shell commands can fail when file paths contain spaces, brackets, ampersands, or other shell-sensitive characters. Quote media, playlist, log, and config paths. Keep mpv option syntax outside the quoted media path.

For example:

mpv --sub-delay=0.5 --log-file="mpv-test.log" "D:\Media Files\Episode 01.mkv"

If a graphical front end launches mpv, inspect its generated arguments. A later --sub-delay=0 can override your earlier command-line value.

Diagnostic log tracing a subtitle delay override through configuration layers.

5. Use mpv Diagnostics to Find the Override

When the reset source is not obvious, collect evidence at the moment it happens. Terminal output is more useful than changing multiple decoder, GPU, or subtitle options at random.

5.1 Create a focused log

Launch a reproducible test with verbose messages and a log file:

mpv --msg-level=all=v --log-file="mpv-sub-delay.log" "test-video.mkv"

Reproduce the reset once, close mpv, and search the log for terms such as config, profile, script, sub-delay, watch, and subtitle. Logs can be large, so avoid leaving maximum verbosity enabled during normal playback.

Success means you identify a loaded config path, profile activation, script action, track change, or state-restoration event that corresponds to the reset. Once found, change only that source.

5.2 Compare configured and clean behavior

Run the same file twice:

  1. mpv --no-config --sub-delay=0.8 "test-video.mkv"
  2. mpv --sub-delay=0.8 "test-video.mkv"

If only the second test resets, the cause is in your loaded configuration, profiles, scripts, or input setup. If both behave identically and reset only at the next file, you are probably observing file-local property initialization rather than a broken installation.

5.3 Use the stats overlay and track list appropriately

The stats overlay helps identify dropped frames, frame timing, decoder selection, and rendering pressure. The track list confirms active video, audio, and subtitle streams. Neither feature makes a delay persistent, but both can disprove misleading theories.

If playback is smooth, audio and video remain synchronized, the intended subtitle track is active, and only the delay value changes at file load, stop modifying GPU drivers, HDR options, audio backends, and hardware decoding. Those components are not the likely cause.

6. Run a Clean Temporary Test Before Major Changes

Create a small temporary directory containing only a test configuration and input file. Do not move or delete your existing configuration. Instead, point a test launch at the temporary setup if your mpv build supports an explicit config directory, or use --no-config with command-line options.

Use two short local files and a playlist. Test these cases in order:

  1. Launch one file with --no-config --sub-delay=1.
  2. Adjust the delay at runtime and seek within the file.
  3. Advance to the second playlist item and observe initialization.
  4. Create a minimal config containing only sub-delay=1.
  5. Launch both files using that config and confirm each starts with the default.
  6. Add your normal profiles, scripts, and bindings back one group at a time.

This method reveals the first component that changes behavior. If a script reintroduces the reset, inspect its settings and event handlers. If a profile does it, remove or correct the profile's delay line. If the minimal configuration works throughout, reinstalling mpv or replacing codecs is unnecessary.

Success means you can state exactly which persistence method controls each transition. Stop once normal playback behaves correctly. Additional changes increase the risk of creating a separate mpv player issue.

7. Quick Fix Checklist

  • Confirm sub-delay changes timing during the current file.
  • Determine whether reset occurs on seek, track switch, playlist change, or restart.
  • Use sub-delay=value in mpv.conf only for a genuine global default.
  • Use runtime add sub-delay bindings for file-specific corrections.
  • Search configs, included files, profiles, and scripts for competing delay assignments.
  • Check whether a binding uses set when you intended add.
  • Use watch-later only for supported per-media restoration, not universal persistence.
  • Verify that the intended subtitle track remains selected.
  • Compare normal playback with a temporary --no-config test.
  • Capture one verbose log instead of changing unrelated video options.
  • Confirm the executable and config path used by shortcuts and front ends.
  • Stop troubleshooting when the setting persists over the intended scope.

8. Frequently Asked Questions

8.1 Why does subtitle delay reset on the next playlist item?

A runtime change commonly belongs to the currently playing file. Loading the next item initializes a new playback context and may restore defaults. If all playlist items need the same correction, launch the playlist with --sub-delay=value or use an appropriate profile or config default.

8.2 Can mpv remember a different delay for every video?

Per-media restoration may be possible through watch-later state when sub-delay is included in the saved option set supported by your installation. Test it with the identical local file. It is less reliable as an identity mechanism for changing stream URLs, and it should not be confused with a global preference.

8.3 When should I avoid putting sub-delay in mpv.conf?

Do not set a global delay when only one subtitle release is mistimed, when Bluetooth or audio output causes temporary latency, when different episodes require different offsets, or when a stream's timestamps are defective. A global correction will make correctly synchronized media wrong.

8.4 Why does pressing my delay key jump back to one value?

Your binding probably uses set sub-delay rather than add sub-delay, or another binding overrides it. Inspect input.conf and script bindings. Use add for incremental adjustment and reserve set for deliberate fixed values or reset commands.

8.5 Could hardware decoding, HDR, or the GPU driver cause this?

They can contribute to stutter, dropped frames, presentation problems, or apparent synchronization instability. They generally do not explain a subtitle-delay property returning to a default exactly when a file or profile changes. Test them only when diagnostics show broader playback timing problems.

8.6 What is the clearest sign that the fix worked?

The chosen delay survives exactly the transitions you intended without harming correctly synchronized media. A global default should apply when new files start. A per-file correction should remain limited to that media. A profile value should apply only when the profile is active. Once those boundaries behave predictably, no further mpv troubleshooting is needed.


Citations

  1. Official mpv manual covering sub-delay, profiles, configuration, watch-later options, logging, and diagnostics. (mpv Manual)
  2. Official mpv documentation for input commands, properties, and custom key bindings. (mpv Input Command Documentation)
Cindy, ContentBASE creator assistant

MEET CINDY

Your ContentBASE creator assistant

Cindy helps creators find Canva templates, content ideas, and simple ways to make better social media posts faster.

Want ready-to-use templates? Claim the free Canva bundles or browse the full bundle store.