Skip to content

SRT vs VTT: which subtitle format do you need?

SRT and VTT are both plain-text subtitle formats. SRT is the most widely accepted upload format — YouTube, Vimeo and desktop editors all take it. VTT (WebVTT) is the web format the HTML5 <track> element requires, and adds positioning and styling. On the page, the visible differences are that VTT starts with a WEBVTT line and uses a period, not a comma, before the milliseconds.

They are close enough that converting between them takes milliseconds, and different enough that handing a player the wrong one shows nothing at all.

What each one looks like

An SRT cue:

1
00:00:01,000 --> 00:00:04,000
This is the first subtitle.

The same cue in VTT:

WEBVTT

00:00:01.000 --> 00:00:04.000
This is the first subtitle.

Three differences are visible immediately:

  1. VTT opens with a WEBVTT line. It is required — a file without it is not valid VTT.
  2. SRT numbers each cue. VTT does not (though it allows an optional identifier).
  3. SRT separates seconds from milliseconds with a comma. VTT uses a period.

That comma is the single most common reason a conversion fails. A parser expecting one and given the other usually rejects the whole file rather than the one line.

What can VTT do that SRT cannot?

VTT was designed for the web, so it carries presentation information SRT has no syntax for:

  • Cue settings — align:start, position:10%, line:0 and similar, appended to the timestamp line to control where the text sits.
  • STYLE blocks — actual CSS applied to cues.
  • REGION blocks — defined areas of the video for cues to appear in.
  • NOTE — comments, ignored by players.
  • Optional hours — 01:30.500 is valid VTT for one minute thirty. SRT always wants the full HH:MM:SS,mmm.

Converting SRT → VTT is therefore lossless: you are moving to the more expressive format. Converting VTT → SRT drops anything in that list, because SRT has nowhere to put it. Timings and text always survive; positioning may not.

Which one do you actually need?

Use SRT when you are uploading to YouTube, Vimeo or a social platform, or importing into Premiere, Final Cut or DaVinci Resolve. SRT is the closest thing subtitles have to a universal format.

Use VTT when you are putting a video on your own website. The HTML5 <track> element only accepts VTT:

<video controls>
  <source src="video.mp4" type="video/mp4" />
  <track src="captions.vtt" kind="captions" srclang="en" label="English" default />
</video>

Point that at an .srt file and the browser will show no captions and no error. It simply does nothing, which is why this catches people out.

A note on encoding

Both formats are plain text, and both should be saved as UTF-8. Older SRT files are sometimes Windows-1252 or Latin-1, which is invisible until an accented character or a non-Latin script turns into mojibake. If subtitles look right in one player and corrupted in another, encoding is the first thing to check.

A byte-order mark at the start of the file is tolerated by most parsers but is not required, and a few strict players choke on it.

How do you convert between them?

Because the difference is a header, a separator and some optional settings, conversion is text processing — there is no reason to upload a file to a server to do it. The SRT to VTT and VTT to SRT converters on this site run entirely in your browser: nothing is transmitted, and there is no account or file size limit.

Other formats you may run into

  • ASS / SSA — Advanced SubStation Alpha. Far richer styling than either: fonts, colours, outlines, positioning, animation. Common in anime fansubs and used internally by rendering pipelines that burn captions in.
  • SBV — YouTube’s own older format. Similar to SRT with a different timestamp style.
  • TTML / DFXP — XML-based, used in broadcast and streaming delivery.

For everyday work, SRT and VTT cover essentially everything, and converting between them is a solved problem.

Caption your next video with Viten

Automatic captions, AI voiceover and audio clean-up. Free to start, no watermark.