Video OCR
Subtitle Extractor API — OCR + speech transcription in one call
Extract on-screen text and spoken dialogue with per-frame timestamps, exported as SRT, VTT or JSON for subtitling, search and metadata pipelines.
Before & after
See the difference
Speech hidden inside the video becomes a timestamped subtitle file — no manual transcription needed.
00:00:04 / 00:00:18The audio is locked inside the video — no way to search, translate or edit it.
1 00:00:01,120 --> 00:00:03,450 Let’s take a closer look at how the model works. 2 00:00:04,020 --> 00:00:06,980 Transcription runs automatically with per-speaker timestamps. 3 00:00:07,510 --> 00:00:09,900 Export to .srt, .vtt or plain text in 40+ languages.
A timestamped, editable subtitle file — searchable, translatable, ready to burn in.
What it does
Most OCR models are trained on clean documents and fall apart on compressed video frames. Subtitle Extractor is trained on video: it handles overlays, gradients and motion blur, then merges visual OCR with an ASR transcript, deduplicating both and aligning them to the timeline. You get subtitle-ready lines with in/out points, not just raw text.
Full API referenceimport requests
url = "https://api.mlslabs.io/v1/subtitle-extractor/jobs"
resp = requests.post(
url,
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"input": "s3://bucket/movie.mp4",
"output": "s3://bucket/subtitles/",
"formats": ["srt", "json"],
"ocr": True,
"asr": True,
"asr_languages": ["en", "zh"],
},
)
job = resp.json()
print(job["job_id"])Key features
Why teams pick this API
Video-tuned OCR
Detection models trained on compressed video frames — handles overlays, gradients and motion blur.
Speech + text hybrid
Merges ASR transcripts with visual OCR, deduplicating and aligning both to the timeline.
Precise timestamps
Frame-accurate in/out points per line, ready for subtitle editors and downstream localization.
Structured output
SRT, VTT, JSON or sidecar files delivered straight to your storage bucket.
Use cases
Built for real workflows
Distribution subtitles
Generate SRT/VTT files for every episode without manual transcription or alignment.
Searchable archives
Index what is said and what is on screen — dual-layer search for media libraries.
Localization handoff
Hand translators complete, timestamped source files instead of rough drafts.
Pricing
Credit-based pricing
Every request draws from your credit pool. This API bills 30 credits per minute of video.
| Billing unit | Cost in credits | Notes |
|---|---|---|
| Processing time | 30 credits | Per minute of video |
| Failed jobs | 0 credits | Credits auto-refunded |
| Batch processing | Same rate | One queue, per-file callbacks |
Learn
Guides, tutorials & comparisons
Batch Extract Subtitles from Videos
Batch extract hardcoded subtitles from a folder of videos: folder-prefix jobs, per-file SRT output, ...
Read TutorialConvert Video to SRT
Convert video to SRT: extract hardcoded subtitles via OCR or pull embedded soft subtitles, then expo...
Read TutorialExtract Chinese Subtitles from Video
Extract Chinese hardcoded subtitles from video to SRT: zh-specific OCR, simplified/traditional suppo...
Read TutorialHow to Extract Hardcoded Subtitles from Video
Extract hardcoded subtitles from any video: OCR pipeline explained, output formats, language support...
Read TutorialExtract Hardcoded Subtitles in Go
Extract hardcoded subtitles to SRT in Go: OCR every frame, cluster text by timing, and export a clea...
Read TutorialExtract Hardcoded Subtitles in Node.js
Extract hardcoded subtitles to SRT in Node.js: OCR every frame, cluster text by timing, and export a...
ReadHow Hardcoded Subtitle Extraction Works
Extracting text from burned-in subtitles is OCR plus video intelligence: detection, tracking, tempor...
Read GuideSRT vs VTT: Which Subtitle Format Should You Use?
SRT vs WebVTT for subtitles and captions: file structure, styling, positioning, cue settings, browse...
Read GuideVideo OCR vs Speech-to-Text: Extracting Subtitles the Right Way
Speech-to-text listens to audio; video OCR reads text burned into the picture. Learn which one extra...
ReadFAQ
Common questions
Which ASR languages do you support?
English, Chinese and a growing set of major languages. Check the docs for the current list.
Can I get styled output or bounding boxes?
Yes — JSON output includes per-line bounding boxes and style attributes for the OCR track.
What if a subtitle is part of the picture?
It is still extracted by OCR. If you also want it removed, chain with the Subtitle Eraser API.
Do you merge OCR and ASR?
Yes, by default. You can disable either source if you only need one track.
Related APIs