SRT vs VTT: the complete comparison
SRT and WebVTT store the same thing — timed lines of text — but they are not interchangeable. The difference decides whether your subtitles load in a web player or a smart TV. Here is the full comparison.
The short version: WebVTT is for the web (the HTML5 <track> element accepts only
VTT), and SRT is for everything else (desktop players, TVs, media servers). They share a cue model,
so converting between them is lossless in one direction and lossy in the other. The detail is below.
Feature comparison
| Feature | SRT (SubRip) | WebVTT |
|---|---|---|
| File extension | .srt | .vtt |
| Formal specification | None (de-facto convention) | W3C standard |
| Header line | None | WEBVTT required |
| Millisecond separator | Comma , | Period . |
| Optional hours field | No (always HH:MM:SS) | Yes (MM:SS.mmm allowed) |
| Character encoding | Any (UTF-8 recommended; often legacy) | UTF-8 only |
| Cue identifiers | Sequential numbers (required) | Optional names or numbers |
| Positioning | No (a few player extensions) | Yes — line, position, size, align |
| Styling | <b> <i> <u>, partial <font> | CSS via STYLE + ::cue, classes |
| Comments | No | Yes — NOTE blocks |
| Voices / speakers | No | Yes — <v Name> |
| Karaoke / word timing | No | Yes — inline timestamp tags |
| Chapters & metadata | No | Yes — kind="chapters"/"metadata" |
HTML5 <track> support | No | Yes (the only accepted format) |
| Desktop players (VLC, MPV) | Yes (universal) | Yes (most) |
| Smart TVs / media servers | Yes (universal) | Partial |
The same cue, in both formats
SubRip (.srt) WebVTT (.vtt)
WEBVTT
1 1
00:01:14,800 --> 00:01:17,200 00:01:14.800 --> 00:01:17.200
<i>Are you there?</i> <i>Are you there?</i>
The visible differences are the header and the comma-versus-period separator. The invisible difference is the rule
set: VTT requires UTF-8 and parses the text as markup, so a stray & or < must be
escaped.
Which conversion loses data?
SRT → VTT is lossless. Everything an SRT file can express, a VTT file can too, so converting SRT to VTT only adds the header and changes the separator.
VTT → SRT can be lossy, but only if the VTT used features SRT lacks. Cue settings (positioning),
STYLE blocks, NOTE comments and class spans have no SRT equivalent and are dropped. Plain
timed dialogue converts perfectly. The VTT to SRT converter lists exactly what it removed
rather than discarding it quietly.
Which one should you use?
Use WebVTT when:
- You're adding captions to an HTML5
<video>with<track>. - You're using a web player — Video.js, Plyr, hls.js — or a course/LMS platform.
- You need positioning, styling, speaker labels or chapters.
Use SRT when:
- You're playing files in VLC, MPV, MPC-HC or on a smart TV.
- You're using a media server (Plex, Jellyfin, Emby).
- You're handing the file to an editor or muxing it into an MKV/MP4.
- You want the widest possible compatibility and don't need styling.
Is renaming the file enough?
No. Changing .srt to .vtt (or back) leaves the contents wrong — a renamed SRT has no
WEBVTT header and uses commas, so a web player rejects it; a renamed VTT keeps its header and periods,
which confuse SRT players. Always convert the contents. Both directions are instant and run entirely in your browser:
SRT to VTT and VTT to SRT.