Online Subtitle Converter
& Validator.
Convert SRT ↔ WebVTT ↔ ASS, and Catch What the Player Will Reject
Subtitles are the most fragile file in any video pipeline: one malformed timestamp, one overlapping cue, one missing WEBVTT header, and the caption track silently disappears in production. Paste or drop an .srt, .vtt or .ass file and get all three formats back — plus a validation report that flags what players actually choke on.
The conversion runs entirely client-side / in your browser. Your subtitle file is not uploaded anywhere — nothing is sent to any server, which matters when the captions belong to a not-yet-released episode. Works for embargoes, client material and anything else you would rather not paste into a random online converter.
SRT / WebVTT / ASS converter
Format is auto-detected. All three outputs are generated on every run, so you can grab whichever one the platform wants.
Drop .srt / .vtt / .ass file here or click to browse
…or paste the subtitle text belowFormat Cheat Sheet — and Where Each One Breaks
SRT (SubRip) is the lingua franca of subtitle delivery: a number, a 00:01:23,456 --> timestamp line with a comma, and plain text. Its weakness is what it does not have: no styling model, single-digit-millisecond timestamps, and no standard place for language. YouTube, most QA tools and almost every human workflow accept it.
WebVTT is the browser-native caption format: the HTML5 <track> element and every MSE-based player (including hls.js, Shaka and the Bradmax player) consume it. It differs from SRT in three traps the converter fixes for you: the mandatory WEBVTT header, dots instead of commas in timestamps, and cue identifiers that may be omitted. Cue settings (align:, line:) survive conversion in the VTT output.
ASS (Advanced Substation Alpha) is the styling powerhouse used by anime fansubs and burned-in caption pipelines: per-style fonts, karaoke, positioning via override blocks like {\an8}. Timestamps use h:mm:ss.cc (centiseconds) — the converter quantizes millisecond sources down and warns you when two cues collapse onto the same centisecond boundary.
What the validator checks
- Structural errors: missing
WEBVTTheader, missing-->arrow, malformed timestamps, ASS[Events]section without aFormat:line. - Timing errors: end time before start time, zero/negative cue duration, cues that overlap the previous cue (players render both at once).
- Ordering: timestamps not monotonically increasing — strict WebVTT parsers and some HLS authoring tools care.
- Delivery sanity: cue count, total dialogue duration, and coverage percentage against the subtitle's own span.
Captions belong in the player, not in a sidecar mess?
The Bradmax player ships multi-track WebVTT subtitles with selectable language, and they ride along in your HLS manifests as media segments. Convert once, attach, and every device gets the same captions.