<!-- https://maestroconsole.com/youtube-live-captions/ · Live captions on YouTube without a caption encoder — Maestro Console -->

# Live captions on YouTube, without a caption encoder

*Updated 2026-09-25*

The classic way to caption a live broadcast is a caption encoder in the video chain. A YouTube livestream has a second way in — posting the captions to YouTube directly — and for a performance with a prepared surtitle script it is usually the better one.

## Two ways captions reach a YouTube livestream

**Embedded in the video.** The captions travel inside the video signal as CEA-608 data. A caption encoder sits in the chain, typically a unit in the SDI rack, and inserts them before the stream encoder sends the picture to YouTube. It works, but it is one more piece of hardware to buy, rack, wire and keep alive, and the captions are only as dependable as that box.

**Posted to YouTube.** YouTube Live can also take captions over the internet, separately from the video. Each line is sent to an ingestion URL that YouTube provides for the stream, and YouTube adds it to the broadcast as closed captions that viewers switch on with the CC button. Nothing is added to the video path at all.

## Why posting suits a live performance

- **The text already exists.** Surtitles are written and translated before the curtain goes up. The operator is releasing prepared lines at the right moment, not transcribing, and that is exactly what posting carries.
- **No new failure point in the picture.** Because captions travel separately, a problem with the caption feed never touches the video. The stream keeps going.
- **Your translation, not a guess.** YouTube can generate automatic live captions from speech in some languages, but speech recognition is not built for sung text, and it cannot give viewers the translation your surtitle team prepared.
- **One keypress, every screen.** The same cue that goes to the stream goes to the projection in the house and to the audience's phones, so the three can never disagree.

## What it takes

1. In YouTube Studio, open the live stream's settings, turn on closed captions and choose to post captions to a URL. YouTube shows the ingestion URL for that stream.
2. Paste the ingestion URL into Maestro Console. If you broadcast more than one stream, add each one; every cue goes to all of them at the same moment.
3. Choose what the stream carries: one language, or two shown together and optionally tagged [FR], [NL] and so on. Each stream can also be given its own language, so a French and an English stream can run side by side.
4. Set the delay. A livestream reaches viewers some seconds behind the stage, so the captions are held back — 0 to 30 seconds, in half-second steps — until they land with the picture people actually see. Watch the public stream on a phone and adjust.
5. Run the show. Each press of Space posts the cue to YouTube at the same moment it reaches the projection and the phones, which are never delayed.

Keep the stream on normal or low latency: YouTube does not support closed captions with its ultra-low-latency setting.

## What happens under the hood

- **Each line is one HTTP POST** to the ingestion URL: a UTC timestamp on the first line, the caption text below it, and a sequence number in the URL.
- **Sequence numbers are reserved before sending.** When a delay is set, cues overlap in flight, and YouTube silently drops a caption whose sequence number repeats. Each cue claims its block of numbers first, so none are ever reused.
- **Lines go out 0.2 seconds apart**, to every stream in parallel, in the background. A slow answer from YouTube never holds up the projection or the phones.
- **Blackout sends four blank lines**, which rolls the last caption out of YouTube's caption window during instrumental passages.
- **Undo re-posts the previous line**, so a wrong caption is replaced on the stream rather than left up.
- **Recording keeps an SRT file per stream language**, timed from the performance itself — a starting point for the on-demand video.

## Worth knowing

- The stream carries one or two languages at a time. The audience's phones carry every language in the script.
- Posting needs an internet connection at the operating position. The projection and the phones run on the local network and do not.
- The delay is best set against the real public stream on the day, since stream latency depends on your encoder and settings.

## See it with your own stream.

Send a scene from your script and the languages you broadcast in, and the demo runs on your material.

[Request a demo](https://maestroconsole.com/contact/)
