为何FFmpeg生成MPEG-TS时无法输出ISO/IEC14496-17字幕轨道?
问题描述
我们尝试通过WebVTT字幕生成带有ISO/IEC 14496-17(MPEG-4文本)字幕轨道的MPEG-TS文件,但FFmpeg却生成了ISO 13818-1 PES私有数据。
执行的FFmpeg命令:
ffmpeg -i subtitle.vtt -c:s mov_text -f mpegts output3GPP.ts
使用的subtitle.vtt内容:
WEBVTT 00:00.000 --> 00:01.000 Subtitle 1 00:01.000 --> 00:02.000 Subtitle 2 00:02.000 --> 00:03.000 Subtitle 3 00:03.000 --> 00:04.000 Subtitle 4
通过ffprobe检测发现,生成的MPEG-TS文件字幕流被识别为不支持的bin_data;但生成MP4时却正常,对应的命令为:
ffmpeg -i subtitle.vtt -c:s mov_text -f mp4 output3GPP.ts
此时ffprobe可以正常检测到mov_text字幕轨道。
请问为何两种命令表现不同?MPEG-TS是否不支持ISO/IEC 14496-17标准?
问题解答
1. 两种命令表现差异的原因
FFmpeg针对不同容器格式的字幕封装逻辑相互独立:
- MP4容器:MP4原生兼容
mov_text(对应ISO/IEC 14496-17标准)作为字幕轨道格式,FFmpeg会直接按照MP4容器规范封装编码后的mov_text数据,因此ffprobe能正确识别。 - MPEG-TS容器:FFmpeg的MPEG-TS封装器未预设
mov_text对应的TS流标识与封装逻辑。当指定-c:s mov_text但输出为MPEG-TS时,FFmpeg找不到匹配的TS字幕封装规则,会自动退化为将mov_text数据以ISO 13818-1 PES私有数据形式封装,这就是ffprobe识别为无法解析的bin_data的原因。
2. MPEG-TS对ISO/IEC 14496-17的支持情况
MPEG-TS本身支持承载ISO/IEC 14496-17(MPEG-4文本字幕),但需要遵循特定的TS流映射规范:将MPEG-4文本字幕封装在PES包中,并设置正确的流类型标识(通常为0x15,对应MPEG-4辅助数据)。
问题并非MPEG-TS不支持该标准,而是当前版本FFmpeg的MPEG-TS封装器未实现mov_text到TS标准封装的映射逻辑,导致无法直接生成符合规范的带MPEG-4文本字幕的TS文件。
可行替代方案
如果需要生成符合标准的带MPEG-4文本字幕的MPEG-TS文件,可尝试以下两种方式:
- 使用
mpeg4text编码器替代mov_text,配合TS封装:ffmpeg -i subtitle.vtt -c:s mpeg4text -f mpegts output.ts - 将WebVTT转换为TS原生支持的字幕格式(如
dvb_subtitle或eia_608)再封装,但这类格式与MPEG-4文本并非同一标准。
内容的提问来源于stack exchange,提问作者Daniel Andres Pelaez Lopez
相关产品推荐
相关产品推荐

