How it works

From speech to burned-in captions

Burnin's whole premise is that captioning can happen entirely on your phone. This page is the pipeline, in full, including the parts that are still approximate.

The four stages

A video goes through four steps from import to export, all of them on-device: transcription turns speech into text, segmentation turns that text into caption-length chunks, gap detection finds spans that likely got dropped and transcribes them again, and burn-in draws the captions you’ve checked into the video you export.

Stage 1
Transcribe

Apple's on-device SpeechTranscriber turns the audio into text, on the phone.

Stage 2
Segment

The transcript is broken into readable caption-length chunks.

Stage 3
Detect gaps

Long stretches with no caption are found and transcribed a second time.

Stage 4
Burn in

The captions are drawn into the picture of the video you export.

Transcription: Apple’s SpeechTranscriber, on the phone

Burnin uses Apple’s on-device speech transcription framework rather than sending audio to a server. The audio never leaves the phone at any point in this stage.

  • Per-language models. Each language Apple supports has its own model. The first time you transcribe in a language, Burnin downloads that language’s model.
  • Download once, then offline forever. After a language pack is on the phone, transcribing in that language needs no connection again, on this video or the next one.
  • Automatic detection, with a manual picker. Burnin tries to detect the spoken language on its own. A picker is there for when detection is not what you want, or a video mixes languages in a way automatic detection cannot resolve cleanly.
  • Expected proper nouns, typed in first. Before transcription starts, you can type names it should expect, a person or a place it might otherwise mishear. Those words are passed straight to the speech recognizer as a bias, so a name like “Kylian Mbappé” is more likely to come out right the first time.

Segmentation: turning a transcript into captions

A raw transcript is one long stream of words with timing attached to each one. Segmentation groups that stream into caption-length chunks, breaking at points that keep each caption readable at a glance rather than breaking purely on a fixed word count or a fixed duration.

Gap detection: one more try on long silences

Transcription can drop a span of real speech, usually where audio is quiet, overlapping, or otherwise hard for the model to parse. Burnin looks through the caption timeline for stretches of five seconds or more with no caption. Anything shorter reads as an ordinary pause between sentences and is left alone.

Each stretch is retried on its own, on the phone

Every candidate stretch is transcribed a second time by itself, with about a second of audio on either side so the recognizer has something to settle into. Words found inside the stretch are merged with the rest of the transcript and the captions are split again. A stretch that's really silent, or only music or ambient noise, normally comes back with nothing, and then it stays uncaptioned.

This is a heuristic, not a guarantee. It reduces the chance that a real line of dialogue goes uncaptioned, but it can’t promise that every dropped span gets caught: a dropout shorter than five seconds, or one the second pass still can’t make out, stays as it was.

Burn-in: captions in the picture

When you export, the captions are drawn into the video frames themselves, so the result is one ordinary video file that plays the same way everywhere.

  • What you saw in the editor. The live preview shows the captions the way the export will draw them.
  • Your crop and resolution. Captions are burned into whichever shape and size you picked: Original, 9:16, 1:1 or 16:9, at 720p, 1080p or 4K.
  • Text too, if you need it. The SRT button in the editor exports the same captions as an .srt subtitle file instead of a video, for a platform that wants captions as a separate file.

What is still approximate

None of this is a guarantee, and it should not be treated like one

Automatic transcription makes mistakes, on any device, from any vendor. Segmentation can break a caption at an awkward point. Gap detection reduces dropped speech but cannot promise none is ever missed, especially on quiet or overlapping audio. Burnin doesn't label speakers, so in a conversation any names or dashes are yours to add. The in-app editor exists because of all of this: every caption is meant to be checked and adjusted before you export, not accepted as final.

Why on-device rather than a server

Sending video to a server for transcription would mean an account to tie the upload to, a connection every time you caption something, and a copy of your footage sitting somewhere that is not your phone. Running all four stages locally means none of that has to exist: no account, no upload, and captioning that keeps working on a flight or with the data off, once the language pack is on the device.