求指导:如何按DVB规范6.2.41/6.2.43生成TS文件的字幕/图文电视描述符
为TS文件添加DVB字幕/图文电视描述符(EN 300 468 v1.17.1 6.2.41/6.2.43)
ffmpeg本身没有直接封装对应这两个描述符的高级选项,但可以通过自定义TS描述符参数结合流元数据来实现,以下是具体实现方式:
一、添加字幕描述符(6.2.41)
字幕描述符用于标识DVB字幕流的属性,对应规范里的核心字段包括语言代码、字幕类型(正常/大字体/盲文等)、合成标志等。
示例命令
假设输入TS里有一条字幕流(索引为s:0),输出时注入符合6.2.41规范的字幕描述符:
ffmpeg -i input.ts -map 0 -c copy \ -metadata:s:s:0 language=eng \ -mpegts_descriptors "0x59,0x05,'eng',0x00" \ output.ts
参数对应规范字段
0x59:字幕描述符的descriptor_tag值(6.2.41明确规定)0x05:描述符长度(后续3字节语言代码+1字节字幕类型+1字节合成标志,共5字节)'eng':3字符ISO 639-2语言代码0x00:subtitle_type字段(0x00=正常字幕,0x01=大字体,0x02=盲文,可按需调整)
如果需要设置合成标志composition_flag,可扩展描述符长度并添加对应字节,比如0x59,0x06,'eng',0x00,0x01,其中0x01表示字幕为合成生成。
二、添加图文电视描述符(6.2.43)
图文电视描述符用于标识图文电视流的类型、语言等,规范规定其descriptor_tag为0x60。
示例命令
假设输入TS里有一条图文电视流(索引为v:1),注入符合6.2.43规范的描述符:
ffmpeg -i input.ts -map 0 -c copy \ -metadata:s:v:1 language=fra \ -mpegts_descriptors "0x60,0x04,'fra',0x00" \ output.ts
参数对应规范字段
0x60:图文电视描述符的descriptor_tag值(6.2.43明确规定)0x04:描述符长度(后续3字节语言代码+1字节图文电视类型,共4字节)'fra':3字符ISO 639-2语言代码0x00:teletext_type字段(0x00=正常图文电视,0x01=增强型,可按需调整)
三、关键注意事项
- 多描述符共存:若需同时添加字幕和图文电视描述符,用逗号分隔参数即可,比如
-mpegts_descriptors "0x59,0x05,'eng',0x00,0x60,0x04,'fra',0x00" - 流类型匹配:字幕描述符必须对应字幕流(stream type为0x06或0x15),图文电视描述符对应带图文子流的视频流(stream type为0x02),可通过
ffprobe -show_streams input.ts确认流的索引与类型 - 复杂字段扩展:若需设置字幕页码、图文电视杂志号等进阶字段,需严格按照规范里的字节结构,扩展描述符长度并补充对应字节值
内容的提问来源于stack exchange,提问作者hlodismy
相关产品推荐
相关产品推荐

