converters · · Updated

SRT vs VTT vs ASS — Subtitle Formats Compared

By

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

SRTWebVTTASS
HeadernoneWEBVTT line required[Script Info], [V4+ Styles], [Events] sections
Decimal separatorcomma ,period .period .
Time precisionmillisecondsmillisecondscentiseconds (1/100 s)
Hours in timestampalways two digitsoptional (01.000 is valid)one digit
Cue numbersrequiredoptional identifiersnone
Line break inside a cuenew linenew line\N
Italic / bold<i>, <b>, <u><i>, <b>, <u>{\i1}, {\b1}, {\u1} overrides
Position, colour, fontsnot supported (players vary with <font>)cue settings like line:0 align:start, CSSfull styling, positioning, animation
Speaker labelsplain text<v Asha> voice tagsthe 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 the WEBVTT header, 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