What a VTT file is, briefly
WebVTT is the caption format the web was built around. It is what the HTML5 video player's track element reads, and it is what many streaming tools, course platforms and recording apps hand you when you download captions. At its core it resembles SRT, a list of cues with a start time, an end time and text, but it adds a header, comments, styling blocks, per-cue placement and inline tags for speakers and classes. A player that understands all of that can, for example, show one caption at the top of the screen in a different colour with a speaker name attached. What a VTT file is covers the format in full.
An MP4 file has no way to apply those web features. To get a VTT's captions onto an MP4 that looks the same in every player, the editor draws the text into the picture, and whatever the VTT expressed through styling has to be expressed through one style for the whole video.
How the editor reads a VTT, block by block
- WEBVTT header
- The file is treated as WebVTT when it starts with WEBVTT. The rest of that first block, including lines such as Kind: captions or Language: en, is ignored.
- Cue identifiers
- A name or number on the line above the timing line is allowed and discarded.
- Timestamps
- Both hh:mm:ss.mmm and the short mm:ss.mmm form are read. A comma before the milliseconds is accepted too, and one- or two-digit fractions count as tenths or hundredths. Minutes or seconds above 59 make the cue unreadable.
- Cue settings
- Anything after the end time on the timing line, such as align, line, position, size or vertical settings, is ignored.
- NOTE, STYLE and REGION blocks
- Skipped quietly. They are not counted as errors in the import notice.
- Inline tags
- Voice tags such as <v Ana>, class tags such as <c.yellow>, <i>, <b>, <u>, <lang> and ruby tags are removed, as are the timestamp tags inside a cue. The words between them stay.
- Character references
- &, <, >, , " and the left-to-right and right-to-left marks become the characters they stand for.
- Encoding
- The file is read as UTF-8, which is what WebVTT requires anyway.
A cue with no timing line, an unreadable time or no text left once the tags are gone is skipped, and the import notice tells you how many.
What gets lost, and how to put it back
- Speaker names in voice tags. A cue written as <v Ana>Are you coming? arrives as just "Are you coming?", because the whole tag, name included, is removed. If viewers need to know who is talking, type the name into the line, for example "ANA: Are you coming?", or use a dash for each speaker. SDH subtitles has conventions for this.
- Per-cue placement. A VTT can lift one caption to the top with a line setting so it doesn't cover a lower third. In the editor, position is one setting for every line: top, middle or bottom plus an offset. If a few captions must dodge on-screen text, consider moving the whole set; moving subtitles to the top weighs that up.
- Colours and fonts from STYLE blocks or classes. Set one look in the Style panel instead; the presets are a quick start, and choosing subtitle colours helps when contrast matters.
- Ruby annotations. Japanese captions that use ruby for readings keep the reading as ordinary text right after the base characters, so delete or rewrite those by hand.
- Progressive reveals. Timestamp tags that uncover a cue piece by piece are removed, and each cue appears whole for its full duration.
Importing a VTT and rendering the MP4
- In the editor, turn off "Write the subtitles automatically with AI" and choose the video the captions belong to.
- Use Import SRT / VTT and select the .vtt file. Confirm if it asks to replace lines already in the editor.
- Compare the notice's count with what you expected. A big gap usually means some blocks were malformed.
- Watch the parts where the original captions relied on placement or speaker names, and fix the text as described above.
- Choose a preset and position in Style, turn on "Show safe area" if the video is vertical, then click Render video and, when it finishes, Download video.
Pitfalls that are specific to VTT downloads
Captions saved from live streams and automatic captioning are often built as roll-up captions: each cue repeats the previous line and adds a new one, so cues overlap and every sentence appears twice. Imported as they are, those files burn in as a stuttering two-line scroll. The editor marks overlapping lines, and merging or deleting the duplicates fixes it; editing YouTube's automatic captions deals with the most common source of such files.
A file without the WEBVTT header is read as SRT instead. The cues still come through, because dot timestamps are accepted either way, but any NOTE or STYLE blocks then show up in the skipped count, which is harmless. Cues containing blank lines are another matter: the text after the blank line has no timing of its own and is skipped, so check the notice whenever it reports skips.
What you get out
The render produces a new MP4 named after your video with -subtitled at the end, at the source's resolution, frame rate and orientation. The picture is re-encoded, with H.264 used where your browser can encode it, and the audio is copied over unchanged when the MP4 can hold it. If you also want the captions as a file, Export VTT writes a clean WebVTT with a plain header and no identifiers, settings or tags, and Export SRT does the same in SRT form; VTT to SRT explains that conversion. Don't have a VTT yet? The AI subtitle generator and the VTT generator create one from the speech.
About the subtitle editor on this page
- Opens
- MP4, MOV, M4V, WebM, MKV videos your browser can decode
- Subtitles from
- AI (from the speech, optionally translated into one of 21 languages), an SRT or VTT file, or typing them in
- You download
- An MP4 with the subtitles drawn into the picture at the original resolution and frame rate, plus SRT and VTT files
- Cost
- Editing, styling, rendering and SRT/VTT export are free, with no account and no watermark. AI subtitles cost 1 credit per minute (5-credit minimum per video); signing in with Google gives 100 free credits and accounts get 10 free credits a day
- Privacy
- The video never leaves your device and is rendered in your browser. Only for AI subtitles is the audio sent, over HTTPS, and it is deleted within 30 minutes of delivery
- Rendering needs
- Chrome or Edge 94+, Safari 16.4+, or Firefox 130+ on a computer. Editing and SRT/VTT export work in any current browser
More: srt and vtt workflows
- SRT to MP4: Put Your Subtitle File Into the Video
- Add an SRT to a Video: Four Ways Compared
- SRT Editor Online: Edit Subtitles While the Video Plays
- VTT to SRT: Convert WebVTT Captions and Check the Timing
- Shift Subtitle Timing by a Fixed Amount
- Check an SRT File for Errors
- Create an SRT File From Scratch
- Edit YouTube Auto Captions on Your Own Video
Subtitle tools
- Add Subtitles to a Video
- Burn Subtitles Into a Video
- Video Caption Generator With Styled, Burned-In Captions
- Online Subtitle Editor
- Add Captions to a TikTok Video
- Add Subtitles to Instagram Reels
- Add Subtitles to a YouTube Video
- Add Hindi Subtitles to a Video
- All subtitle tools
- AI subtitle generator (SRT and VTT files)
Frequently asked questions
Can the MP4 keep my VTT as captions viewers can switch off?
Not from this editor; the captions are drawn into the picture. For a switchable track, upload the VTT to your video platform, or use FFmpeg to convert it into an MP4 text track alongside the copied video.
Why did captions that sat at the top of the screen move to the bottom?
Cue settings such as line and position are ignored on import, and every line uses the one position chosen in the Style panel. Set it to top, middle or bottom with an offset to suit the whole video.
My VTT shows each sentence twice after the import. What happened?
The file uses roll-up captions, where each cue repeats the line before it. Delete or merge the repeated lines, which the editor flags as overlaps, before you render.
Are speaker names from VTT voice tags kept?
No. The voice tag is removed together with the name inside it. Type the name into the line itself if viewers need to know who is speaking.
Does a VTT with short timestamps like 01:04.200 import correctly?
Yes. Short minutes-and-seconds times are read with zero hours, so 01:04.200 means one minute and 4.2 seconds into the video.