converters · · Updated
SRT vs VTT vs ASS — Subtitle Formats Compared
By Chirag
All three formats store the same core information: when a line appears, when it disappears, and what it says. They differ in the details: how timestamps are written, whether the file can carry styling or position, and which players accept it. Those details decide which format you need, and what a conversion will change.
The same two captions in all three formats
SubRip (.srt):
1
00:00:01,234 --> 00:00:04,567
Where were you
on the night of the 14th?
2
00:00:05,000 --> 00:00:07,250
<i>I was at home.</i>WebVTT (.vtt):
WEBVTT
00:00:01.234 --> 00:00:04.567
Where were you
on the night of the 14th?
00:00:05.000 --> 00:00:07.250
<i>I was at home.</i>Advanced SubStation Alpha (.ass), the event lines only; a real file also has a header and style definitions:
Dialogue: 0,0:00:01.23,0:00:04.56,Default,,0,0,0,,Where were you\Non the night of the 14th?
Dialogue: 0,0:00:05.00,0:00:07.25,Default,,0,0,0,,{\i1}I was at home.{\i0}Differences that matter
| SRT | WebVTT | ASS | |
|---|---|---|---|
| Header | none | WEBVTT line required | [Script Info], [V4+ Styles], [Events] sections |
| Decimal separator | comma , | period . | period . |
| Time precision | milliseconds | milliseconds | centiseconds (1/100 s) |
| Hours in timestamp | always two digits | optional (01.000 is valid) | one digit |
| Cue numbers | required | optional identifiers | none |
| Line break inside a cue | new line | new line | \N |
| Italic / bold | <i>, <b>, <u> | <i>, <b>, <u> | {\i1}, {\b1}, {\u1} overrides |
| Position, colour, fonts | not supported (players vary with <font>) | cue settings like line:0 align:start, CSS | full styling, positioning, animation |
| Speaker labels | plain text | <v Asha> voice tags | the event's Name field |
Which one a destination expects
- HTML5 video (
<video>with a<track>element) only loads WebVTT. If your subtitles are SRT and the player is a web page, that alone is the reason to convert, and why the SRT ⇄ VTT Converter exists. The conversion mostly swaps commas for periods and adds theWEBVTTheader, but doing it by hand across hundreds of cues is where timing typos creep in. - Desktop players and most editing tools read SRT, the lowest common denominator.
- Fansub and anime release workflows use ASS, because only ASS can place a sign translation over the sign on screen, or use a different font for song lyrics.
What converting changes
Every conversion on this site goes through the same intermediate form (start time, end time, text), so it's predictable what carries over.
Timing. SRT and VTT keep milliseconds exactly. ASS stores centiseconds, so converting to ASS drops the last digit: 00:00:01,234 becomes 0:00:01.23 and comes back as 00:00:01,230. A 9 ms difference is invisible to viewers, but it means an SRT → ASS → SRT round trip isn't byte-identical.
Italics, bold and underline carry across all three. <i> in SRT or VTT becomes {\i1}…{\i0} in ASS, and back again. This matters because subtitlers use italics for meaning: an off-screen voice, a phone call, song lyrics.
Everything else ASS can do is dropped going to SRT or VTT: colours, positions, fonts, fades, and karaoke timing. The SRT ⇄ ASS Converter and VTT ⇄ ASS Converter write one plain Default style (Arial, size 20, white text with an outline). Treat the ASS output as a starting point you restyle in an editor such as Aegisub, not as a finished styled file.
VTT-only markup doesn't survive either. Cue settings like line:0 align:start are dropped. A voice tag <v Asha>Hi there becomes Asha: Hi there in SRT, the usual convention for speaker labels. Class spans (<c.yellow>), language tags and karaoke timestamps are unwrapped to plain text. NOTE comments and STYLE blocks in a VTT file are skipped rather than treated as broken cues.
Numbering is regenerated. SRT output is always numbered 1, 2, 3… in order, whatever numbers or identifiers the source had.
Getting just the text
For a transcript, a blog post, or a search index, the SRT ⇄ Text, VTT ⇄ Text and ASS ⇄ Text converters produce a readable list with each cue's timing in brackets:
[00:00:01,234 --> 00:00:04,567]
Where were you
on the night of the 14th?Because the brackets keep the timing, the transcript converts back into a valid subtitle file after you've corrected the wording. If you paste text without any timestamps, blocks are spaced three seconds apart so the result still plays; you'd then fix the timing in a subtitle editor.
For translating or bulk-editing captions in a spreadsheet instead, see editing subtitles in Excel or CSV. All of these converters run in your browser, so unreleased video transcripts aren't uploaded anywhere.
Related guides
- How to Edit Subtitles in Excel or CSV and Convert Back · A practical workflow for translating or reviewing subtitles in a spreadsheet: the column layout, how to make a second-language file, keeping timestamps intact, and when to pick .xlsx over CSV.
- How Accurate Is Browser OCR? 14 Test Images, Measured · The same invoice line rendered 14 ways (small text, blur, tilt, low contrast, a busy background, JPEG artifacts, Hindi, two columns) and run through this site's OCR, with the accuracy of each and the three fixes that took the average from 88.5% to 99.5%.
- How to Flatten Nested JSON and Convert JSONL Files · How dot-notation flattening turns nested objects and arrays into spreadsheet columns, what survives the trip back, and how JSON Lines differs from a normal JSON file.