SRT vs VTT: Every Difference That Actually Matters
SRT vs VTT compared: syntax, styling support, player compatibility with HTML5, YouTube, Vimeo, and VLC, plus when to use each format.
The Short Answer
SRT and VTT files contain nearly identical information: a sequence of text blocks, each with a start time, end time, and caption text. The practical differences come down to three things: header syntax, how milliseconds are delimited, and styling capabilities.
Use SRT when you need maximum tool compatibility: most editors, platforms, and broadcast workflows accept it without friction.
Use VTT when you’re embedding video in a webpage or need to express caption positioning, alignment, or region layout.
Syntax Side by Side
Both formats are plain text. Here’s the same cue in each:
SRT:
1
00:00:04,200 --> 00:00:07,800
The quick brown fox jumps over the lazy dog.
VTT:
WEBVTT
00:00:04.200 --> 00:00:07.800
The quick brown fox jumps over the lazy dog.
Three structural differences:
- Header. Every VTT file must start with
WEBVTTon the first line, optionally followed by a space and a description. SRT has no header. - Millisecond delimiter. SRT uses a comma (
00:00:04,200). VTT uses a period (00:00:04.200). This single character is the most common cause of parser errors when you naively rename one file extension to the other. - Cue identifiers. SRT requires a sequential integer before each cue. VTT makes cue IDs optional: you can omit them entirely or use arbitrary strings like
introorchapter-1.
These differences are small enough that many parsers handle both tolerantly, but a strict VTT parser will reject a file with SRT-style timestamps. If you need to convert between the two, our SRT to VTT converter handles the delimiter swap and header insertion without touching the text content.
Styling and Positioning
This is where the formats actually diverge.
SRT has no official styling specification. Many players will render <b>, <i>, and <u> tags embedded in cue text, but this is player-specific behavior, not part of the format standard. If you distribute SRT widely, assume inline tags will display as literal characters on some platforms.
VTT includes a proper cue settings syntax added directly to the timestamp line:
WEBVTT
00:00:10.000 --> 00:00:14.000 position:80% align:right size:40%
Text that appears on the right side of the frame.
00:00:15.000 --> 00:00:19.000 line:90%
Text pinned near the bottom.
Available cue settings:
position: horizontal position of the cue boxalign: text alignment within the cue box (start,center,end,left,right)size: width of the cue box as a percentageline: vertical position (percentage or line number)vertical: for vertical text in CJK scripts (rlorlr)
VTT also supports inline <c> tags for CSS class-based styling via ::cue rules in your stylesheet, voice spans (<v Speaker Name>), and chapter cue blocks for building interactive chapter menus in HTML5 players.
In practice: if your captions need speaker labels, positioned text (dialogue at top for sign-language accommodation, say), or you’re building a custom web player, then VTT is the only format that carries those instructions natively. SRT cannot express them.
Player and Platform Compatibility
HTML5 <video> and <track>
The browser <track> element officially requires VTT. This is not a preference. The spec mandates it:
<video src="film.mp4">
<track kind="subtitles" src="subs.vtt" srclang="en" label="English">
</video>
Feeding an SRT file to <track> will either silently fail or display nothing, depending on the browser. If you’re building a web player, VTT is non-negotiable.
YouTube
YouTube accepts both SRT and VTT uploads, plus SBV and TTML. It strips cue settings on import and applies its own styling engine, so positioning metadata in VTT files is discarded. For YouTube, the format choice is irrelevant to the viewer. Use whichever your workflow produces.
Vimeo
Vimeo accepts SRT and VTT for caption upload. As with YouTube, advanced VTT cue settings are not honored. Vimeo renders captions in its own style. Either format works for a straight upload.
VLC
VLC has native SRT support and has rendered it reliably for years. VTT support was added later and works for basic cues, but whether position/align cue settings render correctly varies by VLC version, so preview in your target version before relying on them.
Broadcast and OTT Delivery
Professional broadcast delivery typically uses DFXP/IMSC or EBU-TT, neither SRT nor VTT. For OTT platforms that accept subtitle uploads directly, requirements vary by platform; check the current submission spec before delivery rather than assuming either format is accepted.
Encoding
Both are plain text. VTT officially mandates UTF-8. SRT is ambiguous in its original spec, and legacy SRT files are commonly found in Windows-1252 or ISO-8859-1, which produces garbled output for non-Latin scripts. If you’re ingesting SRT files containing Arabic, Chinese, Cyrillic, or other non-ASCII characters, verify the encoding before processing. When generating SRT files from scratch, always write UTF-8.
File Size
Negligible. The WEBVTT header and optional cue IDs add a few bytes. For a typical 90-minute subtitle file the difference is under 1 KB.
When to Use Each
| Situation | Format |
|---|---|
Embedding in HTML5 <video> | VTT |
| Uploading to YouTube | Either |
| Uploading to Vimeo | Either |
| Maximum editor and tool compatibility | SRT |
| Caption positioning or speaker labels | VTT |
| Broadcast / OTT delivery | Check platform spec |
| Exporting from transcription tools | Either; most export both |
Converting Between Them
The conversion is mechanical: swap the millisecond delimiter, add or strip the WEBVTT header, add or strip cue IDs. Any subtitle editor handles this without data loss. One exception: if your VTT file uses cue settings (position, align, etc.) and you’re converting to SRT, those settings are dropped, because SRT has nowhere to store them.
Our SRT to VTT converter and SRT translator handle both directions. If your timestamps are drifting (a common issue when subtitle files come from a different cut of the video), the subtitle shifter lets you adjust all cues by a fixed offset before you convert.
For auto-generated subtitles as a starting point, tools like Happy Scribe export both SRT and VTT at download time, so you pick format after the transcript is ready rather than converting afterward. For a broader look at what’s available, the AI subtitle translators roundup covers the main options.
Disclosure: the Happy Scribe link above is an affiliate link. If you subscribe through it we earn a commission at no extra cost to you. It doesn’t change our recommendations.