Convert WebVTT to FCPXML

WebVTT is built for web players, not editing timelines. This converts a .vtt into an FCPXML whose cues become title clips in Final Cut Pro, or Text+ titles in DaVinci Resolve, at the frame rate of the sequence you name.

Drop a .vtt file here

or click to choose one. It is converted in this page and never uploaded.

FCPXML addresses frames, not seconds. This has to match the timeline you are importing into, or every caption lands slightly off and drifts further as the video runs.

Where VTT files come from, and why they need converting

A .vtt is usually what you get back from a web workflow: a captions track pulled off a player, an export from a browser-based editor, or a file built to sit beside an HTML5 video. It is a good format for that job and a poor one for an edit, because no NLE treats a VTT cue as a timeline object.

What is dropped on the way in

WebVTT carries cue settings that have no equivalent in an editing timeline: alignment, line and position percentages, region definitions, and vertical writing direction. Those place a caption inside a web player's video frame, and they are discarded here rather than approximated. A title clip's position is a property of the title, which you set in Final Cut or Resolve.

Escaped entities are resolved back to the characters they stand for, so a cue written as "Smith & Co" becomes "Smith & Co" in the title rather than keeping the markup.

Pick the sequence's frame rate

VTT stores milliseconds. FCPXML addresses frames. The picker decides which frame each cue lands on, so it has to match the timeline you are importing into or the captions sit slightly early or late all the way through.

A subtitle file records when each line appears, not when each word is spoken. Anything built from one is accurate to the line. If you need per-word timing (for karaoke-style captions, or to split a line without the second half drifting), transcribe the audio instead, which times every word individually.

Nothing is uploaded

The .vtt is read and the .fcpxml is written in this page, by the same code that builds exports in the editor. The file never reaches a server and no copy is kept. A subtitle file is a transcript, and a transcript is often the part of a project that cannot leave the building.

Why it asks for a frame rate

A .vtt stores times in milliseconds and says nothing about frames. FCPXML addresses frames directly, so something has to decide which frame each cue lands on, and only you know the timeline you are importing into. Pick the sequence's rate rather than the source video's: they are not always the same, and that mismatch is the usual cause of captions that start slightly off and get worse.

Frequently asked questions

Why not convert the VTT to SRT first?

You can, but it gains you nothing and costs a rounding step. Going straight to FCPXML means the cue times are read once and snapped to frames once.

What happens to cue positioning?

It is dropped. Cue settings like align:start or position:10% position a caption inside a web player and have no equivalent on an editing timeline. Position the titles in your editor instead.

Will the titles be editable in DaVinci Resolve?

Yes. Resolve reads FCPXML and builds a Text+ title per cue, which is a real title object you can restyle, animate, and run through Fusion, unlike a subtitle track, which none of that applies to.

No subtitle file yet?

Generate one from your audio or video with word-level timing, then export FCPXML directly, no conversion step, and every word individually timed rather than every line. Free for 15 minutes and 5 transcriptions a month.

Transcribe a file instead