mpv Embedded Subtitles Not Selecting: How to Fix It

  • Test embedded tracks cleanly with no configuration and explicit subtitle IDs.
  • Fix sid, slang, forced flags, profiles, scripts, and input bindings.
  • Use track lists and logs to identify the exact override.

When embedded subtitle tracks appear in a media file but mpv does not select the expected one, the problem is usually not a missing codec. More often, mpv is following an explicit sid setting, applying language preferences from slang, honoring track metadata, loading a profile, or being changed by a script or input binding. Streams can add another complication because their track metadata may be incomplete or unavailable when playback begins. The safest approach is to prove that mpv can select the embedded track with a clean command, identify the correct track ID, and then reintroduce your normal configuration one layer at a time.

Video player and terminal used to test embedded subtitle track selection.

1. Confirm the Symptom With a Minimal Clean mpv Command

Begin with the exact local file that demonstrates the problem. A local Matroska or MP4 file is preferable to an online URL for the first test because it removes yt-dlp, network access, manifests, and server-side track availability from the equation.

Open a terminal or command prompt and run mpv without loading your normal configuration:

mpv --no-config "path/to/video.mkv"

On Windows, replace the example with a correctly quoted path such as:

mpv --no-config "C:\Media\Example Video.mkv"

During playback, press j to cycle forward through subtitle tracks. The default bindings normally use j to cycle subtitles and J to cycle in the opposite direction. Watch the on-screen display for the subtitle track ID, language, and title.

Success means that one of the embedded tracks becomes visible after cycling. If that works, the file, demuxer, and subtitle renderer are fundamentally functional. Stop investigating codecs, GPU drivers, HDR, and video output at this stage. The likely cause is automatic selection or your normal configuration.

If pressing j does nothing, use an explicit subtitle ID rather than assuming the track is unusable. First display the track information in the terminal:

mpv --no-config --term-playing-msg='${track-list}' "path/to/video.mkv"

Shell quoting varies. In Windows Command Prompt, double quotes are generally easier:

mpv --no-config --term-playing-msg="${track-list}" "C:\Media\Example Video.mkv"

Look for entries whose type is sub. Note the mpv track ID, not merely the stream number shown by another application.

1.1 Test subtitle disabling and explicit selection

Use a two-step test to distinguish selection behavior from rendering behavior:

  1. Start with subtitles intentionally disabled: mpv --no-config --sid=no "video.mkv".
  2. Restart with a known embedded subtitle ID: mpv --no-config --sid=2 "video.mkv".

Replace 2 with the actual subtitle ID reported by mpv. The first command should show no subtitles. The second should select the requested embedded track and normally identify it through the on-screen display.

If explicit selection works, you have confirmed an auto-selection problem. Stop changing rendering, hardware decoding, or output-driver settings. If mpv reports that the ID does not exist, verify the track list and remember that track IDs can differ between files.

2. Check the Options That Control Embedded Track Selection

The most important options for this symptom are sid and slang. Settings for audio, video, hardware decoding, HDR, screenshots, or output drivers generally do not decide which embedded subtitle track mpv selects. Review those unrelated components only if the evidence points beyond selection.

2.1 Inspect the sid option

sid means subtitle track ID. A numeric value requests a specific track, auto allows automatic selection, and no disables subtitle selection. Search your configuration files for lines such as:

sid=no
sid=2
sid=auto

A fixed numeric ID is fragile because ID 2 may be English subtitles in one file and an entirely different track in another. For a general configuration, use:

sid=auto

Alternatively, remove the custom sid line and let mpv use its default behavior. Also inspect command-line aliases, launcher shortcuts, desktop entries, and scripts that may append --sid=no or a numeric ID.

Success means a normal launch selects a suitable embedded subtitle track without manual cycling. Once that happens across several representative files, stop editing other track options.

2.2 Set realistic slang preferences

slang supplies an ordered list of preferred subtitle languages. A practical example is:

slang=en,eng

Language tags are taken from the file or stream metadata, and real-world files are inconsistent. One file may label English as eng, another as en, and another may leave the language undefined. Include the tags that actually appear in mpv's track list rather than guessing.

For multiple preferences, place the most desired language first:

slang=en,eng,ja,jpn

This does not guarantee selection when metadata is absent, misleading, or affected by other auto-selection rules. It expresses a preference among available tracks. Test the file again with:

mpv --no-config --slang=en,eng --sid=auto "video.mkv"

Success means mpv chooses the desired language automatically. If it does, copy only the verified slang setting into your configuration.

2.3 Understand default and forced flags

Embedded tracks can carry default and forced flags. A default subtitle track is the muxer's recommendation for normal playback. A forced track usually contains limited dialogue, signs, or translations intended to appear even when full subtitles are not desired. These flags are metadata, not guarantees that the track contains what its title claims.

mpv's automatic selection considers track properties, language preferences, and related selection rules. The audio language can also matter because players often avoid selecting same-language full subtitles unless the metadata or preferences indicate otherwise. A file with English audio, an English full-subtitle track, and an English forced track may therefore select differently from a file with Japanese audio.

