Subtitles & Captioning
Subtitle Edit, Aegisub, SRT / VTT / ASS formats, broadcast CEA-608 / 708, manual subtitle authoring and shaping.
The "type the words by hand, time them by ear, ship a .srt" side of captioning. For AI-driven auto-transcription see Auto Captions (Whisper). For NLE picks see Video NLE Editors. For player-side rendering of subtitles see Media Players. For live STT in apps see Speech & Transcription.
Manual subtitle editors
- ★ Subtitle Edit — GPL OSS, Windows-first (also runs on Mac/Linux via .NET). The best free subtitle editor in 2026: SRT/VTT/ASS/SSA/STL/MCC and 200+ formats, waveform, spell-check, OCR-from-image-subs, integrated Whisper, batch convert. Default for any subtitle workflow that isn't already in an NLE.
- ★ Aegisub — BSD OSS, cross-platform. The standard for
.ass/.ssatypesetting (anime fansubs, karaoke, kinetic typography). Lua/MoonScript automation, video preview, audio waveform timing. Steeper than Subtitle Edit but unmatched for stylized subs. - Subtitle Workshop Classic — free closed Windows; long-running alternative; lighter than Subtitle Edit.
- Jubler — GPL OSS Java cross-platform; older but works.
- Gaupol — GPL OSS Linux/GTK.
- Subtitle Composer (KDE) — GPL OSS; Linux-friendly Aegisub alternative.
In-NLE subtitle tools
- DaVinci Resolve subtitle track — bundled free; auto-transcribe in Studio (paid); timeline-native.
- Premiere Pro Captions panel — bundled; Adobe Sensei auto-transcribe (paid).
- Final Cut Pro Captions — bundled; manual + plugin-based auto.
- Kdenlive subtitle editor — GPL OSS; built-in; Whisper integration since 23.x.
Subtitle file formats
- ★ SRT (
.srt) — the universal lingua franca; plain timecodes + text; no styling. Use this for delivery whenever possible. - ★ WebVTT (
.vtt) — HTML5 video standard; cue settings, basic styling, region anchors. Default for web playback. - ASS / SSA (
.ass) — Aegisub's format; full styling, positioning, karaoke effects. - TTML / IMSC1 — XML-based; broadcast / Netflix delivery.
- SCC / MCC — broadcast closed-caption raw streams (CEA-608 inside).
- STL (EBU) — European broadcast.
- DFXP — TTML variant for accessibility.
- iTunes Timed Text (iTT) — Apple delivery.
Broadcast closed captions
- CEA-608 — legacy NTSC line-21 captions; still required for many US broadcast deliverables.
- CEA-708 — modern digital captions; styling, positioning, multi-language.
- MacCaption (Telestream) — paid; the broadcast closed-caption editor.
- CaptionMaker (Telestream) — paid alternative.
- Subtitle Edit — also reads/writes SCC / MCC; the free path.
Format conversion / scripting
- ★ pysubs2 — Python lib; read/write SRT/ASS/VTT/SubRip/MicroDVD; the scripting default.
- subtitle (npm) — JS parser/generator for VTT, SRT.
- subler / SubtitleEdit CLI — batch operations.
- ffmpeg subtitle filters — burn-in (
-vf subtitles=in.srt), mux as soft subs (-c:s mov_textfor MP4,-c:s srtfor MKV), extract (-map 0:s). - MKVToolNix — see Encoding & Codecs; mux multiple subtitle tracks into
.mkvlosslessly.
OCR for image-based subs (Blu-ray PGS, DVD VobSub)
- ★ Subtitle Edit OCR — uses Tesseract or nOCR; rip image subs to text.
- SubRip — classic Windows OCR for VobSub.
- VobSubOCR — modern fork.
- AVIDemux — extract image subs from DVD/Blu-ray to feed an OCR tool.
Translation & localization
- DeepL — paid free tier; the highest-quality MT for European languages in 2026.
- Google Translate / DeepL inside Subtitle Edit — built-in translate buttons, BYO API key.
- OpenAI / Claude — LLM-translate via API; better tone preservation but slower and pricier per line.
- Memsource / Phrase — paid TMS; for serial localization workflows.
Quality / shaping
- CPS / WPM limits: 17 chars/sec is the Netflix max; aim for 12–15. Subtitle Edit shows live CPS.
- Reading speed: target 160–180 wpm for adult viewers; lower for kids' content.
- Two lines max, ~42 chars per line.
- Subtitle Edit's "Fix common errors" — auto-fixes hyphens, dialog dashes, unbreakable spaces, doubles.
Player-side rendering
- See Media Players:
subtitlesOctopusfor.assrendering in browsers;<track>element for VTT;subtitle(npm) for runtime parsing.
Pick this if…
- Default free subtitle editor: Subtitle Edit. No contest in 2026.
- Stylized / typeset subs (anime, karaoke): Aegisub.
- Already in your NLE: Resolve / Premiere / FCP captions panel.
- Broadcast deliverable (CEA-608/708): Subtitle Edit (free) or MacCaption (paid pro).
- Web delivery: export WebVTT, serve next to the video.
- OCR image subs from a Blu-ray: Subtitle Edit's OCR.
- Scripted batch conversion: pysubs2 + ffmpeg.