Why web video needs VTT
SRT is the most common subtitle format, produced by editors, transcription services and download tools. Web browsers, however, only accept WebVTT in the HTML5 <track> element. An SRT file linked directly to a video element simply does not show.
The formats look similar, but details matter: WebVTT requires a WEBVTT header, uses a dot instead of a comma before milliseconds, and supports a different set of tags. This converter handles each of those differences.
SRT vs WebVTT at a glance
| Feature | SRT | WebVTT |
|---|---|---|
| Full name | SubRip Subtitle | Web Video Text Tracks (WebVTT) |
| Type | Subtitle text file | Subtitle text file |
| Introduced | Around 2000 | 2010 |
| Created by | SubRip, a free Windows subtitle ripper | WHATWG, later standardized by the W3C |
| Timestamp format | 00:01:02,500 (comma before milliseconds) | 00:01:02.500 (dot before milliseconds, hours optional) |
| Styling | Only basic tags such as <i>, <b> and <u> | CSS styling, positioning, cue settings and speaker voices |
| Best for | Desktop players, video editors and upload forms | HTML5 video players on websites |
| Support | VLC, YouTube, Premiere Pro, most smart TVs | Every browser through <track>, plus YouTube and Vimeo |
| MIME type | application/x-subrip | text/vtt |
How to convert SRT to VTT
Step 1: Select the .srt file
Drop your subtitle file onto the converter.
Step 2: VTT is preselected
Keep WebVTT as the output.
Step 3: Convert
Cues are parsed, timestamps are normalized and markup is cleaned.
Step 4: Add it to your video
Reference the .vtt file in a <track> element or upload it to your video platform.
What the converter fixes
WEBVTT header
Added at the top, as the format requires.
Timestamps
00:01:02,500 becomes 00:01:02.500, with hours padded where missing.
Unsupported tags
<font> tags and {\an8} position codes are removed; <i>, <b> and <u> are kept.
Safe text
Stray & and < characters are escaped so browsers do not drop the cue.
Where SRT to VTT is needed
HTML5 video players. Native <video> captions require WebVTT.
Video.js, Plyr and similar players. Most web players expect VTT tracks.
Course platforms. Many learning platforms ask for VTT captions.
Accessibility compliance. Captions on web video support WCAG requirements.
Using the VTT file on a web page
Add the file to your video with a track element, for example <track src="captions.vtt" kind="subtitles" srclang="en" label="English">. Serve it from the same site as the page, or enable CORS if it lives elsewhere, otherwise browsers refuse to load it.
Make sure your server sends the file as text/vtt. Some servers default to a generic type, which a few browsers reject.
What changes in the cue text
Cue numbers from the SRT are dropped, since WebVTT does not need them. Position coordinates that some SRT files include after the timestamps are removed as well.
Italic, bold and underline tags are supported by both formats and are kept. Font color tags are removed because WebVTT styles text with CSS instead.
- Kept: text, timing, <i>, <b>, <u>.
- Removed: cue numbers, <font> tags, positioning codes.
- Escaped: bare & and < characters.
Tips for subtitle conversion
- Save SRT files as UTF-8 so accented characters display correctly.
- Check that cues do not overlap; some players hide overlapping captions.
- Use CSS ::cue rules to style captions after converting.
- Need the reverse? The VTT to SRT converter handles it.
SRT to VTT questions
What is the difference between SRT and VTT?
VTT adds a WEBVTT header, uses a dot before milliseconds, allows CSS styling and positioning, and is the only format browsers support natively.
Is the timing changed?
No. Timestamps are only reformatted; the times stay exactly the same.
Are italics kept?
Yes. <i>, <b> and <u> tags are kept because WebVTT supports them.
Why do my captions not appear in the browser?
Check that the file is served from the same origin or with CORS, and that the track element points to the right path.
Does it handle a byte order mark?
Yes. A leading BOM is removed before parsing.
Is the file uploaded?
No. Conversion happens in your browser.