TL;DR: subtitles in an MKV file come in two fundamentally different forms, and the extraction method depends on which one you have. If the MKV contains a text subtitle track (SRT or ASS), one free command — ffmpeg or MKVToolNix's mkvextract — saves the subtitle file in seconds. But two common cases contain no text at all: image-based tracks (PGS and VobSub, standard in Blu-ray and DVD rips) and subtitles burned directly into the picture. Both of those need OCR. This guide covers all four cases, with the exact commands, starting with a 10-second check that tells you which case yours is.
How do I check what subtitle tracks an MKV file has?
Before extracting anything, list the subtitle streams. With ffmpeg installed (brew install ffmpeg on a Mac), run:
ffprobe -v error -select_streams s \
-show_entries stream=index,codec_name:stream_tags=language,title \
-of default=noprint_wrappers=1 input.mkv
Or, if you already use MKVToolNix, mkvmerge -i input.mkv prints the same information in plainer language. The codec_name in the output tells you everything:
| codec_name | What it is | How to get SRT |
|---|---|---|
subrip | Plain text subtitles (SRT) | One ffmpeg command — done in seconds |
ass | Styled text subtitles (common in anime) | One ffmpeg command; styling is dropped in SRT |
hdmv_pgs_subtitle | Blu-ray image subtitles (pictures of text) | OCR required |
dvd_subtitle | DVD image subtitles (VobSub) | OCR required |
| No output at all | No subtitle track — subtitles, if visible, are burned into the picture | OCR on the video itself |
If ffprobe lists subrip or ass, extraction is free and takes seconds; if it lists hdmv_pgs_subtitle or dvd_subtitle, the track contains pictures of text, and no tool can turn it into SRT without OCR. That distinction is the single most common point of confusion about MKV subtitles, and it decides everything that follows.
How do I extract SRT subtitles from an MKV with ffmpeg?
For text tracks, ffmpeg is the fastest route and works the same on Mac, Windows, and Linux:
# Extract the first subtitle track as SRT
ffmpeg -i input.mkv -map 0:s:0 subtitles.srt
# Extract the second subtitle track (0:s:1 = second, and so on)
ffmpeg -i input.mkv -map 0:s:1 subtitles.srt
# Pick a track by language instead of position
ffmpeg -i input.mkv -map 0:s:m:language:eng english.srt
# Keep an ASS track in its original format (preserves styling)
ffmpeg -i input.mkv -map 0:s:0 -c copy subtitles.ass
Two things worth knowing. First, converting an ASS track to SRT silently drops all styling — fonts, colors, positioning, karaoke effects — because the SRT format cannot represent them; if you need the styling, extract to .ass instead. Second, -map 0:s:0 counts subtitle streams only, so it is not the same number as the stream index ffprobe prints.
ffmpeg converts between subtitle formats during extraction, which is why ffmpeg -i input.mkv -map 0:s:0 subtitles.srt works on both SRT and ASS tracks — but it cannot convert image-based tracks (PGS/VobSub) to text, and will fail with an encoder error if you try.
How do I extract subtitles with MKVToolNix (mkvextract)?
MKVToolNix (free, mkvtoolnix.download, or brew install mkvtoolnix) extracts tracks bit-exact in their original format. First list the track IDs, then extract by ID:
# List tracks with their IDs
mkvmerge -i input.mkv
# Track ID 0: video (HEVC) / Track ID 1: audio (AAC) / Track ID 2: subtitles (SubRip/SRT)
# Extract track 2 as SRT
mkvextract input.mkv tracks 2:subtitles.srt
# Extract several tracks in one run
mkvextract input.mkv tracks 2:english.srt 3:spanish.srt
One gotcha that trips up nearly everyone searching for this: the MKVToolNix GUI has no extract function — extraction ships only as the command-line tool mkvextract. The GUI covers multiplexing (putting tracks in), editing headers, and splitting files, so looking for an "extract" button inside it comes up empty by design.
The file extension you write must match the track's codec: .srt for SubRip, .ass for ASS/SSA, .sup for PGS, and for VobSub, mkvextract writes an .idx + .sub pair. Which brings us to the case where the extracted file is not text at all.
What if the subtitle track is PGS or VobSub (image-based)?
Blu-ray rips almost always carry hdmv_pgs_subtitle tracks, and DVD rips carry dvd_subtitle (VobSub). These tracks store each subtitle as a rendered picture that the player overlays on the video — there is no text inside them. Extracting gives you a .sup or .idx/.sub file that subtitle editors and video platforms cannot read as text.
Converting PGS or VobSub subtitles to SRT always requires OCR, because the "subtitles" are bitmap images of text, not text. On a Mac, the practical route is to render the track onto the video once with ffmpeg, then run subtitle OCR on the result:
# Burn the image-subtitle track onto the video (one-time re-encode)
ffmpeg -i input.mkv -filter_complex "[0:v][0:s:0]overlay[v]" \
-map "[v]" -map 0:a? -c:a copy burned.mp4
Then import burned.mp4 into GeekLink and run OCR extraction. It detects the subtitle region, reads each frame's text, merges duplicate frames into single cues, and exports a clean, correctly timed SRT — locally on your Mac, with nothing uploaded. The re-encode only needs to be good enough for OCR to read, so the default settings are fine.
What if the MKV has no subtitle track at all (burned-in subtitles)?
This is the most common case with downloaded anime, drama episodes, and re-encoded videos: ffprobe lists no subtitle stream, yet you clearly see subtitles when the video plays. If ffprobe shows no subtitle stream but subtitles are visible during playback, they are burned into the picture itself — no extractor, demuxer, or converter can pull them out, and OCR on the video is the only way.
- Import the MKV into GeekLink on your Mac — no conversion needed, MKV is supported directly.
- Run OCR extraction. It reads the subtitle text from the frames and merges it into timed subtitle lines.
- Export as SRT — or translate first and export a bilingual file.
OCR runs locally and processes a whole batch in one run, so a full season of episodes can be queued at once. The complete walkthrough is here: How to Extract Hardcoded (Burned-In) Subtitles Using OCR; if you are choosing a tool, see Best Tools to Extract Hardcoded Subtitles in 2026. Not sure whether your subtitles are embedded or burned in? The difference is explained in Embedded vs Burned-In Subtitles.
How do you translate the subtitles you extracted?
Extraction is often step one of a localization job. An SRT file extracted from an MKV can be imported straight into GeekLink and translated with AI into 40+ languages, keeping the original timing — no re-transcription needed. Export the result as a translated SRT, a bilingual SRT, or burn the translation into the video. Full workflow: How to Translate Hardcoded Subtitles.
FAQ
How do I extract subtitles from an MKV file?
If the MKV has a text subtitle track, run ffmpeg -i input.mkv -map 0:s:0 subtitles.srt — it finishes in seconds and is free. If the track is image-based (PGS/VobSub) or the subtitles are burned into the picture, there is no text to extract; you need OCR software to read them from the frames.
Can MKVToolNix GUI extract subtitles?
No. The MKVToolNix GUI multiplexes tracks into MKV files but has no extract function. Extraction is done with mkvextract, the command-line tool that installs alongside it: mkvmerge -i input.mkv to find the track ID, then mkvextract input.mkv tracks 2:subtitles.srt.
Can VLC extract subtitles from an MKV?
No. VLC can display and switch between embedded subtitle tracks, but it has no feature to export a track as a subtitle file. Use ffmpeg or mkvextract for text tracks, or OCR for image-based and burned-in subtitles.
Why did my subtitles come out as a .sup or .idx/.sub file instead of SRT?
Because the track is image-based: .sup is Blu-ray PGS and .idx/.sub is DVD VobSub. Both store subtitles as pictures, so extraction preserves the pictures. Converting them to SRT requires OCR — no format converter can do it, because there is no text inside the file to convert.
How do I convert PGS subtitles to SRT on a Mac?
Render the PGS track onto the video with one ffmpeg command (see the guide above), then run GeekLink's subtitle OCR on the result. It reads the subtitle text from the frames and exports a timed SRT, entirely locally on your Mac.