SubToolbox

SRT to VTT Converter — For HTML5 Players

Convert SRT subtitles to WebVTT for HTML5 video players — proper WEBVTT header, dot milliseconds, same timings.

Quick answer: Drop in an .srt file and download a valid .vtt: the WEBVTT header is added, the millisecond separator becomes a dot, and cues are renumbered. Timings and text are untouched — it is the format HTML5 <track> requires.

Drop a subtitle file here, or browse — it stays on your device

Output: WebVTT (.vtt)

Core facts
InputSRT (.srt), tolerant of dot milliseconds and missing indices
OutputWebVTT (.vtt) with WEBVTT header and numbered cues
WhyHTML5 <track> only accepts WebVTT in most browsers
TimingsUnchanged — 00:00:01,000 becomes 00:00:01.000
PrivacyRuns in the browser; no upload

What this tool does

Browsers loading captions through the HTML5 <track> element want WebVTT, not SRT. The two formats are close cousins — SRT is in fact the older of the two — but a browser checks the beginning of the file for a “WEBVTT” header and reads milliseconds after a dot, so feeding it a raw SRT either fails or mis-parses. Converting means: prepend the header, switch “,” to “.” in every timestamp, drop anything SRT-specific, and keep all cues as they are. This page does that locally in your browser and hands you a .vtt that a <track> element will accept.

Common uses

  • Adding captions to a self-hosted video with <track kind="subtitles">
  • A web app player (Video.js, Plyr, Shaka) rejects .srt uploads
  • Course platforms that standardise on WebVTT
  • Testing captions in a browser's native video element

What a valid WebVTT file must contain

Line one must start with the case-insensitive string WEBVTT (optionally followed by header metadata). Then each cue is an optional identifier line, a timing line “HH:MM:SS.mmm --> HH:MM:SS.mmm” (hours mandatory is safest; months are not a thing here — the middle field is minutes), and one or more text lines. Blank lines separate cues. The conversion from SRT is mechanical because SRT already follows this shape minus the header and with commas.

Frequently Asked Questions

Why won't browsers play my SRT file directly?
The HTML5 <track> specification defines WebVTT as the caption format. Safari rejects SRT outright; Chrome and Firefox may attempt a lenient parse but treat it as unreliable. Converting to VTT — header plus dot milliseconds — is the reliable path.
Does converting to VTT let me style captions?
WebVTT supports ::cue styling and per-cue positioning settings, so the door is open — but this converter carries over only your cues, since SRT has no styling to translate. You can add cue settings afterwards in a text editor.
Are cue numbers required in VTT?
No, they are optional. This tool writes numeric cue IDs for readability, which every parser accepts.
Can I convert SRT to VTT for YouTube?
You don't need to — YouTube accepts SRT and VTT alike for caption upload. VTT is only a hard requirement for HTML5 players you embed yourself.

More subtitle converters