Subtitle formats

SRT vs VTT

Last updated: 2026-06-11

The core difference: SRT timecodes use a comma (00:00:01,000) and the file stores only numbered cues with text, while WebVTT timecodes use a dot (00:00:01.000), must start with the line WEBVTT, and add positioning, comments, and CSS styling. Both are plain UTF-8 text. Choose SRT for the widest desktop-player support; choose WebVTT for HTML5 video and any caption that needs placement or color.

Neither format is "newer and better" across the board. SRT wins on universal compatibility and simplicity; WebVTT wins on web playback and styling. The right pick depends on where the file will be played.

Side-by-side comparison

FeatureSRTWebVTT
Extension.srt.vtt
Header lineNoneWEBVTT
Timecode separator, comma. dot
Timecode example00:01:14,50000:01:14.500
Cue indexRequired integerOptional identifier
PositioningNoYes (cue settings)
CSS stylingNoYes (STYLE / ::cue)
CommentsNoNOTE
HTML5 <track>Not nativeNative
EncodingUTF-8 (no BOM)UTF-8 (required)

Timecode punctuation: comma vs dot

The single most important practical difference is the millisecond separator. SRT writes 00:00:01,000 with a comma; WebVTT writes 00:00:01.000 with a dot. Mixing them is the top cause of a file refusing to parse. When you convert SRT to VTT you must replace every comma in a timecode line with a dot, and vice versa. Read subtitle timecodes explained for the full timing model.

Styling and metadata

WebVTT carries far more than text. Cue settings place captions; a STYLE block applies CSS through ::cue; NOTE lines hold comments; and cue identifiers let scripts target individual cues. SRT, by contrast, stores only the index, timecode, and text — a few players read inline <i> <b> <u> tags, but that is the limit. If you need colored or positioned captions, the choice is made for you: use WebVTT.

Player and browser support

SRT is read by nearly every desktop and TV media player — VLC, MPC, Kodi, and most smart TVs load a sidecar .srt automatically. WebVTT is the format browsers expect for the HTML5 <track> element, so Chrome, Firefox, Safari, and Edge play it without conversion. Streaming protocols like HLS reference WebVTT segments. For a file a person downloads and opens in a desktop app, SRT is the safest default; for video on a web page, WebVTT.

Which to choose

Pick SRT when the file is a downloadable sidecar for desktop or TV players, when you only need plain timed text, or when a tool you use only exports SRT. Pick WebVTT when the video plays in a browser, when captions need positioning or color, or when you publish through a streaming platform. When you translate, keep the format the same and change only the words — see how to translate an SRT file.

Key facts

  • SRT timecode: 00:00:01,000 (comma). WebVTT: 00:00:01.000 (dot).
  • WebVTT requires the WEBVTT header; SRT has no header.
  • Only WebVTT supports positioning (cue settings) and CSS styling.
  • SRT cues need a sequential integer index; WebVTT identifiers are optional.
  • WebVTT is native to HTML5 <track>; SRT is not.
  • Both are plain UTF-8 text and translate the same way: text only.

Definitions

SRT
SubRip Subtitle. Plain-text, comma timecodes, numbered cues, no styling in the core spec.
WebVTT
Web Video Text Tracks. Plain-text, dot timecodes, WEBVTT header, positioning and CSS.
Timecode punctuation
SRT uses a comma (,mmm); WebVTT uses a dot (.mmm). The key parsing difference.
Cue settings
WebVTT-only placement options after the end time, e.g. line:0 align:center. SRT has none.
&lt;track&gt; element
The HTML5 element that loads captions. Accepts WebVTT natively; not SRT.
STYLE block
WebVTT-only CSS block using ::cue. SRT cannot carry stylesheets.

Related guides

FAQ

What is the main difference between SRT and VTT?+

SRT timecodes use a comma (00:00:01,000) and the file stores only timing and text. WebVTT timecodes use a dot (00:00:01.000), the file must start with the line WEBVTT, and it supports positioning, comments, and CSS styling.

Is SRT or VTT better for web video?+

WebVTT is better for web video. It is the native format for the HTML5 <track> element, so browsers read it without conversion. SRT is not supported by <track> and must be converted to VTT first.

Can I convert SRT to VTT by renaming the file?+

No. You must add the WEBVTT header line at the top and change every timecode comma to a dot. Just changing the .srt extension to .vtt leaves invalid timecodes and a missing header, so browsers reject it.

Which format has wider player support?+

SRT has the widest support across desktop and TV media players such as VLC, MPC, and most smart TVs. WebVTT dominates browsers and streaming. For a downloadable file someone plays in a desktop app, SRT is the safer default.

Does VTT support colors and positioning that SRT does not?+

Yes. WebVTT supports cue settings (line, position, align, size) and CSS via STYLE blocks and ::cue, so you can place and color captions. Core SRT has no positioning or styling; a few players read inline <i>, <b>, <u> tags only.

Do both formats use UTF-8?+

Yes. Both are plain text and should be saved as UTF-8. WebVTT requires UTF-8; SRT works best as UTF-8 without a BOM. Non-UTF-8 encodings cause garbled characters in both.

Will translation change which format I should use?+

No. Translate within the same format — an SRT stays SRT, a VTT stays VTT — and only the text changes. Timecodes, the header, and cue settings should be preserved exactly.

Translate your subtitles now

Drop in your .srt or .vtt file, pick a language, and download a synced translation. Every timecode is preserved line for line.

Translate a subtitle file