- Test subtitles cleanly with --no-config and an explicit subtitle file.
- Use sub-codepage to distinguish UTF-8 from plausible legacy encodings.
- Convert confirmed legacy subtitles safely while preserving the original file.
- Confirm the Symptom With a Minimal Clean mpv Command
- Check sub-codepage and Subtitle-Specific Configuration
- Distinguish UTF-8, Legacy Encodings, ASS, and SRT
- Check the File, Locale, Path, and Media Limitations
- Use Logs, Profiles, and Track Information
- Convert Subtitle Files Safely
- Run a Clean Temporary Test Before Broad Changes
- Quick Fix Checklist
- Frequently Asked Questions
Garbled subtitles in mpv usually appear as replacement diamonds, question marks, broken accented letters, or recognizable text mixed with characters such as Ã, â, and Ð. This is commonly called mojibake. The most likely cause is a mismatch between the subtitle file's actual character encoding and the encoding mpv uses to read it. Other possibilities include a saved sub-codepage setting, a profile or script overriding subtitle options, damaged subtitle text, or an embedded subtitle track whose conversion occurred before mpv received it. The steps below isolate character encoding first, without unnecessarily changing video output, hardware decoding, HDR, audio, or unrelated playback settings.

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 testing the affected video and subtitle without loading your normal mpv configuration, scripts, input bindings, or profiles. This separates a subtitle-file problem from a customization problem.
Open a terminal in the directory containing the files and run:
mpv --no-config --sub-file="subtitle.srt" "video.mkv"
On Windows, use mpv.exe if the executable name is not available through your PATH:
mpv.exe --no-config --sub-file="subtitle.srt" "video.mkv"
Keep the quotation marks when a path contains spaces, brackets, ampersands, or other characters interpreted by the shell. PowerShell, Command Prompt, Bash, and Zsh have different parsing rules, so quoting the complete path is the safest starting point.
1.1 Interpret the clean test
- If the text is now correct, the subtitle file is readable and your regular configuration is overriding relevant behavior.
- If the text remains garbled, the external subtitle probably uses a legacy encoding or contains already-corrupted text.
- If no subtitle appears, verify that the track is selected and that the file path is correct before diagnosing encoding.
- If embedded subtitles work but an external SRT file does not, concentrate on the external file's encoding.
Successful playback means every expected letter, accent, and punctuation mark is displayed correctly. Once that happens, stop changing unrelated options. In particular, do not change vo, gpu-api, hwdec, HDR tone mapping, audio output, or shaders merely because subtitle characters were previously wrong.
2. Check sub-codepage and Subtitle-Specific Configuration
The mpv option most directly related to this symptom is sub-codepage. It tells mpv how to interpret subtitle text that is not recognized as UTF-8. A wrong forced value can turn otherwise valid subtitle bytes into mojibake.
2.1 Test UTF-8 explicitly
For a subtitle you believe is UTF-8, test:
mpv --no-config --sub-codepage=utf-8 --sub-file="subtitle.srt" "video.mkv"
If the accents and non-Latin characters become correct, the file is valid UTF-8 and a saved setting was likely forcing another encoding. You can then remove or correct the conflicting line in your configuration. Do not keep experimenting after a clean UTF-8 test displays all text correctly.
2.2 Test a plausible legacy encoding
Older subtitle files may use a regional encoding instead of UTF-8. Common examples include Windows-1252 for Western European text, Windows-1251 for Cyrillic text, and Shift JIS for some Japanese text. Test only an encoding that makes sense for the subtitle's language and source.
Examples include:
mpv --no-config --sub-codepage=cp1252 --sub-file="subtitle.srt" "video.mkv"mpv --no-config --sub-codepage=cp1251 --sub-file="subtitle.srt" "video.mkv"mpv --no-config --sub-codepage=shift-jis --sub-file="subtitle.srt" "video.mkv"
Encoding names supported by a particular build can depend on its text-conversion libraries. If mpv reports that a code page is unsupported, read the error rather than trying random names indefinitely.
A correct result should produce coherent sentences throughout the file, not merely fix one symbol. If one encoding repairs most lines but leaves isolated replacement characters, the file may contain mixed encodings or text that was damaged before download or export.
2.3 Inspect mpv.conf
Open the active mpv.conf and search for sub-codepage, sub-file, sid, slang, sub-auto, and profile sections. A suspicious line might look like:
sub-codepage=cp1252
Temporarily comment out that line or replace it with the encoding confirmed by your clean test. Avoid deleting the whole configuration folder because that also removes unrelated profiles, scripts, shader settings, and input customizations.
Configuration locations vary by operating system and installation method. mpv's manual documents its normal configuration search paths. If uncertain about which file is active, use logging rather than assuming that the first configuration file you find is the one being loaded.
2.4 Check profiles, input bindings, and scripts
A profile can override the global setting only for particular file types, protocols, directories, or playback conditions. Search all profile sections for subtitle options. Also inspect input.conf for commands that change subtitle properties or load a different subtitle file.
Temporarily disable user scripts by using --no-config for the diagnostic run. Scripts that automatically search for, download, select, or transform subtitles can load a different file than the one you intended. If the clean command works, restore custom components one at a time until the problem returns.
Success here means normal playback works after removing one confirmed override. Once you identify that override, leave video, audio, screenshot, IPC, playlist, and network settings unchanged.
3. Distinguish UTF-8, Legacy Encodings, ASS, and SRT
3.1 UTF-8 versus legacy text
UTF-8 can represent the full Unicode character set and is the best format for newly saved subtitle files. Legacy encodings map each byte according to a limited regional table. If Windows-1252 bytes are decoded as UTF-8, or UTF-8 bytes are decoded as Windows-1252, familiar mojibake patterns appear.
A byte order mark can help some programs identify UTF-8, but UTF-8 does not require one. Its absence does not prove that a subtitle uses a legacy encoding. Detection tools can provide an informed guess, but short files and files containing mostly ASCII characters are inherently difficult to identify automatically.
3.2 SRT behavior
SRT is fundamentally a text format containing sequence numbers, timestamps, and subtitle lines. Because historical SRT files exist in many regional encodings, the filename extension alone says nothing reliable about the encoding. This is where sub-codepage testing is often useful.
If an SRT file displays correctly after an explicit code-page test, either keep the setting for that specific playback case or convert the file to UTF-8. Avoid applying a regional code page globally unless nearly all your subtitle files require it.
3.3 ASS and SSA behavior
ASS and SSA files contain structured sections for script information, styles, events, and sometimes fonts or drawing commands. Modern ASS workflows normally expect Unicode text, commonly UTF-8. Broken ASS text can arise from a bad file export, an incorrect earlier conversion, or a tool saving Unicode characters through a legacy encoding.
Encoding is not the same as font coverage. If letters are readable but use an unexpected typeface, or only certain symbols appear as empty squares, investigate fonts and ASS font attachments. If the text appears as sequences such as Français, investigate encoding first.
Embedded ASS subtitles inside MKV are different from a separately loaded text file. The container demuxer supplies the embedded track to mpv, so forcing an external subtitle code page may not repair text that was incorrectly encoded before muxing. Test an extracted or independently created UTF-8 subtitle to determine whether mpv's renderer is functioning.
4. Check the File, Locale, Path, and Media Limitations
4.1 Terminal locale versus subtitle encoding
A terminal locale controls how terminal applications interpret and display text. It does not automatically redefine the bytes stored inside an SRT or ASS file. A subtitle can be Windows-1251 even when the Linux or macOS shell uses a UTF-8 locale.
If filenames or log messages themselves are garbled, inspect the shell locale and filesystem path handling. On Unix-like systems, the locale command shows the current locale variables. However, if only the rendered subtitle is wrong while filenames and logs are normal, changing the system locale is usually unnecessary.
4.2 Verify the exact subtitle file
Automatic subtitle matching may select another file with a similar name. During testing, specify the complete path with --sub-file and inspect mpv's track list. If several external or embedded subtitle tracks are present, cycle through them or select the intended subtitle ID.
Paths containing non-ASCII characters should work on a correctly configured modern system, but shell quoting can still cause a different file to be loaded or a path to be split. The terminal output should confirm the file that mpv opened.
4.3 Separate subtitle encoding from playback subsystems
Character decoding normally does not depend on the GPU driver, display server, audio backend, hardware decoder, HDR configuration, screenshot format, or video output driver. These areas become relevant only if the symptom is broader than mojibake.
- If subtitles are correctly spelled but invisible, clipped, flickering, or incorrectly colored, investigate rendering and styling.
- If video fails while subtitle text is correct, investigate the decoder, hardware acceleration, output driver, or media file.
- If an online URL does not open, investigate network access, the URL, and yt-dlp integration before subtitle encoding.
- If only a screenshot omits subtitles, check screenshot and subtitle-rendering behavior rather than changing the code page.
- If an embedded track is already corrupted, mpv cannot reconstruct the original characters from information that is no longer present.
This distinction prevents an mpv player issue from turning into a series of unrelated system changes.
5. Use Logs, Profiles, and Track Information
5.1 Capture useful terminal output
Run mpv from a terminal instead of launching it by double-clicking. For more detail, increase messages for subtitle-related components and save a log:
mpv --no-config --msg-level=all=v --log-file="mpv-subtitle-test.log" --sub-file="subtitle.srt" "video.mkv"
Verbose logs can be large. Use them for a short reproduction, then close mpv and inspect the log for the subtitle filename, selected track, code-page messages, conversion errors, demuxer information, and script loading. Before sharing a log publicly, remove private paths, usernames, URLs, headers, or tokens.
5.2 Inspect profile behavior
If a named profile may be responsible, use mpv's --show-profile=PROFILE_NAME facility to inspect what it contains. Compare those options with the successful --no-config command. Profiles triggered automatically can be harder to notice than global options, especially in configurations designed for HDR files, network streams, or particular file extensions.
5.3 Check the track list and stats overlay
The on-screen display and track controls help confirm whether mpv selected an external SRT, embedded ASS track, bitmap subtitle, or another language track. The stats overlay is valuable for playback diagnostics, but it generally will not identify a text file's original encoding. Use it to verify the active media and track context, not as an encoding detector.
Success means the log and track display identify the expected subtitle, and the correct encoding option produces readable text. Stop once those two facts agree.

