WebVTT and VTT are the same subtitle format: WebVTT is its full name, VTT its common shorthand, and a VTT file starts with WEBVTT.
WEBVTT 00:00:01.000 --> 00:00:02.500 Hello.
For people writing subtitle timestamps by hand: use periods for milliseconds, leave a blank line between cues, and check your file against the tested cases below.
VTT file format
Download field and tested-error table (.csv) ↓Four broken inputs tested in this site's parser
Comma milliseconds00:00:01,000 --> 00:00:02,500Cue 1 has invalid timing or no text and was skipped.
No spaces around arrow00:00:01.000-->00:00:02.500Cue 1 has invalid timing or no text and was skipped.
Missing WEBVTT00:00:01.000 --> 00:00:02.500This file must start with a WEBVTT header.
No blank line between cuesHello.
00:00:03.000 --> 00:00:04.000No warning. The parser returns one cue and puts the second timing line in its text.
Comma milliseconds and a missing space around the arrow produce the same warning here. Check the period first, then add spaces on both sides of --> and try each fix separately.
VTT format: write a WebVTT cue by hand
The WEBVTT first line is where you can see the format's full name written in the file; it may include a short header description after a space. A cue timing line uses hh:mm:ss.mmm --> hh:mm:ss.mmm; the text follows on the next line and may span several lines. Put an empty line before the next cue.
Optional cue settings follow the end time on that same timing line: align, line, position, size, vertical, or region. The CSV gives example values. This site's VTT-to-SRT parser discards positioning and styling. NOTE blocks can appear before cues; STYLE blocks belong before the first cue. The parser skips both.
These are observations of this site's parser, not a universal validator for every VTT player. Compare the WebVTT syntax specification for the full format.
VTT file example: six complete cues
Copy this whole file into a plain-text editor and save it with a .vtt extension. The sample starts at zero and each cue begins exactly when the previous one ends. Our site parser read all six cue blocks and returned six cues with no warnings.
WEBVTT 00:00:00.000 --> 00:00:01.200 First line. 00:00:01.200 --> 00:00:02.400 Second line. 00:00:02.400 --> 00:00:03.600 Third line. 00:00:03.600 --> 00:00:04.800 Fourth line. 00:00:04.800 --> 00:00:06.000 Fifth line. 00:00:06.000 --> 00:00:07.200 Sixth line.
Each blank line keeps the next timing line out of the previous cue's text.
The period marks milliseconds throughout this VTT sample.
Its final end time is 00:00:07.200; that is a cue endpoint, not a claim about video duration.
What am I looking at in this VTT file?
It is a subtitle file that shows words on screen at set times during a video.
Think of it as a timed list of captions: open it in a text editor and you will see timestamps followed by the words to display.
You may get one with an online video.
A video player may load it as a separate subtitle track.
Someone may send you the subtitle file on its own.
See the complete VTT file example above.
Questions when writing timestamps
Can I use a comma for milliseconds?
No. Use a period in VTT, such as 00:00:01.000; the comma sample was skipped by our parser.
Can I omit spaces around the arrow?
Not with this parser. The tested no-space timing line was skipped; write --> .
What happens if I forget the empty line between cues?
Our parser merged the second cue into the first cue's text without a warning. Add the empty line and compare the output count.
Can I add positioning settings?
Yes, after the end timestamp. They will not survive conversion to plain SRT on this site.
Working from a numbered .srt file instead? Check the SRT field layout and tested errors before writing comma-separated timecodes.