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)
| Input | SRT (.srt), tolerant of dot milliseconds and missing indices |
|---|---|
| Output | WebVTT (.vtt) with WEBVTT header and numbered cues |
| Why | HTML5 <track> only accepts WebVTT in most browsers |
| Timings | Unchanged — 00:00:01,000 becomes 00:00:01.000 |
| Privacy | Runs 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.