Subtitle converter: SRT to VTT and back
Paste subtitles or load a file, pick the target format, done. The tool recognises SubRip and WebVTT on its own, rewrites the timestamps, shifts the timing by seconds if you need it, repairs garbled umlauts and shows an analysis of reading speed, overlaps and cues that are too short. Everything runs in your browser — no upload, no sign-up.
What is the difference between SRT and WebVTT?
SubRip (.srt) comes from a Windows program of the early 2000s and never received a formal specification. A cue consists of a running number, a timing line with a comma before the milliseconds, and one or more lines of text.
WebVTT (.vtt) is the W3C standard for the HTML <track> element, so it is the format a video loads in the browser. It starts with the WEBVTT line, uses a full stop before the milliseconds, and knows things SRT does not: comments (NOTE), styles (STYLE), regions (REGION), cue identifiers and positioning settings after the timestamp.
1 WEBVTT
00:00:01,000 --> 00:00:03,500
Good morning. 00:00:01.000 --> 00:00:03.500
Good morning.
What is dropped when converting VTT to SRT?
Everything SRT has no equivalent for:
NOTEcomments,STYLEandREGIONblocks- cue identifiers in front of the timing line
- positioning settings such as
align:start position:10% - WebVTT-only markup such as
<v Speaker>or<c.yellow>, and karaoke timestamps
What stays is the simple formatting SRT players understand: <b>, <i>, <u> and <font>. The tool counts every removed part and lists it below the output, so you can decide yourself whether the loss matters for your purpose.
How does the encoding repair work?
When a UTF-8 file is read as Latin-1 or Windows-1252, the familiar pattern appears: ä turns into ä, ß into ß, an en dash into –. The tool maps every character back to its original byte and decodes the byte sequence strictly as UTF-8.
The result is kept only when three conditions hold: every character maps unambiguously to a byte, the decoding succeeds without a single invalid byte, and fewer suspicious spots remain afterwards than before. If one condition fails, your text stays untouched. Better no repair than a wrong one.
What does the reading speed tell you?
The analysis measures characters per second per cue, markup excluded. The reference is the Netflix Timed Text Style Guide, which specifies 17 characters per second for German adult programmes (20 for English, 13 for children's content) and a minimum duration of 5/6 of a second, roughly 833 milliseconds. Cues above that are hard to read along with; cues below it barely flash up.
The tool also counts overlaps — cues whose end lies past the start of the next one. They are the most common reason a player swallows lines.
Shifting the timing
If sound and subtitles drift apart, an even shift helps: negative values show the subtitles earlier, positive ones later, decimals are allowed (-1.5). Times below zero are clamped to the start of the file, and the tool says how often that happened. An uneven drift — start fits, end wanders — comes from differing frame rates and cannot be fixed with a constant shift.
Honest limits
SRT and WebVTT are supported. Not included are ASS/SSA (with styles and positioning), TTML/DFXP and subtitle tracks inside video containers, which would have to be extracted from the video first. Line endings are normalised on the way in (CRLF and BOM disappear); for the output you can switch CRLF back on if your target program insists on it.