Also available in: Español · Português · Français · العربية
SRT to VTT converter
SubRip to WebVTT with the character escaping the specification actually requires, and a report of every judgement call the conversion made.
What is SRT to VTT conversion?
SubRip, the .srt format, is the subtitle file almost everyone has: a numbered block, a start and end time, and a line or two of text. WebVTT, the .vtt format, is what browsers actually play. The HTML video element will not load an .srt file at all, so putting subtitles on a web page means converting one to the other.
The two formats look nearly identical, which is why the conversion has a reputation for being trivial. The visible differences are that WebVTT files begin with the word WEBVTT, and that timestamps use a dot before the milliseconds where SubRip uses a comma. Almost every guide stops there.
That advice is incomplete in a way that does real damage, and the rest of this page is mostly about the part it leaves out. This converter runs entirely in your browser, and it reports every change it made rather than quietly applying it.
How to use it
- Paste your .srt file into the first box. Open it in any text editor and copy the contents. Nothing is uploaded — the conversion happens in this tab as you type.
- Choose how to handle formatting and numbering. Keeping formatting tags preserves the ones WebVTT actually defines and turns the rest into literal text. Cue numbers can be kept as WebVTT cue identifiers or dropped, since WebVTT does not require them.
- Copy the result or download it as a .vtt file. Read the report underneath first. It lists everything the conversion had to decide — characters escaped, tags kept or converted to text, coordinates dropped, blocks it could not read — so you know exactly what changed.
The escaping almost every converter gets wrong
Here is the part the guides omit. WebVTT is a W3C specification, and section 4.2 defines a cue text span as a run of characters other than line feed, carriage return, U+0026 AMPERSAND and U+003C LESS-THAN SIGN. Those two characters cannot appear literally in WebVTT cue text. They have to be written as HTML character references — & and <.
SubRip has no such rule, because SubRip has no rules at all in the formal sense. So a subtitle reading Tom & Jerry, or one reading 5 < 6, is perfectly ordinary SubRip and malformed WebVTT. A converter that only swaps the comma for a dot produces a file that is broken in a way you will not notice until a player either drops the text or renders something strange, because an unescaped less-than sign starts what the parser believes is a tag.
This is not a matter of interpretation, and it is worth checking rather than taking on trust. Running the naive conversion of Tom & Jerry < 5 through the WebVTT reference parser — the one published by the specification's own editors — produces three errors: an incorrect escape, a start tag that only v and lang are allowed to annotate, and an incorrect start tag. Running this converter's output through the same parser produces none, on every test file.
The tool escapes the ampersand before the less-than sign, which sounds like a detail and is not. Doing it the other way round means the ampersands in the entities you just wrote get escaped a second time, and < becomes &lt;, which renders as visible markup rather than as a character.
SubRip has no specification, so the converter reports its guesses
WebVTT has a specification you can look up. SubRip does not have one anywhere — it is defined entirely by what players happen to accept, which means reading it is a series of judgement calls. Real files use a dot instead of a comma, drop the hours from timestamps, omit the sequence numbers, separate blocks with whitespace-only lines rather than truly empty ones, and start with a byte order mark. All of those are accepted here, and each one is counted.
That counting is the point. Because there is no authority to appeal to, the honest thing a converter can do is tell you what it decided. The report lists how many ampersands and less-than signs were escaped, how many formatting tags were kept versus turned into text, how many timestamps were missing their hours, how many cues had no number, and whether a byte order mark was removed.
It also reports problems that were already in your file rather than silently repairing them: cues whose end time precedes their start, cues that last zero time, and cues that begin before the previous one has finished. Reversed cues are emitted in the order WebVTT requires, because the reference parser rejects them otherwise, but the fact that this happened is reported rather than hidden.
Blocks that cannot be read at all are left out of the output and shown to you in full. A converter that silently drops what it does not understand is worse than one that fails loudly, because you find out when someone watches the video.
Honest limits
SubRip files in the wild sometimes carry X1, X2, Y1 and Y2 pixel coordinates on the timing line, positioning the subtitle on screen. These are dropped, and the count is reported. WebVTT expresses position through cue settings measured in percentages of the video, which is a genuinely different model, and there is no faithful mapping from one to the other without knowing the video's dimensions. A wrong position is worse than no position, so the tool refuses to guess.
Formatting tags are handled by what WebVTT actually defines: b, i, u, ruby, rt, v, lang and c. Those survive. A font tag with a colour attribute — common in SubRip — is not WebVTT markup, so it becomes literal text and is counted as such. That is deliberate, and it is the honest reading: leaving it in place would produce a file the reference parser rejects, and deleting it silently would lose content you might want.
This converts text, not files. Paste the contents rather than dropping a file in, which also means the encoding question is settled by your text editor rather than guessed at here. WebVTT must be UTF-8; if your .srt is in an older Windows encoding, open and re-save it as UTF-8 first or the accented characters will not survive.
Finally, it converts one direction only. WebVTT supports regions, styling blocks and cue settings that SubRip has no way to express, so going back the other way would lose things silently — which is exactly the failure this page exists to complain about.
Why is it free?
Because it costs nothing to run. The conversion happens in your browser as you type. Nothing is uploaded, nothing is logged, and no server sees your subtitles, because no server is involved.
No account, no sign-up, no watermark, and no cap on file size beyond what your own browser will hold. The escaping rules come from the W3C WebVTT specification, and the output is checked against the reference parser published by that specification's editors rather than against another website's idea of what a .vtt file looks like.