Use the displayed track list to compare:

  • Track type and mpv ID
  • Language tag
  • Track title
  • Default flag
  • Forced flag
  • Whether the track is externally loaded or embedded

If the desired track has incorrect metadata, explicit selection is the reliable per-file test. For a permanent media-library fix, correct the container metadata with a trusted muxing tool only if you understand the change and have a backup. Remuxing is not required merely to make mpv play the track.

2.4 Verify j and J input bindings

Your input.conf can replace mpv's default bindings. Scripts can also define or intercept keys. Search for lines beginning with j or J, especially commands unrelated to subtitles.

You can add explicit bindings if needed:

j cycle sub
J cycle sub down

Test the defaults first with --no-config. If cycling works only in the clean test, restore or revise the conflicting custom binding rather than changing subtitle selection options.

2.5 Check profiles and scripts

A profile may activate based on protocol, file extension, resolution, or another condition. Search mpv.conf and included configuration files for profile sections containing sid, slang, or subtitle-related options.

To inspect a named profile, run:

mpv --show-profile=profile-name

This prints the options associated with that profile. Check profiles used for HDR, high-bitrate video, network playback, or specific file types even when their names do not mention subtitles.

User scripts can change track properties after the file loads. Temporarily disable scripts without deleting them by testing with:

mpv --no-config "video.mkv"

If you need your main configuration but want to isolate scripts, use mpv's script-loading controls appropriate to your setup or temporarily move only the suspected script out of the scripts directory. Change one component at a time.

3. Separate Embedded Subtitle Selection From Unrelated Playback Settings

Many mpv troubleshooting guides focus on GPU output, hardware decoding, HDR, audio backends, yt-dlp, and screenshots. Those components are important, but they rarely choose an embedded subtitle track. Do not change them unless the symptom shows that the selected subtitle fails to render or the source is not actually a local embedded track.

3.1 Video output, GPU drivers, and hardware decoding

If mpv reports the correct subtitle track as selected but no text appears, rendering becomes relevant. Test with --no-config to remove custom shaders, subtitle styling, video filters, and unusual output settings. Hardware decoding normally affects video decoding rather than track choice, so disabling hwdec is not a first-line selection fix.

GPU or display-server investigation is justified when subtitles flicker, disappear only in fullscreen, appear in screenshots but not on screen, or fail after a video-output error. On Linux, compare the behavior under the available Wayland or X11 session only after confirming that the correct subtitle ID is selected. On Windows or macOS, update graphics drivers or the operating system through official channels if logs show output failures. Do not install random codec packs.

Success means the selected track renders consistently in a clean session. Once it does, reintroduce shaders, HDR profiles, and hardware decoding individually.

3.2 Audio track settings and subtitle decisions

An audio preference can indirectly affect automatic subtitle choice because the relationship between audio language and subtitle language matters. Inspect aid and alang alongside sid and slang if the wrong subtitle is selected only with certain audio tracks.

For example, verify the behavior with a known audio and subtitle combination:

mpv --no-config --aid=1 --sid=2 "video.mkv"

Use IDs from mpv's own track list. If this combination works, test automatic subtitle selection while keeping the desired audio language preference. Do not troubleshoot the audio backend unless audio playback itself fails.

3.3 Online URLs, playlists, and yt-dlp

A subtitle advertised on a website is not necessarily embedded in the media stream delivered to mpv. yt-dlp may expose separate subtitle resources, while adaptive streaming manifests may offer tracks that differ by format or region. A playlist can also contain entries with different track layouts.

First determine whether mpv's track list actually contains the subtitle. If it does not, sid cannot select it. Review terminal output for yt-dlp errors, authentication requirements, inaccessible manifests, or unavailable formats. Use an official, current yt-dlp installation from a trusted source and confirm that mpv can find the executable.

For network streams, test the resolved media source separately when legally and technically appropriate. If the track appears only after playback starts, cycle tracks after the stream has initialized. Network permissions, proxies, firewalls, and expiring URLs matter only when resources fail to load. They do not explain a wrong selection among tracks already listed by mpv.

3.4 File paths, permissions, and shell quoting

Permissions can matter when mpv cannot open the media file or configuration file, but they do not usually alter selection inside a successfully opened file. Confirm that the operating-system account can read the media and mpv configuration.

Quote paths containing spaces, brackets, ampersands, or shell-sensitive characters. A malformed command can cause an option value or filename to be interpreted incorrectly. The cleanest diagnostic is to change into the media directory and test a simply named file, such as test.mkv.

Success means the same command behaves predictably with a simple path. If so, correct the original shell quoting rather than modifying mpv's subtitle configuration.

Side-by-side playback logs revealing a subtitle selection override.

4. Use Logs and Track Data to Find the Override

