Free tool
SRT to VTT converter
By the KeyMo team · Updated
Paste SRT text or add .srt files and the tool writes a WebVTT file: a WEBVTT header, a full stop instead of a comma before the milliseconds, and cue text escaped so the file is valid. It also converts VTT back to SRT. Cues it has to change or leave out are listed by line, and nothing leaves your browser.
SRT to VTT converter
Paste subtitles or add files. Conversion happens in your browser: nothing is uploaded.
Optional. Negative moves cues earlier.
Your VTT file appears here.
Output follows the W3C WebVTT specification: a WEBVTT header, UTF-8, hh:mm:ss.mmm times. SRT has no official specification, so the tool reads the common layout and tells you what it changed. Check the result in your player.
What this tool does
SRT and WebVTT hold the same thing: lines of text with a start and an end time. The differences are small but a player will reject a file over them. This tool rewrites an SRT file into WebVTT, or a WebVTT file back into SRT, and tells you everything it had to change.
- Adds the WEBVTT header and changes the timing format to hh:mm:ss.mmm.
- Keeps bold, italic and underline, removes other tags, and escapes characters that WebVTT does not allow in cue text.
- Lists every cue it left out or fixed, with the line number from your file.
- Moves all cues earlier or later by a number of seconds, for subtitles that are a little out of sync.
- Takes several files at once and gives each one its own download.
- Reads UTF-8 files, and UTF-16 files that have a byte order mark. The files you save are UTF-8.
It does not translate, transcribe, retime to a new frame rate or check reading speed. Your text is processed in this tab only: there is no upload, no account and no network request.
How to use it
- Pick the direction: SRT to VTT, or VTT to SRT.
- Press Choose files or drop files on the box, or paste the text into the text area. Try an example fills the box with a short file.
- Read the notes under the result. A yellow Check means something was changed or left out; a grey note is for information.
- Optional: type a number of seconds in the move box if the subtitles are early or late. A negative number moves them earlier.
- Press Download, or Copy for pasted text. With several files, use Download all.
What changes between SRT and WebVTT
The WebVTT rules below come from the W3C specification, read on 11 October 2026. SRT has no official specification, so the SRT side describes what this tool accepts, based on the example in YouTube's help page for caption files, which numbers each cue and puts a comma before the milliseconds.
| Part of the file | SRT as read | WebVTT as written | Source for the WebVTT rule |
|---|---|---|---|
| Start of file | Usually a cue number | The text WEBVTT, then a blank line | W3C WebVTT |
| Timestamps | hh:mm:ss,mmm with a comma | hh:mm:ss.mmm: a full stop, then three digits | W3C WebVTT |
| Cue numbers | One per cue | Dropped, or kept as identifiers if you tick the box. An identifier must be unique in the file | W3C WebVTT |
| End time | Any value | Must be greater than the start time, so cues that are not are left out | W3C WebVTT |
| Cue order | Any order | Start times must not go backwards, so cues are sorted by start time | W3C WebVTT |
| Overlapping cues | Can happen, for example when two people talk at once | Allowed, so they are left alone | W3C WebVTT |
| Characters in text | Any | & and < are escaped. The text -->, which is not allowed in a cue, is escaped too | W3C WebVTT |
| Encoding | No official rule; YouTube asks for plain UTF-8 | UTF-8 when you save | W3C WebVTT |
What is lost when you go back from VTT to SRT
SRT has no place for most of what WebVTT can carry. Converting VTT to SRT keeps the times and the text, and the tool says what it dropped.
- Cue settings such as position, alignment and size are dropped.
- STYLE and REGION blocks and NOTE comments are dropped.
- Voice tags are removed, so a speaker name inside a tag is not in the SRT. The spoken text stays.
- Class, language, ruby and inline timestamp tags are removed. Bold, italic and underline are kept.
- Entities such as & and < are turned back into the characters.
Going SRT to VTT to SRT again gives back the same times and text for a plain file. It will not bring back colours or positions that the first step removed.
Worked examples
First, one cue with the usual traps in it: an ampersand and a colour tag. The tool writes the header, swaps the comma, escapes the ampersand and removes the font tag, then lists the font tag in the notes.
| SRT in | WebVTT out | Why |
|---|---|---|
| 1 | (removed) | The cue number is not needed in WebVTT |
| 00:00:01,000 --> 00:00:03,500 | 00:00:01.000 --> 00:00:03.500 | Full stop before the milliseconds |
| Tom & Jerry <font color="#ff0000">wave</font>. | Tom & Jerry wave. | A bare & is not allowed; the font tag is dropped and the text stays |
Second, an example file with two bad cues. Cue 14 starts and ends at 00:02:10,000, and cue 20 is listed above cue 19. The zero-length cue is left out and reported with its line number, and the others are sorted. If you need that cue, fix its end time in the SRT and convert again.
Third, an offset. A 3,500 ms cue that starts at 00:00:01,000 is moved by -3 seconds. It would start at minus two seconds, so it is cut to start at 00:00:00.000 and ends at 00:00:00.500, with a note. A cue that would end before 00:00 is left out and reported.
Which format to use
- Uploading to YouTube: its help page lists SubRip (.srt) as a basic format, basic version only and plain UTF-8, and WebVTT (.vtt) as an advanced format marked In initial implementation, with styling limited to bold, italic and underline. Both are accepted, so convert only if you need the VTT.
- Using the file with a web video player or the HTML track element: WebVTT is the web format. The W3C names it as the most common format for captions on the web.
- If letters show as question marks or odd symbols after converting: the source was not saved as UTF-8. Re-save it as UTF-8 in your editor and add it again.
- If every cue is late or early by the same amount: use the move box instead of editing times by hand.
- If you want to do it by hand: add WEBVTT and a blank line at the top and change the comma to a full stop in the timing lines only, not in the dialogue. Save as UTF-8 with a .vtt extension.
For the wider comparison of the two formats, see SRT vs VTT, and for the terms see what is VTT and what is an SRT file.
Limits of this converter
- It checks the WebVTT rules listed above. It does not check that your player will accept the file. Test the result in the player you use.
- It reads the common SRT layout. A file in a very unusual layout may come out with cues missing, and the notes will say that no timing lines were found.
- Each file is limited to 5 MB. That is a limit of this tool, not of any platform.
- It does not create WebVTT styling, regions or positions. Cues come out as plain cues with optional bold, italic and underline.
- It does not touch the words. Spelling, line length and timing against the audio are still your job; the W3C says automatic captions usually need significant editing before they meet accessibility needs.
Where KeyMo fits
This is a utility for people who already have a subtitle file. KeyMo does something different: it cuts a long video into vertical 9:16 clips with word-by-word captions in 12 styles, and each clip comes with a score out of 10. This page makes no claim that KeyMo exports SRT or VTT files, and the converter does not need an account. If your next step is turning a long recording into captioned clips, see word-by-word captions.
Sources: W3C: WebVTT, The Web Video Text Tracks Format (Candidate Recommendation Draft, 20 May 2026) (checked 11 October 2026); YouTube Help: Supported subtitle and closed caption files (checked 11 October 2026); W3C WAI: Captions/Subtitles (checked 11 October 2026).