- Test caption availability directly with yt-dlp before changing mpv rendering settings.
- Use a clean mpv command to isolate configs, profiles, scripts, and bindings.
- Fix language, authentication, path, or network problems using clear success checks.
- Confirm the Symptom With a Minimal Clean mpv Command
- Check Caption Extraction and Subtitle Selection
- Inspect Configurations, Profiles, Scripts, and External Tools
- Check Authentication, Network Access, and URL Handling
- Use Logs and Track Information to Locate the Failure
- Avoid Unrelated Video and Audio Changes
- Run a Controlled Temporary Test
- Quick Fix Checklist
- Frequently Asked Questions
When mpv plays an online video but captions are unavailable, the failure usually occurs before subtitle rendering begins. mpv commonly relies on yt-dlp to inspect a web page, select media streams, and expose manual or automatically generated captions. The problem may therefore involve caption availability on the site, yt-dlp extraction, language preferences, authentication, shell quoting, or an mpv configuration that hides or deselects subtitles. The safest approach is to test the URL with a clean mpv command, inspect yt-dlp directly, and change one relevant setting at a time.

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 by separating an online-caption problem from your normal mpv configuration. Open a terminal, Command Prompt, or PowerShell window and run mpv with configuration loading disabled. Replace the example URL with the exact page URL you are trying to play.
mpv --no-config --sub-auto=all --sub-langs=all "https://example.com/video-page"On a POSIX shell such as Bash or Zsh, single quotes are also suitable. Quoting is important because online URLs can contain ampersands, question marks, or other characters interpreted by the shell.
mpv --no-config --sub-auto=all --sub-langs=all 'https://example.com/video-page'This test removes profiles, scripts, input bindings, and persistent subtitle preferences from the immediate diagnosis. It does not modify or delete your configuration files.
1.1 Interpret the result before making changes
- If captions work, the site, yt-dlp integration, and mpv subtitle renderer are fundamentally functional. Stop changing system components and investigate your normal configuration.
- If the video plays but no subtitle track appears, inspect caption availability and yt-dlp extraction next.
- If the URL does not play at all, this is initially an extractor, network, authentication, or URL problem rather than a subtitle-rendering problem.
- If a subtitle track exists but no text appears, examine track selection, language settings, subtitle visibility, and the timing of the selected track.
Press j in the default mpv input configuration to cycle subtitle tracks. You can also use the console or track list to determine whether mpv received any subtitle tracks. Success means a caption track is listed and visible during a spoken portion of the video. Once that happens, stop changing yt-dlp or network settings.
2. Check Caption Extraction and Subtitle Selection
Web captions differ from subtitle files located beside a local video. For a supported online page, yt-dlp extracts media information and may expose subtitle URLs to mpv. A setting that works for local .srt files does not guarantee that captions will be requested or selected for a web video.
2.1 Verify whether the site offers manual or automatic captions
First check the same video in a normal web browser. Open the player’s caption menu and note the available languages. Some videos have manually uploaded subtitles, some have automatically generated captions, and some have none. Availability can also vary by language, account, region, live-stream state, or video privacy.
Manual captions and automatic captions are separate resources. A command that finds uploaded subtitles may still show no automatic captions, or the reverse. Automatic captions should not be treated as guaranteed because the hosting service decides whether to generate and expose them.
If the website itself offers no captions for that video, mpv cannot create an authoritative caption track merely by changing sub-lang, the video output, or hardware decoding. Stop troubleshooting mpv unless you intend to supply your own lawful external subtitle file.
2.2 Test yt-dlp caption discovery directly
Run yt-dlp independently so that you can see what its extractor reports:
yt-dlp --list-subs "https://example.com/video-page"The output normally separates available subtitles from automatic captions when the site exposes that information. Look for the desired language code and a usable subtitle format. Language labels can be more specific than expected, such as a regional variant instead of a generic language code.
If yt-dlp lists the caption track, extraction is working. The remaining issue is likely how mpv requests, imports, selects, or displays it. If yt-dlp reports no subtitles while the browser shows them, update yt-dlp from the same installation source you originally used, then repeat the direct test. Do not install an unrelated codec pack or download an executable from an untrusted mirror.
2.3 Download subtitles without downloading the video
A direct extraction test can confirm whether yt-dlp can retrieve the actual caption resource. For manually provided English subtitles, use:
yt-dlp --skip-download --write-subs --sub-langs "en.*" "https://example.com/video-page"For automatically generated English captions, use:
yt-dlp --skip-download --write-auto-subs --sub-langs "en.*" "https://example.com/video-page"The pattern en.* can match English variants, but you should choose the exact code shown by --list-subs when precision matters. Success means yt-dlp writes a nonempty subtitle file that contains timed text. You can then test that file with a local video or load it explicitly in mpv. If the download fails, remain focused on yt-dlp, account access, site restrictions, or network access rather than mpv’s renderer.
2.4 Review sub-lang and subtitle visibility settings
In mpv.conf, a preference such as the following can influence automatic track selection:
slang=en,engDepending on the mpv option syntax in use, command-line users can specify preferred languages with --slang=en,eng. A narrow language list can prevent a differently labeled track from being selected automatically. It does not necessarily mean the track is absent, so cycle tracks before concluding extraction failed.
Also check for options that disable or hide subtitles, including sub=no, sid=no, or a subtitle visibility toggle triggered through an input binding. Temporarily force a track after verifying that one exists, or cycle through tracks using the default key. Success means captions appear without changing the URL or re-running yt-dlp.
3. Inspect Configurations, Profiles, Scripts, and External Tools
If the clean command works but ordinary playback does not, your regular mpv environment is responsible. Do not delete the entire configuration directory. Inspect the relevant files and disable individual components temporarily.
3.1 Search mpv.conf and active profiles
Review mpv.conf for subtitle-related options, URL-specific profiles, protocol profiles, and broad track-selection rules. Pay particular attention to:
slang,sid,sub-auto, and subtitle visibility optionsytdlorytdl-formatsettings- Profiles activated for online URLs or particular protocols
- Track-selection options that request video-only or audio-only formats
- Script options that alter tracks after a file loads
Use mpv’s profile inspection option when diagnosing a named profile:
mpv --show-profile=PROFILE_NAMEThis prints the options associated with that profile. Compare them with the successful --no-config test. Remove or comment out only the suspicious option, restart mpv, and test again. Success means normal configuration works while preserving your other customizations.
3.2 Check input bindings and scripts
An input.conf binding can disable subtitle visibility, set sid to no track, or run a script command. Scripts can also replace yt-dlp handling, modify track selection, or reload a URL with different options.
Temporarily rename one suspected script file or move it outside the scripts directory, then repeat the test. Do not remove all scripts at once unless a clean test has already proved that configuration is the dividing line. If captions return, re-enable scripts individually until the conflict is identified.
3.3 Confirm mpv is finding the intended yt-dlp executable
Multiple yt-dlp installations are common, especially on Windows systems with several Python environments or package managers. A terminal may invoke one executable while mpv finds another through its process environment.
Check the terminal-visible executable with the appropriate command:
where yt-dlpOn Linux or macOS, use:
command -v yt-dlpThen run:
yt-dlp --versionLaunch mpv from that same terminal and examine its verbose log to see whether external extraction succeeds. If mpv works when launched from the terminal but not from a desktop shortcut, the graphical session may have a different PATH. Fix the launcher environment or configure the external tool path using documented mpv options appropriate to your installation.
4. Check Authentication, Network Access, and URL Handling
Some captions are visible only to logged-in users, members, age-verified accounts, or viewers in an allowed region. In that situation, the public page may play a preview or video stream while withholding caption metadata.
4.1 Use cookies only when access is legitimate
If you are authorized to view the captions in your browser, yt-dlp supports authenticated extraction through browser cookies and cookie files. Test the relevant yt-dlp cookie option directly before involving mpv. Handle exported cookies as sensitive credentials because they may provide access to your account.
Do not use cookies to bypass DRM, payment, geographic licensing, or access controls. Cookies only help yt-dlp make the same authorized request that your logged-in browser can make. If direct yt-dlp subtitle listing succeeds with authorized cookies, pass the equivalent extractor arguments through mpv’s documented yt-dlp raw-options mechanism or use a carefully scoped profile.
Success means the desired language appears in --list-subs and can be written with --skip-download. At that point, stop changing GPU, audio, or rendering options.
4.2 Rule out shell and URL mistakes
Always quote a URL that contains query parameters. In PowerShell, Bash, and similar shells, an unquoted ampersand can split the command. Also use the canonical video page URL rather than a temporary media-segment URL copied from developer tools. Temporary stream URLs may expire, omit subtitle metadata, or require request headers that are no longer valid.
Playlists need additional care because caption availability can differ per item. Test one individual video URL first. For live streams, captions may not be exposed as a conventional downloadable track, and archived captions may appear only after processing finishes.
4.3 Consider proxies, filters, and certificates
A firewall, DNS filter, proxy, VPN, antivirus web filter, or corporate network can permit the primary video host while blocking a separate caption endpoint. Compare yt-dlp’s direct subtitle-download result on the current network with an authorized alternative network. Inspect errors rather than disabling security software blindly.
Certificate or connection errors in yt-dlp indicate a network or trust-store problem, not an mpv subtitle font problem. Correct the operating system clock, proxy configuration, certificate store, or approved network policy. Avoid suppressing certificate verification as a routine fix.

