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.

Reference · updated June 2026

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

FeatureSRT (SubRip)WebVTT
File extension.srt.vtt
Formal specificationNone (de-facto convention)W3C standard
Header lineNoneWEBVTT required
Millisecond separatorComma ,Period .
Optional hours fieldNo (always HH:MM:SS)Yes (MM:SS.mmm allowed)
Character encodingAny (UTF-8 recommended; often legacy)UTF-8 only
Cue identifiersSequential numbers (required)Optional names or numbers
PositioningNo (a few player extensions)Yes — line, position, size, align
Styling<b> <i> <u>, partial <font>CSS via STYLE + ::cue, classes
CommentsNoYes — NOTE blocks
Voices / speakersNoYes — <v Name>
Karaoke / word timingNoYes — inline timestamp tags
Chapters & metadataNoYes — kind="chapters"/"metadata"
HTML5 <track> supportNoYes (the only accepted format)
Desktop players (VLC, MPV)Yes (universal)Yes (most)
Smart TVs / media serversYes (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.

Tools for this