If someone, like me, falls into this thread, here is a slightly more detailed explanation in the ffmpeg command that worked for me.
ffmpeg -f lavfi -i movie=input.ts[out+subcc] -map 0:1 output.srt
It looks like the original data source has the mpegts format ( .ts file .ts ). Otherwise, the lavfi filter lavfi not work. The out+subcc causes ffmpeg to process closed captions (which are embedded in the frame data) as a separate stream. Later -map 0:1 does ffmpeg only displays this stream and discards everything else. The result is saved until output.srt . The display may vary depending on your input. One easy way to detect a closed signature display is to run the ffprobe command, for example
$ ffprobe -f lavfi -i movie=input.ts[out+subcc] ffprobe version N-79653-g4efd3ec Copyright (c) 2007-2016 the FFmpeg developers libavutil 55. 22.101 / 55. 22.101 libavcodec 57. 38.100 / 57. 38.100 libavformat 57. 34.103 / 57. 34.103 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 44.100 / 6. 44.100 libswscale 4. 1.100 / 4. 1.100 libswresample 2. 0.101 / 2. 0.101 libpostproc 54. 0.100 / 54. 0.100 [h264 @ 0x7fe869826200] Increasing reorder buffer to 1 Input #0, lavfi, from 'movie=input.ts[out+subcc]': Duration: N/A, start: 1562.233011, bitrate: N/A Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 90k fps, 30 tbr, 90k tbn Stream #0:1: Subtitle: eia_608
The Subtitle: eia_608 has an βindexβ of 0:1 , so this is what should be displayed.
Few markup notes, the order of the arguments matters for ffmpeg , -f lavfi must go before -i move=... , otherwise the specification will not be recognized. This function is also quite recent, so double check the version of ffmpeg and update if necessary.
Coldearning
source share