5. Use Logs and Track Information to Locate the Failure
Terminal output is usually more valuable than changing a large collection of mpv options. Start with a readable verbosity level and write the result to a file:
mpv --no-config --msg-level=all=v --log-file=mpv-caption-test.log "https://example.com/video-page"Use a private test URL carefully because logs may contain URLs, tokens, file paths, or extractor details. Redact sensitive values before sharing the file.
5.1 What to search for in the log
- Whether mpv invokes or communicates with yt-dlp successfully
- Extractor errors, unsupported-site messages, login requirements, or network failures
- Subtitle tracks added to the demuxer
- The language and title assigned to each subtitle track
- A setting that disables subtitle selection or visibility
- A script error occurring when tracks are loaded
If the log contains no subtitle track and yt-dlp also lists none, the issue is upstream of mpv rendering. If the log shows a subtitle track but it is not selected, focus on slang, sid, profiles, and scripts.
5.2 Use the track list and stats overlay
mpv’s on-screen controls and console can reveal loaded tracks. The stats overlay is also useful for confirming the currently selected video, audio, and subtitle tracks. Default bindings and available pages can vary with configuration, so consult the active input bindings if a familiar key does not work.
Track information provides a firm stopping rule: once the intended caption track is loaded, selected, and visible, do not continue adjusting yt-dlp. If it is loaded and selected but text appears only at certain times, seek to a known spoken section and consider whether the caption file has gaps or incorrect timing.
6. Avoid Unrelated Video and Audio Changes
A common mpv troubleshooting mistake is to change hardware decoding, HDR tone mapping, GPU APIs, video output, display-server settings, or audio backends for a caption-extraction failure. Those components can affect playback, but they do not cause yt-dlp to discover captions that the site did not expose.
6.1 When output and hardware settings are relevant
Investigate the video output or hardware decoder only if logs show a subtitle track is loaded and selected but the entire rendered image, including the on-screen display, is missing or corrupted. Test with a basic configuration and software decoding:
mpv --no-config --hwdec=no "https://example.com/video-page"If captions appear only with software decoding, preserve the working test and investigate the specific GPU driver, video output, and platform combination. Do not assume that every missing-caption report is a hardware-decoding bug.
HDR settings are similarly secondary. Subtitle colors or brightness can look wrong during HDR output, but HDR does not determine whether yt-dlp discovers a web caption track. Audio backend settings matter only if playback itself stalls or fails in a way that prevents reaching captioned timestamps.
6.2 Screenshot settings do not control live caption availability
If captions display during playback but do not appear in screenshots, that is a separate screenshot-composition question. Review whether screenshots include subtitles or the on-screen display. Do not modify screenshot settings when the original symptom is that no online subtitle track exists.
7. Run a Controlled Temporary Test
Before editing several persistent options, build a short sequence of tests. Keep the same URL and spoken timestamp throughout so that each result is comparable.
- Confirm captions exist in the browser and note their exact language.
- Run
yt-dlp --list-subson the quoted page URL. - Use
--skip-downloadwith either--write-subsor--write-auto-subs. - Run mpv with
--no-config, broad subtitle language selection, and the same quoted URL. - If that works, restore normal configuration and disable one relevant option, profile, or script at a time.
- If it fails, save a verbose mpv log and compare it with yt-dlp’s direct error.
This sequence identifies the responsible layer without damaging a carefully customized setup. Make persistent changes only after a temporary command demonstrates that the proposed fix works. Once captions load reliably with the desired language, stop. Additional changes increase the risk of introducing an unrelated mpv player issue.
8. Quick Fix Checklist
- Verify that the website actually offers captions for the specific video.
- Distinguish manually uploaded subtitles from automatically generated captions.
- Quote the full page URL in your shell.
- Run
yt-dlp --list-subsand note the exact language code. - Test caption writing with
--skip-download. - Try mpv with
--no-config --sub-auto=all --sub-langs=all. - Cycle subtitle tracks and confirm subtitle visibility is enabled.
- Review
slang,sid, profiles, scripts, and input bindings. - Confirm mpv can find the intended yt-dlp executable.
- Use authorized cookies when captions genuinely require a logged-in account.
- Inspect a verbose log before changing GPU, HDR, audio, or video-output settings.
- Stop changing settings as soon as the intended track loads and displays correctly.
9. Frequently Asked Questions
9.1 Why does the browser show captions while mpv does not?
The browser may be logged in, may use private site APIs, or may have access to caption metadata that yt-dlp cannot retrieve in the current session. Test yt-dlp --list-subs. If authentication is required and you are authorized, test supported cookie access. If yt-dlp sees the captions but mpv does not display them, inspect mpv’s track selection and configuration.
9.2 Does sub-lang download missing captions?
No. A language preference helps choose among tracks that are available to mpv. It cannot create a caption track or force a website to expose one. Use yt-dlp’s subtitle listing to establish availability first.
9.3 Can mpv use automatically generated captions?
It can use automatic captions when the site exposes them, yt-dlp supports extracting them, and the selected integration makes them available. Automatic and manual tracks may have different language codes or formats. Test automatic captions explicitly with yt-dlp’s --write-auto-subs option.
9.4 Why do captions work with --no-config?
That result strongly indicates a conflict in mpv.conf, a profile, an input binding, a script, or a related script-options file. Compare the clean run with your normal setup. Disable only subtitle-selection rules and likely scripts first instead of deleting the full configuration directory.
9.5 Should I change hwdec or the GPU output?
Not unless mpv has loaded and selected the caption track but fails to render it correctly. Hardware decoding, HDR, and GPU output rarely explain why yt-dlp reports no web captions. Use logs and the track list to prove the problem has reached the rendering stage before changing those options.
9.6 What is the clearest sign that the fix worked?
The strongest confirmation is that yt-dlp lists the expected caption language, mpv’s track information shows that subtitle track as loaded and selected, and timed text appears during a known spoken passage. Save the working command or minimal configuration change and stop troubleshooting other subsystems.