SRT vs FCPXML: which subtitle format should you export?
· 5 min read
Both formats describe the same thing — text with timecodes — but they are built for different jobs. Picking the wrong one usually shows up late, when you have already cut the sequence and discover your captions arrived as flat unstyled text.
What SRT actually stores
An SRT file is a numbered list of cues: an index, a start and end timecode, and one or more lines of text. That is the whole specification. There is no font, no colour, no position, and no concept of a word inside a line.
That simplicity is exactly why it works everywhere. YouTube, Vimeo, Premiere, DaVinci Resolve, VLC, and every social platform accept SRT. If your captions need to travel, or someone else will restyle them downstream, SRT is the safe answer.
What FCPXML adds
FCPXML is Final Cut Pro's interchange format. Instead of cues it describes a timeline: clips on lanes, with rational timecodes tied to your project's frame rate. Subtitles come in as title elements, which means they arrive as editable objects rather than baked text.
- Per-word styling survives the import — bold a name, change a font mid-sentence, and it lands that way.
- Timecodes are rational (for example 1001/30000 s), so a 23.976 or 29.97 project doesn't drift over a long cut.
- Titles land on a lane above your video, so you can restyle all of them at once in Final Cut.
FCPXML is Final Cut specific. Premiere and Resolve will not read it. If your project might move NLEs, export SRT as well — it costs nothing to keep both.
A simple rule
- Cutting in Final Cut Pro and you care how the captions look? Export FCPXML.
- Publishing to YouTube, a client, or any other NLE? Export SRT.
- Not sure yet? Export both. They are generated from the same timings, so they cannot disagree.
Why frame rate matters more than people expect
Whisper-style transcription returns timings in seconds as floating point. An NLE thinks in frames. Converting between them is where captions drift: round every cue to the nearest frame at 25 fps and feed it to a 23.976 timeline, and by minute ten your captions are visibly late.
This is why CaptionsThis asks for your frame rate before exporting FCPXML, and writes rational timecodes rather than decimal seconds. Set it to match your sequence and the captions land on the frame you expect.