CEA-608 and CEA-708 are the closed caption standards developed for US broadcast television. CEA-608 dates from analog NTSC television; CEA-708 was developed for digital ATSC broadcasts. Both are legacy formats by streaming-era standards but they're still everywhere — CEA-708 captions are mandated for US broadcast TV, embedded in nearly every contribution feed and video master that came from broadcast workflows, and need to be converted to WebVTT or IMSC for streaming delivery. This page is the engineering reference for what CEA-608/708 actually are and how to handle them in modern pipelines.
What CEA-608 is
CEA-608 (formerly EIA-608) is the original closed caption standard for North American broadcast TV. It dates from the 1980s and was designed for analog NTSC video.
Technical characteristics:
- Encoding — characters are represented as 7-bit ASCII (with extensions for international characters via control codes).
- Carriage — captions are delivered in line 21 of the analog video signal (the "vertical blanking interval"), which is non-visible to viewers but available for ancillary data.
- Capacity — limited bandwidth (60 baud per field, ~960 baud total), meaning very limited bytes per second for caption text.
- Display — fixed character grid (typically 32 characters × 15 rows), monospace font, white-on-black with limited color support.
- Channels — supports two simultaneous caption streams (CC1, CC2), typically used for primary and secondary languages.
The constraints are obvious by 2026 standards. CEA-608 was designed for analog TV's bandwidth budget; the format is severely limited in capability.
For digital transmission, CEA-608 captions are typically carried as binary data within other containers (SEI messages in H.264/HEVC, or in MPEG-TS user data sections).
What CEA-708 is
CEA-708 (formerly EIA-708) is the successor standard developed for digital ATSC broadcasts. It addresses CEA-608's limitations:
- Higher bandwidth — much more bytes per second available in digital delivery.
- Richer styling — colors, fonts, sizes, positioning, opacity controls.
- Multiple service streams — up to 63 caption services per stream.
- Unicode support — proper international character support.
- Window-based display — captions delivered as positioned windows rather than fixed grid.
CEA-708 is the standard for US broadcast TV in the digital era. ATSC 1.0 (the older digital broadcast standard) and ATSC 3.0 (NextGen TV) both use CEA-708 for closed captions.
Technically, CEA-708 streams typically include CEA-608 fallback for backward compatibility — the same content delivered as both CEA-608 (for older receivers) and CEA-708 (for capable receivers).
How CEA-608/708 are carried
In modern delivery pipelines, CEA-608/708 captions are carried as ancillary data:
In MPEG-TS — captions ride in user data sections of the transport stream. The PMT (Program Map Table) signals the presence of caption services.
In H.264 — captions are embedded in SEI (Supplemental Enhancement Information) messages, specifically user_data_registered_itu_t_t35 SEI messages with appropriate identifier codes for ATSC closed captions.
In HEVC — same SEI mechanism as H.264, with HEVC-specific message identifiers.
The captions travel "with" the video stream, parsed by capable receivers, ignored by receivers that don't process closed captions.
For streaming-era pipelines, captions in SEI messages are an operational concern — they're inside the video bitstream rather than as separate caption files. Extracting them, converting to WebVTT/IMSC, and re-aligning timing is part of the typical broadcast-to-streaming conversion workflow.
Extracting CEA-608/708 from video
ffmpeg can extract CEA-608/708 captions:
ffmpeg -i input_with_608_708.mp4 -map 0:v -map -0:a -map -0:s -c:v copy \
-bsf:v "filter_units=remove_types=39|45" -vsync passthrough \
-f data extracted_captions.bin
Or using dedicated tools like ccextractor:
ccextractor input_with_608_708.mp4 -o output.srt
ccextractor is the de facto open-source tool for extracting CEA-608/708 captions and converting them to other formats (SRT, WebVTT, TTML). It handles the binary parsing of SEI messages and produces conventional caption files as output.
For pipelines that ingest content from broadcast sources, extracting CEA-608/708 and converting to WebVTT/IMSC is a standard early stage. The captions become first-class assets in the streaming pipeline, the same as captions authored directly for streaming.
Converting CEA-608/708 to streaming captions
The typical workflow:
- Extract — pull CEA-608/708 from SEI messages or MPEG-TS user data using ccextractor or equivalent.
- Parse — interpret the binary caption data into structured caption events (text, timestamp, formatting).
- Convert — translate to WebVTT (for HLS), IMSC (for DASH and broadcast), or both.
- Time-align — caption timestamps need to align with the streaming video's timeline, accounting for timestamp offsets between source and stream.
- Validate — verify the captions display correctly with appropriate timing.
Conversion is mostly mechanical but has gotchas:
- Roll-up vs pop-on captions — CEA-608/708 supports both styles. Roll-up (where lines scroll up as new lines arrive) doesn't translate directly to WebVTT's discrete-cue model. The conversion typically produces fewer-but-longer cues.
- Color and styling — CEA-708's styling translates to WebVTT/IMSC styling but with feature mismatches. Some styles are lost.
- Timing precision — broadcast caption timestamps may have lower precision than streaming caption players expect. Smoothing may be necessary.
- Service selection — broadcast caption streams may include multiple services (English primary, Spanish secondary, etc.). The conversion needs to handle service selection appropriately.
Embedding CEA-608/708 in broadcast contribution
For pipelines that produce content for broadcast (rather than just streaming), captions need to be embedded as CEA-608/708 in the contribution feed. The reverse of extraction:
- Author captions — typically in IMSC, WebVTT, or proprietary subtitle production format.
- Convert to CEA-608/708 — translate to broadcast format with appropriate constraints (character set, line/column limits).
- Embed in video — insert as SEI messages in the encoded video or as user data in MPEG-TS.
- Validate — verify captions decode correctly on broadcast caption decoders.
Tools for this: commercial captioning systems (EZTitles, WinCaps), broadcast playout systems with caption embedding, ffmpeg with appropriate filter graphs.
CEA-608/708 vs streaming caption formats
When are CEA-608/708 still relevant in 2026?
- Broadcast workflows — required for US broadcast delivery. Mandated by FCC for accessibility.
- Broadcast contribution — feeds destined for broadcast distribution include CEA-608/708.
- Source masters from broadcast — older content masters often have CEA-608/708 embedded.
- Mixed-distribution workflows — content delivered to both broadcast and streaming carries broadcast captions through the broadcast path and converts to WebVTT/IMSC for streaming.
When are streaming caption formats the right choice?
- Streaming-only delivery — author in WebVTT or IMSC; CEA-608/708 isn't needed.
- Web-first content — captions for browser/mobile delivery use WebVTT/IMSC natively.
- Modern accessibility workflows — IMSC's richer accessibility features beat CEA-708's broadcast-era constraints.
For pipelines that touch broadcast at all, CEA-608/708 handling is an unavoidable concern. For pure streaming pipelines, you can avoid CEA-608/708 entirely by authoring directly in WebVTT/IMSC.
Operational considerations
Things that matter for CEA-608/708 in production:
- SEI message preservation — re-encoding video can strip SEI messages by default. Encoder configuration must preserve closed caption SEI messages (
-bsf:v copyor specific encoder flags). - Timestamp offset handling — broadcast contribution feeds often have arbitrary timestamp bases. Aligning to streaming timeline (PTS=0 at stream start) requires explicit offset configuration.
- Service mapping — the relationship between CEA-708 services (1, 2, 3...) and language designations isn't standardized. Each broadcaster has conventions; verify the mapping for your sources.
- Roll-up timing — roll-up captions don't have explicit "end" timestamps. Conversion to discrete-cue formats requires synthesizing end times based on the next caption's start.
- Quality of caption authoring — broadcast captions are sometimes auto-generated (Live captioning with imperfect accuracy). The streaming version inherits the source quality. For premium streaming, consider re-authoring captions rather than passing through broadcast quality.
A note on FCC accessibility requirements
In the US, the FCC has detailed accessibility regulations governing closed captions on broadcast TV and on streaming video that previously aired on US TV. Key requirements:
- Captioning required — for most TV programming and most internet-distributed video that originated as TV programming.
- Quality standards — captions must be accurate, synchronous (within 1.5 seconds of the audio), complete (cover the full program), and properly placed (not obscuring important visual content).
- Online captioning — content distributed online that previously aired on TV with captions must include captions when distributed online.
- Live captioning — required for live programming with limited exceptions (sports, breaking news).
The CVAA (21st Century Communications and Video Accessibility Act, 2010) extends these requirements to internet-distributed video. For streaming services repurposing broadcast content, the captions that came with the broadcast source must continue to ship with the streaming version.
The practical implication: when broadcast sources include CEA-608/708 captions, ensure the streaming pipeline preserves and converts them. Stripping captions in the broadcast-to-streaming conversion is a regulatory issue, not just an accessibility-best-practice issue.
What MpegFlow does with CEA-608/708
MpegFlow's DAG runtime expresses CEA-608/708 handling as a discrete extraction stage in the workflow. The partitioner places it on a CcextractorExecutor worker — one of the three first-party StageExecutor implementations (alongside FfmpegExecutor and FfprobeExecutor) — and the proto executor field on the stage tells the ExecutorRegistry which binary to dispatch. Per-stage retry handles transient failures without restarting upstream work.
Cross-stage data flow connects the extraction stage's WebVTT/IMSC output into the downstream packaging stages: HLS subtitle segmentation (WebVTT) and DASH subtitle representation (IMSC) are sibling stages downstream of caption extraction, and a single broadcast source produces both delivery formats from one extraction. Sibling cancellation propagates if extraction fatally fails so dependent encodes don't waste compute.
For pipelines that need to produce broadcast contribution feeds with embedded CEA-608/708 (uncommon in MpegFlow's typical customer mix), preserving SEI captions through encode requires encoder configuration that doesn't strip user-data SEI; this is configurable at the FfmpegExecutor stage.
The strict-broker security model treats caption content like any pipeline payload — workers carry no ambient credentials, content access flows via short-lived presigned URLs scoped per stage, and the worker disposes of access on completion.
For customers ingesting broadcast content for streaming distribution (a common pattern for sports networks and news organizations migrating to streaming-first delivery), the CEA-608/708 conversion is a standard early-pipeline stage. The conversion is operationally straightforward; the editorial concern (do the converted captions read well? are timing offsets correct?) is where customer-specific QC matters.
The general advice for new captioning workflows: author directly in WebVTT or IMSC for streaming delivery. CEA-608/708 is a legacy format you handle when broadcast sources require it; for new content authored for streaming, skip the broadcast format and use the streaming-native ones.