Converts SubRip to WebVTT — the format HTML5 video reads natively through a <track> element. A browser will not play an .srt no matter how you label it, which is why this conversion exists.
The three differences that matter
The header. A WebVTT file must begin with the literal word WEBVTT. Without it the browser rejects the whole track, silently — no error in the console, the captions simply never appear. This is the single most common reason a renamed .srt does not work.
The decimal separator. SRT writes 00:00:01,000 with a comma; WebVTT requires 00:00:01.000 with a full stop. Every timestamp in the file has to change.
Cue settings. WebVTT can position a cue — line:90%, align:start — after the timestamp. SRT has nowhere to put them, so they are added here only where the source had them.
Using the result in a page
Serve the file with the MIME type text/vtt. Getting this wrong is the second most common failure: many servers send .vtt as text/plain, and browsers refuse it.
Then reference it inside your video element:
<track kind="captions" src="film.vtt" srclang="en" label="English" default>
One more thing catches people out: the track file is subject to CORS. If the video is on your page and the .vtt is on a CDN, the CDN must send Access-Control-Allow-Origin or the track will not load.
What gets checked while converting
Cues out of order — some editors append late additions at the end of the file. They are sorted, and you are told it happened.
Zero-length or reversed cues — an end time at or before the start. Players skip these silently, so they are given a one-second duration instead.
Overlaps — two cues on screen at once. Left alone by default because some formats use it deliberately for speaker labels; there is an option to trim them.
Malformed blocks — anything without a readable timestamp is skipped and counted, rather than corrupting the cue numbering.
Fixing subtitles that are out of sync
If the subtitles are consistently ahead or behind by the same amount, use Shift. Find a line whose spoken time you know, subtract, and enter the difference — negative to move them earlier.
If they start right and drift further out as the file goes on, the source was timed for a different frame rate and you need Stretch. The common ratios are 1.0427 (23.976 fps subtitles on 25 fps video) and 0.959 (the reverse). Shifting will never fix drift, and stretching will never fix a constant offset.
Other names for this
Also searched as “subrip to webvtt”, “srt to webvtt”, “convert srt for html5 video”.
Questions
- Can I just rename the file to .vtt?
- No. It will fail to load, and usually with no error message at all — the missing WEBVTT header and the comma decimal separator both make the file invalid.
- Are the formatting tags kept?
- Yes.
<i>,<b>and<u>are valid in both formats and are passed through unchanged. - My captions still do not appear in the browser.
- Check three things in order: the server sends
text/vtt, the track file is same-origin or sends CORS headers, and the file starts withWEBVTT. In practice it is nearly always the MIME type. - My accented characters come out as gibberish.
- The file is not UTF-8 — usually Windows-1252 from an older tool, or UTF-16 from Notepad. Both are detected and decoded automatically here. If characters are still wrong, the source file itself declares the wrong encoding.
- Is my subtitle file uploaded?
- No. The parsing and rewriting happen in this tab. Subtitle files often contain an unreleased script or a client’s content, which is a good reason not to send them to a stranger’s server. Turn your Wi-Fi off and the tool keeps working.
- Can I convert several files at once?
- Yes — drop as many as you like, or a whole folder. Each keeps its original name with the new extension, and you can download them individually or as a ZIP.