如何使用GStreamer从.ts文件中提取CEA-608/CEA-708格式的隐藏字幕至TXT文件
如何使用GStreamer从.ts文件中提取CEA-608/CEA-708格式的隐藏字幕至TXT文件
你好呀!你之前尝试的命令没生效,核心原因是filesink没法直接处理CEA-608/708这种原始字幕流——它输出的是二进制数据,不是可读的文本格式。得先把字幕解码并转换成纯文本,才能写入TXT文件。下面给你几个实用的解决方案:
方案1:针对CEA-608字幕的精准提取
如果你的TS文件里是CEA-608格式的字幕,可以用这条命令:
gst-launch-1.0 filesrc location=a.ts ! tsdemux name=demux demux. ! queue ! cea608dec ! cc2txt ! filesink location=subtitles.txt
tsdemux:负责把TS文件里的音视频、字幕轨道分离开cea608dec:专门解码CEA-608格式的隐藏字幕cc2txt:把解码后的字幕转换成纯文本格式filesink:最终把文本写入指定的TXT文件
方案2:针对CEA-708字幕的提取
如果是CEA-708格式,只需要把解码元素换成cea708dec就行:
gst-launch-1.0 filesrc location=a.ts ! tsdemux name=demux demux. ! queue ! cea708dec ! cc2txt ! filesink location=subtitles.txt
方案3:通用自动识别方案(兼容两种格式)
要是不确定字幕是哪种格式,或者想省事,可以用decodebin自动识别并处理轨道,这条命令通用性更强:
gst-launch-1.0 filesrc location=a.ts ! decodebin name=d d. ! queue ! cc2txt ! filesink location=subtitles.txt
decodebin会自动检测输入流里的所有可用轨道,包括字幕,然后自动调用对应的解码器,不用你手动指定是CEA-608还是708,非常方便。
补充说明
你之前的命令直接把原始CEA-708流写入了文件,那是二进制编码的数据,不是可读文本,所以打开后肯定看不到正常字幕内容。必须经过解码+文本转换这两步,才能得到清晰的TXT字幕文件哦。
备注:内容来源于stack exchange,提问作者Amgad Eid
相关产品推荐
相关产品推荐

