Skip to Content
Working with videoCaptions & subtitles

Captions & subtitles

Import subtitles, generate them from the composition’s own audio, edit them like anything else on the timeline, and write them back out as .srt or .vtt.

All five commands live under Composition ▸ Captions and in the command palette:

CommandWhat it does
Import…Reads an .srt or .vtt file into caption layers.
Generate from AudioTranscribes the composition’s audio and builds the layers.
Export .srt…Writes the caption layers back out as SubRip.
Export .vtt…The same, as WebVTT.
Remove AllClears them — one undo step.

In the command palette they are spelled out: Import Captions…, Generate Captions from Audio, and so on.

The one idea: a caption is a text layer

There is no separate caption track, caption object or caption editor to learn. Each caption is an ordinary text layer whose clip bar is its cue window. Everything follows from that:

  • Re-time a caption by dragging its bar, like any layer. Export reads the bars, so the file always agrees with the picture.
  • Restyle one caption by styling the layer. Restyle all of them by selecting them all — same as styling any multi-selection.
  • Animate them freely: per-glyph animators, layer styles, 3D, motion blur, the graph editor — captions have all of it, because text layers have all of it.

New captions size themselves from the composition, not in fixed pixels: the text is 5% of comp height with the baseline a tenth of the frame off the bottom — clear of the UI every social platform draws down there. The same captions read correctly on a 1080×1920 vertical cut and a 4K master. Long lines wrap at broadcast practice (~42 characters, max two lines), and those breaks survive export identically on every machine.

Import and Generate both replace any captions already in the composition. That is deliberate — importing twice should not double every subtitle.

Generating needs a speech provider

Generate from Audio transcribes the composition, not a footage file: layer trims, levels and mutes are applied first, so the cues line up with the picture. If a work area is set, only that range is transcribed.

Two limits to know before you rely on it:

  • It runs on your own OpenAI key, the one entered for the assistant — see Connecting a provider. The engine sends the audio to OpenAI’s speech model. Anthropic and Gemini cannot be used for this step.
  • The published installers cannot generate captions yet. They are the server edition, which has no hosted transcription route, and the command says so. It works in the local edition you build from source. Importing, editing and exporting captions work in both.

The audio is sent as 16 kHz mono, and the provider’s 25 MB limit comes to about 13 minutes. For something longer, set a work area and run it in passes.

Messy files are handled

Real subtitle files are messy, and the importer expects that: CRLF endings, BOMs, .vtt files written with SRT commas (and vice versa), timestamps with no hour field, cue settings, NOTE/STYLE blocks, missing blank lines. Overlapping cues are trimmed against each other so two captions never render on top of each other.

From the command line

The same engine runs headless: premation captions project.motion --out subs.srt transcribes without opening the editor, and premation render project.motion --captions subs.srt burns a caption file into a render. See the CLI.

Last updated on