6. Convert Subtitle Files Safely
Converting a legacy subtitle to UTF-8 is often the best permanent fix, particularly when the file will be used across Windows, Linux, macOS, editors, media servers, and other players.
6.1 Preserve the original
- Make a copy of the subtitle file.
- Open the copy in an editor that lets you choose the source encoding explicitly.
- Select the encoding that produced correct text in the mpv test.
- Save or convert the file as UTF-8.
- Close and reopen it to confirm the characters survived.
- Test the converted copy with
mpv --no-configand no forced legacy code page.
Do not merely choose UTF-8 when saving text that the editor has already decoded incorrectly. If the editor shows mojibake before saving, saving that display as UTF-8 will preserve the mojibake rather than recover the intended letters.
6.2 Convert with iconv when appropriate
On systems with iconv, a conversion can be performed from a known source encoding to UTF-8:
iconv -f WINDOWS-1252 -t UTF-8 "subtitle.srt" > "subtitle-utf8.srt"
Replace the source encoding only when you have confirmed it. Write to a new output file rather than overwriting the original. Review several lines containing distinctive accents or non-Latin characters, then test the result in mpv.
A successful conversion works with:
mpv --no-config --sub-file="subtitle-utf8.srt" "video.mkv"
If this command displays everything correctly, use the UTF-8 copy and remove any temporary forced legacy option. That is the point to stop troubleshooting.
7. Run a Clean Temporary Test Before Broad Changes
A controlled comparison is more reliable than editing several settings simultaneously. Create a tiny known UTF-8 SRT file in a trustworthy text editor and include characters relevant to your language.
For example, save this as UTF-8 under the name known-utf8.srt:
1
00:00:00,000 --> 00:00:05,000
Café, naïve, Español, Ελληνικά, Русский, 日本語
Then run:
mpv --no-config --sub-file="known-utf8.srt" "video.mkv"
- If the known UTF-8 file works, mpv's subtitle renderer is fundamentally working. Focus on the original subtitle's encoding or contents.
- If it works only with your normal configuration disabled, restore options gradually until the override is found.
- If both files fail in the same way, verify how the test file was saved, then review the mpv build, text-conversion support, fonts, and logs.
- If only unsupported glyphs become boxes while Latin accents remain correct, check font coverage rather than code-page selection.
Change one variable per test: the subtitle file, the code page, or the configuration state. Do not simultaneously update the GPU driver, replace mpv, install codec packs, alter yt-dlp, and rewrite the configuration. Those actions obscure the cause and introduce new risks.
8. Quick Fix Checklist
- Run the affected subtitle with
--no-configand an explicit--sub-file. - Confirm that mpv selected the intended external or embedded subtitle track.
- Test
--sub-codepage=utf-8when the file should be UTF-8. - Test one plausible legacy encoding when the language and file history support that choice.
- Search
mpv.conf, profiles, input bindings, and scripts for subtitle overrides. - Create a known UTF-8 SRT and test it under the same clean conditions.
- Convert a confirmed legacy file to UTF-8 while preserving the original.
- Use
--log-fileand targeted verbose output if the selected file or option remains unclear. - Stop changing settings as soon as the correct track displays every character properly.
9. Frequently Asked Questions
9.1 Why does mpv show é instead of é?
This usually means UTF-8 bytes were interpreted through a legacy Western encoding, or text was incorrectly converted earlier. Test the original file as UTF-8. If the mojibake is literally stored in the file, changing sub-codepage may not reverse the earlier damage.
9.2 Should sub-codepage be added permanently to mpv.conf?
Only if your regular subtitle collection consistently requires that encoding. A global legacy setting can break UTF-8 files from other languages or sources. Converting individual old subtitles to UTF-8 is often safer than forcing one regional code page for everything.
9.3 Why does SRT fail while ASS works?
The SRT may use an unidentified legacy encoding while the ASS file is valid UTF-8. The two formats can also come from different sources. Compare them as separate files rather than assuming the video or subtitle renderer is broken.
9.4 Can hardware decoding cause garbled subtitle characters?
Ordinarily, no. Hardware decoding handles video frames, while character decoding handles subtitle text. Test --no-config first, but do not disable a working hardware-decoding or HDR setup unless the problem involves rendering rather than wrong characters.
9.5 Does changing the terminal locale fix the subtitle file?
Not usually. The locale can affect terminal text and command-line path handling, but it does not convert the bytes stored in a subtitle. Determine the file's actual encoding and convert it safely if necessary.
9.6 What if no code page fixes the text?
Confirm that the correct track is selected and test a known UTF-8 subtitle. If the test file works, the original may contain mixed encodings, already-corrupted text, or missing characters. Obtain a correctly encoded source or repair it from an authoritative copy rather than repeatedly guessing code pages.