Extract Closed Captions to SRT Using FFmpeg

Extracting embedded closed captions (such as EIA-608/708 or teletext) from a video file into a standalone SRT subtitle file is a common task in video post-production and archiving. This guide provides a straightforward, step-by-step process using the command-line tool FFmpeg to identify, decode, and export raw closed caption data into the widely compatible SubRip (SRT) format.

Step 1: Identify the Caption Stream

Before extracting, you need to inspect the video file to locate the subtitle or closed caption stream. Run the following command in your terminal:

ffmpeg -i input.mp4

Look through the output for streams labeled Subtitle. You will see lines similar to: * Stream #0:2: Subtitle: mov_text ... * Stream #0:2: Subtitle: eia_608 ...

Note the stream index (e.g., 0:2 or 0:s:0 for the first subtitle stream).

Step 2: Extract Standard Subtitle Streams

If FFmpeg detects the closed captions as a distinct subtitle stream, you can extract and convert them directly to an SRT file using the -map flag:

ffmpeg -i input.mp4 -map 0:s:0 output.srt

If there are multiple subtitle tracks and you want to extract the second one, change the map parameter to -map 0:s:1.

Step 3: Extract Embedded EIA-608/708 Captions

In many broadcast files (like MXF, TS, or certain MP4s), closed captions are embedded directly inside the video stream data rather than as a separate, easily readable subtitle track. To extract these, use FFmpeg’s lavfi (libavfilter) tool to decode and isolate the CC data:

ffmpeg -f lavfi -i "movie=input.mp4[out0+sub1]" -map 1 output.srt