WebVTT

VTT to MP4: Burn WebVTT Captions Into a Video

A WebVTT file can't simply be merged into an MP4 and be seen everywhere; to make the captions show in any player, you burn them into the frames. Import the .vtt below, check what the editor kept and dropped, style it and render a new MP4 in your browser. WebVTT placement, colours and voice tags don't carry over, and this page explains what to do about each.

Subtitle editor

Load a video, get subtitles from AI, an SRT/VTT file or your own typing, style them, and download an MP4 with the subtitles in the picture.

MP4, MOV, M4V, WebM or MKV · free to edit and render · no watermark · the video stays on your device

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
&amp;, &lt;, &gt;, &nbsp;, &quot; 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

  1. In the editor, turn off "Write the subtitles automatically with AI" and choose the video the captions belong to.
  2. Use Import SRT / VTT and select the .vtt file. Confirm if it asks to replace lines already in the editor.
  3. Compare the notice's count with what you expected. A big gap usually means some blocks were malformed.
  4. Watch the parts where the original captions relied on placement or speaker names, and fix the text as described above.
  5. 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

Subtitle tools

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.