Terminal output is more useful than repeatedly changing options. mpv can report loaded configuration, track discovery, selection decisions, script activity, demuxer messages, and rendering errors.

4.1 Create a focused log

Run the affected file with a log:

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

For a cleaner comparison, create another log without your configuration:

mpv --no-config --log-file=mpv-clean.log --msg-level=all=v "video.mkv"

Compare the logs for:

  • The list of discovered subtitle tracks
  • The selected subtitle ID
  • Configuration files and profiles being loaded
  • Scripts issuing track-related commands
  • Demuxer warnings about missing or unsupported subtitle data
  • Errors opening external subtitle resources

A verbose log may reveal local paths, URLs, media titles, or tokens. Remove sensitive information before sharing it publicly.

4.2 Use the stats overlay and on-screen track information

mpv's stats overlay can help confirm active tracks and playback state. The default key is commonly i, although a custom input.conf may replace it. Use the on-screen track display while cycling with j and J.

The key question is whether mpv says the intended subtitle track is selected. If yes but no subtitle appears during dialogue, seek to a part known to contain subtitle events. Forced tracks may contain only a few lines, and some tracks begin much later than the video.

4.3 Inspect the track list instead of relying on filenames

Container filenames and track titles can be misleading. A title such as “English” may describe commentary subtitles, signs only, or hearing-impaired captions. Use the track list and test each candidate manually.

If every embedded track can be selected explicitly, the media is readable. The remaining task is configuring automatic selection or correcting metadata. If one specific track cannot be decoded, preserve the log and test the file with another trusted media-analysis tool to determine whether that track is damaged or uses an unsupported format.

5. Run a Clean Temporary Test Before Changing Multiple Options

A controlled test prevents one fix from hiding another. Do not delete your configuration folder. Instead, use --no-config and add only the options required for the test.

  1. Run mpv --no-config "video.mkv".
  2. Press j and confirm that embedded tracks can be selected.
  3. Run with --sid=no and verify that subtitles are disabled.
  4. Run with --sid=ID using the desired track ID.
  5. Run with --sid=auto --slang=en,eng, adjusted to the file's actual language tags.
  6. Enable your normal configuration but temporarily isolate suspected scripts or profiles.
  7. Add custom shaders, hardware decoding, HDR profiles, URL tools, and other unrelated features only after selection works.

After each step, define success narrowly. If explicit sid selection works, stop troubleshooting file support. If slang makes automatic selection work, stop changing rendering settings. If the issue returns only when a script is enabled, inspect that script's settings rather than rewriting the entire configuration.

6. Quick Fix Checklist

  • Test the file with mpv --no-config.
  • Press j or J to cycle embedded subtitle tracks.
  • Inspect mpv's track list and note the correct subtitle ID.
  • Test --sid=no, then test --sid=ID.
  • Remove fixed or disabling sid values from general profiles.
  • Set sid=auto for automatic selection.
  • Set slang using language tags shown by the actual file.
  • Check default and forced flags instead of trusting track titles alone.
  • Review input.conf for overridden j and J bindings.
  • Inspect profiles with --show-profile.
  • Compare normal and --no-config logs.
  • For URLs, verify that the subtitle appears in mpv's track list.
  • Do not change GPU, HDR, or audio settings unless selection succeeds but rendering fails.

7. Frequently Asked Questions

7.1 Why does mpv see embedded subtitles but not enable them?

The common causes are sid=no, a fixed sid, language preferences that do not match the file's metadata, default or forced flags, an active profile, or a script changing the selected track. Use --no-config and explicit --sid=ID to identify whether the issue is selection or decoding.

7.2 What should sid be set to?

For general automatic behavior, use sid=auto or omit a custom sid line. Use a numeric ID for a specific file or diagnostic test. Use sid=no only when you intentionally want subtitles disabled.

7.3 Why does slang not always choose the expected subtitle?

slang depends on language metadata stored in the file or stream. Tags may be missing, inconsistent, or incorrect. Track flags and the selected audio language can also affect automatic behavior. Include the tags mpv actually reports and verify the result with more than one file.

7.4 Why does j not cycle subtitles?

Your input.conf or a script may have replaced the default binding. Test j under --no-config. If it works there, restore an explicit j cycle sub binding or remove the conflict.

7.5 Can hardware decoding or HDR prevent subtitle selection?

They ordinarily do not control track selection. They become relevant only when mpv selects the correct track but fails to display it properly. Confirm the selected ID before changing hwdec, GPU output, shaders, HDR settings, or display-server options.

7.6 Why are subtitles available on a website but absent from mpv?

The website may deliver subtitles as a separate resource rather than an embedded stream. yt-dlp, the selected media format, authentication, or the streaming manifest may determine whether mpv receives them. If the subtitle is absent from mpv's track list, changing sid cannot select it.


Citations

  1. Official documentation for mpv options, track selection, language preferences, logging, and profiles. (mpv Manual)
  2. Official documentation and source repository for yt-dlp installation and usage. (yt-dlp GitHub Repository)
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.