TL;DR: A video's subtitles are one of three kinds, and each needs a different method. External — a separate .srt/.ass file you already have. Embedded (soft) — a subtitle track inside the video file (common in MKV); pull it out with mkvextract or Subtitle Edit. Burned-in (hardcoded) — the text is painted into the video picture, with no track to extract, so you need OCR that reads the frames (GeekLink does this on Mac). The 5-second test: try to turn the subtitles off in your player. If they disappear, they're a separate track. If they stay on screen no matter what, they're burned into the picture.
If you tried to "extract subtitles" and your tool found nothing — or found something you couldn't use — it's almost always because you're dealing with a different kind of subtitle than the tool expects. Sort out which of the three you have first, and the right method is obvious.
How do I tell which kind I have?
The toggle test. Open the video in VLC (or any player) and look for the subtitle on/off menu. Can you turn the subtitles off?
- They disappear → the subtitles are a separate track (embedded), or an external file. Extractable as text or image.
- They stay stuck on screen no matter what you do → the subtitles are burned into the picture (hardcoded). There's no track — you'll need OCR.
The ffmpeg clue. Run ffmpeg -i yourvideo.mp4. If it lists a Subtitle: stream, you have an embedded track. If it lists none but you can clearly see subtitles in the video, they're burned into the picture (or a closed-caption CC stream that ffmpeg didn't map) — and that's why "extract subtitles" commands return nothing.
Type 1 — External subtitles (.srt / .ass)
The easy case: the subtitles are already a separate file sitting next to the video, or downloadable from a subtitle site. There's nothing to extract — just open or edit the file. If all you need is to translate it into another language, import the .srt into a translator and keep the timings.
Type 2 — Embedded / soft subtitle tracks (MKV, some MP4)
The subtitles are a stream inside the container, so they can be pulled out without any quality loss. There are two sub-cases:
- Text tracks (SRT/ASS inside an MKV) → use mkvextract (part of MKVToolNix). It pulls the text out directly as a subtitle file.
- Image tracks (DVD VobSub, Blu-ray PGS/SUP) → these are pictures of the text, so run them through Subtitle Edit's OCR to convert to SRT.
These track-based cases are well served by the tools above. (GeekLink doesn't handle subtitle tracks — it reads text off the video picture, which is a different job; see Type 3.)
Type 3 — Burned-in / hardcoded subtitles (the hard case)
The words are painted permanently into every frame — no track, no toggle. Track-based tools (mkvextract, and Subtitle Edit's track OCR) find nothing to grab, because there's no subtitle stream to point them at. The only way to get the text back is OCR that reads the video picture frame by frame.
- On Windows: VideoSubFinder extracts the subtitle frames, then Subtitle Edit OCRs the images — a two-step process.
- On Mac: GeekLink does it in one pass. You draw a box over the subtitle area, and it reads the burned-in text into an editable, time-synced SRT — a whole folder at once, locally, free.
Quick decision table
| Your situation | Kind | Do this |
|---|---|---|
| A .srt file sits next to the video | External | Just open or translate it |
VLC lets you turn subtitles off; ffmpeg shows a Subtitle: stream | Embedded (text) | mkvextract (MKVToolNix) |
| Turn-off works, but it's a DVD/Blu-ray | Embedded (image) | Subtitle Edit OCR |
| Subtitles won't turn off — stuck in the picture | Burned-in | Frame OCR — GeekLink (Mac) |
Frequently Asked Questions
How do I know if my subtitles are hardcoded?
If you can't turn them off in your player and they stay stuck on screen, they're burned-in (hardcoded). If a subtitle on/off toggle removes them, they're a separate track.
Can you turn off burned-in subtitles?
No — they're part of the video image, so no player can hide them. You can't remove them, but you can OCR the text back out into an editable SRT.
Why does ffmpeg say "no subtitle track"?
Because the subtitles aren't a track — they're burned into the picture (or a closed-caption CC stream ffmpeg didn't map). Burned-in text needs OCR of the video frames, not track extraction.
What's the difference between soft subs and hard subs?
Soft subs are a separate, toggleable track (extractable as text or image). Hard subs — hardcoded / burned-in — are painted into the picture and need OCR to recover.
Is there a Mac tool for burned-in subtitles?
Yes — GeekLink OCRs burned-in subtitles into an editable SRT natively on Apple Silicon Macs. It's a free direct download from geeklink.dev (not the Mac App Store), and no account is required.
Related Articles
Disclosure: GeekLink is our own product, built for burned-in (hardcoded) subtitle OCR on Mac. For embedded subtitle tracks we point you to mkvextract and Subtitle Edit, which are the right tools for that job.