How to extract embedded subtitles from a video as srt
- Step 1Drop your video onto the extractor — Drag an
.mp4,.mkv,.mov,.webm,.avi,.m4v, or.tsfile onto the tool above. Processing is one file at a time. FFmpeg.wasm loads in your browser — the file is read locally and never uploaded. - Step 2Let JAD scan the subtitle streams — There are no settings to configure — the panel reads No options — JAD reads the embedded tracks and exports them. Internally JAD tries stream maps
0:s:0through0:s:4, so it captures up to five text subtitle tracks in one pass. - Step 3JAD converts each text track to SRT — Every text track (
mov_text,ASS/SSA,WebVTT,SubRip) is converted to SubRip with-c:s srt. Timing is preserved exactly; ASS/SSA styling (fonts, positions, colours) is flattened to plain SRT text because SubRip has no styling model. - Step 4Download a single .srt or a ZIP — If the file has one text track you get a single
<name>.srt. If it has several, JAD bundles them into<name>-subtitles.zipcontaining<name>-track-1.srt,<name>-track-2.srt, etc. — extract the ZIP to get each language. - Step 5Identify which track is which language — JAD numbers tracks by stream order (track-1 =
0:s:0). SubRip has no language header, so confirm language by opening each file — the first few cues make it obvious. Renametrack-1.srtto e.g.movie.en.srtfor player auto-detection. - Step 6Edit, translate, or burn the SRT back in — Open the
.srtin any text editor or CAT tool, or feed it to the subtitle burner to hardcode captions. The extractor only reads subtitles out — it never touches the original video file.
What gets extracted vs what gets skipped
JAD maps 0:s:i and converts with -c:s srt. Text codecs convert cleanly to SubRip; bitmap (picture) codecs cannot become text and are skipped on that track.
| Subtitle codec in the file | Type | Result here | Why |
|---|---|---|---|
mov_text (MP4/MOV) | Text | Extracted as .srt | Converts directly to SubRip; the most common MP4 caption format |
subrip / srt (MKV) | Text | Extracted as .srt | Already SubRip — passed through the SRT encoder |
ass / ssa (MKV, fansubs) | Text | Extracted as .srt (styling lost) | Dialogue text and timing convert; fonts/positions/karaoke have no SubRip equivalent |
webvtt (WebM, MP4) | Text | Extracted as .srt | WebVTT cues convert to SubRip timing + text |
hdmv_pgs_subtitle (PGS, Blu-ray) | Bitmap | Skipped | Picture-based; -c:s srt cannot encode an image to text — needs OCR |
dvd_subtitle (VobSub) | Bitmap | Skipped | Picture-based; same OCR limitation |
dvb_subtitle (broadcast) | Bitmap | Skipped | Picture-based broadcast subtitles cannot convert to text |
| Burned-in (hardsub) text | Pixels | Not extractable | Part of the video frames, not a subtitle stream — no 0:s track exists |
Output shape by track count
JAD checks up to five text streams (0:s:0–0:s:4). Output type depends on how many produced a non-empty SRT.
| Text tracks found | Download | File names |
|---|---|---|
| 1 | Single .srt | <name>.srt |
| 2–5 | ZIP | <name>-subtitles.zip → <name>-track-1.srt … <name>-track-N.srt |
| 0 (text) | Error | No text subtitle tracks found in this video. |
| 6+ | First 5 only | Tracks beyond index 4 are not scanned in this pass |
Tier limits (video family)
Subtitle extraction is bounded only by input file size and how many files you can queue — there is no duration cap.
| Tier | Max file size | Files at once |
|---|---|---|
| Free | 1 GB | 1 |
| Pro | 10 GB | 5 |
| Pro-media | 100 GB | 50 |
| Developer | 100 GB | Unlimited |
Cookbook
Real extraction scenarios. The code blocks show what you drop in and what you get back.
MKV with three language tracks → ZIP of three SRTs
A downloaded MKV carries English, Spanish, and French subtitle streams. JAD finds three text tracks and bundles them, because returning three separate downloads would be awkward.
Input: episode.mkv Stream 0:s:0 subrip (eng) Stream 0:s:1 subrip (spa) Stream 0:s:2 subrip (fre) Output: episode-subtitles.zip episode-track-1.srt ← eng episode-track-2.srt ← spa episode-track-3.srt ← fre
MP4 with one mov_text caption → single SRT
A delivery MP4 has a single embedded caption stream in QuickTime mov_text format. One track in means one .srt out — no ZIP.
Input: interview.mp4 Stream 0:s:0 mov_text (eng) Output: interview.srt First cues: 1 00:00:01,200 --> 00:00:04,000 Thanks for joining us today.
ASS fansub track flattened to plain SRT
An MKV with an ASS dialogue track converts: the words and timing survive, but the styling override tags do not, because SubRip has no styling layer.
Source (ASS line):
Dialogue: 0,0:00:05.00,0:00:07.50,Default,,0,0,0,,{\i1}Look out!{\i0}
Extracted (SRT):
1
00:00:05,000 --> 00:00:07,500
Look out!
Note: the {\i1}...{\i0} italics tag is dropped — SRT keeps text + timing only.Blu-ray PGS track produces an error, not an SRT
A remux MKV whose only subtitle stream is PGS (image-based). FFmpeg cannot encode a picture to SubRip text, so the map fails and no track is produced.
Input: movie.mkv
Stream 0:s:0 hdmv_pgs_subtitle (eng) ← bitmap
Result: No text subtitle tracks found in this video.
Fix: run the PGS through an OCR subtitle tool (e.g. Subtitle Edit),
then bring the resulting .srt to the subtitle burner if needed.Confirming track language after extraction
SubRip has no language tag, so JAD numbers by stream order. Open each file to label it, then rename for player auto-detection.
episode-subtitles.zip → extract: episode-track-1.srt first cue: "Previously on..." → English episode-track-2.srt first cue: "Anteriormente en..." → Spanish episode-track-3.srt first cue: "Précédemment dans..." → French Rename for players: episode.en.srt / episode.es.srt / episode.fr.srt
Edge cases and what actually happens
File has only bitmap (PGS / VobSub / DVB) subtitles
No text tracksIf every subtitle stream is image-based, the -c:s srt conversion fails for each one and JAD returns No text subtitle tracks found in this video. Bitmap subtitles are pictures of text, not text — they require OCR. Run them through a desktop OCR subtitle tool first.
Subtitles are burned into the picture
Not extractableHardsubbed (burned-in) captions are pixels in the video frames, not a separate subtitle stream. There is no 0:s track to map, so nothing extracts. The only way back to text is OCR on rendered frames — outside this tool's scope. If you want to ADD burned-in captions instead, use the subtitle burner.
ASS/SSA styling is lost in the SRT
By designFonts, colours, positions, and karaoke timing in ASS/SSA have no equivalent in SubRip, so they are dropped during the -c:s srt conversion. Dialogue text and cue timing are preserved exactly. If you need the styling, keep the source ASS file — the extractor always produces SRT.
More than five subtitle tracks
First 5 onlyThe extractor scans 0:s:0 through 0:s:4 (five tracks). A container with six or more subtitle streams returns only the first five. This is rare; most files have one to three text tracks.
Extracted SRT shows garbled accented characters
Source encodingSome older embedded subtitle streams were authored in Windows-1252 / Latin-1 rather than UTF-8. JAD writes the SRT exactly as FFmpeg decodes the stream; there is no force-UTF-8 option in this tool. If accents look wrong, re-save the .srt as UTF-8 in a text editor, or open it in a subtitle editor and re-export.
Video has no subtitle stream at all
No text tracksMany camera files, screen recordings, and social downloads carry zero subtitle streams. The first 0:s:0 map fails immediately and you get No text subtitle tracks found in this video. There is nothing to recover — the captions were never embedded.
Closed captions are embedded in the video stream (CEA-608/708)
Usually skippedCEA-608/708 captions live in the video stream's user data, not as a container subtitle stream, so the 0:s map typically does not see them. This tool extracts container-level soft subtitle tracks. If your file is a true MP4/MKV soft caption (mov_text/subrip) it extracts; raw embedded EIA-608 lines may not.
Empty SRT produced for a track
SkippedIf a mapped track converts but the resulting file is zero bytes (e.g. a placeholder stream with no cues), JAD skips it and does not include it in the output. You will only get SRTs for tracks that contained actual subtitle text.
File larger than your tier's limit
413 Too largeFree tier caps at 1 GB per file, Pro 10 GB, Pro-media and Developer 100 GB. A 4K remux MKV can exceed 1 GB easily even though the subtitle text is tiny — the whole container still has to be read into the browser. Upgrade the tier or remux to a smaller container first.
Frequently asked questions
Does the extractor let me pick which track to extract?
No — and it does not need to. There are no options in this tool; JAD automatically scans up to five subtitle streams and exports every text track it finds. One track gives you a single .srt; multiple tracks give you a ZIP with one .srt per track, numbered by stream order (track-1 = first stream).
What format does the output come in?
Always SubRip (.srt). Internally JAD runs -c:s srt, so even if the source track is mov_text, ASS/SSA, or WebVTT, the file you download is plain-text SubRip — the most widely supported subtitle format for editing, translation, and re-importing.
Can it export ASS or VTT instead of SRT?
Not in this tool. The extractor is fixed to SRT output to give you one universally-editable text format. If you specifically need to keep ASS styling, retain the original ASS file before extraction — the conversion to SRT necessarily flattens styling.
Will it extract subtitles burned into the video?
No. Burned-in (hardsubbed) captions are pixels in the frames, not a subtitle stream, so there is nothing to demux. Only container-level soft subtitle tracks are extractable. If you want to burn an existing SRT permanently into a video, use the subtitle burner.
Why did my Blu-ray rip return 'no text tracks'?
Blu-ray subtitles are usually PGS (image-based). FFmpeg cannot convert a picture to SubRip text, so those tracks are skipped, and if every track is bitmap you get the no-text error. Run the PGS through an OCR subtitle tool to get an editable SRT.
How does the multi-track ZIP name the files?
<name>-subtitles.zip containing <name>-track-1.srt, <name>-track-2.srt, and so on, numbered by stream order. SubRip carries no language tag, so JAD cannot label them by language — open each one to identify it, then rename (e.g. movie.en.srt).
Does extracting subtitles re-encode my video?
No. Extraction is a demux-and-text-convert operation — the video and audio streams are never touched, and no new video file is produced. That is why even a multi-gigabyte file extracts in seconds.
Is my video uploaded anywhere?
No. The extractor runs entirely in your browser via FFmpeg.wasm. The file is read locally and the SRT is generated on your machine — nothing is sent to a server. A confidential cut, screener, or unreleased episode stays private.
What input formats does it accept?
MP4, MKV, MOV, WebM, AVI, M4V, and TS containers. The same 0:s subtitle-stream map works across all of them. MKV typically carries the most subtitle tracks; MP4/MOV usually carry one mov_text track.
Why do the accented characters look wrong in my SRT?
The embedded track was probably authored in Windows-1252 / Latin-1, not UTF-8, and JAD writes it out as FFmpeg decodes it. There is no force-UTF-8 toggle here. Open the .srt in a text editor or subtitle editor and re-save it as UTF-8.
How big a file can I extract from?
Free tier handles up to 1 GB per file, Pro 10 GB, Pro-media and Developer 100 GB. There is no duration limit — only the file size and how many files you queue at once (Free 1, Pro 5, Pro-media 50, Developer unlimited).
What do I do with the SRT after extracting it?
Edit it in any text editor, translate it in a CAT tool, or feed it to a player as a sidecar file. To hardcode it permanently into the picture, use the subtitle burner. To pull other embedded data, see the audio-track extractor and chapter extractor.
Privacy first
Every JAD Video tool runs entirely in your browser via WebCodecs and FFmpeg (WebAssembly). Your video files never leave your device — verified by zero outbound network requests during processing.