Convert SRT to WebVTT (VTT)
Need WebVTT for the HTML5 <track> element? Drop an SRT file and download a standards-compliant .vtt in a second.
🔒 Runs in your browser. Your files and text are not uploaded.
How to use the SRT to VTT Converter
- Drop your .srt file onto the box, or paste its text. Several files can be converted at once and downloaded together as a ZIP.
- Leave Convert font colour and top/left/right positions ticked if your SRT uses
<font color>tags or{\an8}codes; untick them for a plain, minimal VTT. - Press Convert to VTT. The preview shows the first lines and any warnings, for example about overlapping cues.
- Download the .vtt file and reference it from your video element or upload it to your player.
What actually changes between SRT and WebVTT
The two formats look almost identical, which is why a one-line search-and-replace sometimes “works”. The converter does the full job properly:
| SRT | WebVTT | |
|---|---|---|
| First line | Cue number | Must be WEBVTT |
| Millisecond separator | Comma: 00:01:02,500 | Dot: 00:01:02.500 |
| Cue numbers | Required | Optional identifiers |
| Styling | Informal HTML-like tags | Defined tags plus CSS via ::cue |
| Position | Not in the format | line, position, align, size settings |
Cue numbers are dropped by default because WebVTT does not need them; tick “Keep cue numbers” if your workflow refers to them.
Using the .vtt file in an HTML5 video
Browsers only understand WebVTT in the <track> element — they ignore SRT files. A minimal example:
<video controls src="movie.mp4">
<track kind="subtitles" src="movie.en.vtt"
srclang="en" label="English" default>
</video>Serve the file from the same origin as the page, or add the crossorigin attribute to the video and send CORS headers with the .vtt file. A server that returns the wrong MIME type is usually fine, but text/vtt is the correct one.
Colours, italics and positions
Italic, bold and underline tags are valid in WebVTT and pass through unchanged. SRT colour tags are converted into WebVTT class spans with a small STYLE block (::cue(.c1){color:#ffcc00}), which is the standards-compliant way to colour text. Players that ignore STYLE blocks simply show white text.
If a line begins with an ASS-style position code such as {\an8} (top centre), it becomes line:0; left and right alignments become align:start and align:end. Anything the converter cannot express is reported in the warnings instead of being silently lost.
Where WebVTT is the right choice
- Websites and web apps that use the native HTML5 video element.
- Streaming platforms and video hosts that accept WebVTT as an upload format.
- HLS streaming, where WebVTT segments carry the subtitles.
- Chapter markers and descriptions (these need a different
kind, but the same file structure).
Keep SRT when you need maximum compatibility with desktop players, TVs and editors.
Frequently asked questions
Is the conversion lossless?
Text, timing, italics, bold and underline are preserved exactly. Colours and top/side positions are translated to their WebVTT equivalents. SRT itself has no other features, so nothing else can be lost.
Why does my browser ignore the .srt file I put in a track element?
The HTML specification only defines WebVTT for text tracks. Convert the file with this tool and point the track element at the .vtt.
Do I need to keep the cue numbers?
No. WebVTT identifiers are optional and most workflows never use them. Tick the option only if you reference cues from scripts or CSS.
What encoding is the output?
UTF-8 without a byte-order mark, as required by the WebVTT specification. Input files in other encodings are detected automatically; if accents look wrong, use the encoding fixer first.
Can I convert VTT back to SRT?
Yes — the VTT to SRT converter does the reverse and also removes cue settings that SRT cannot represent.
Is my file uploaded anywhere?
No. The conversion happens locally in your browser, and nothing is stored once you close the tab.