如何使用 ffmpeg 从 ts 中提取 "GROUP-ID"、"LANGUAGE" 和 "INSTREAM-ID"
How can I extract "GROUP-ID", "LANGUAGE" and "INSTREAM-ID" from ts using ffmpeg
我正在尝试从实时提要的片段中获取字幕。我是运行指挥部
ffmpeg -i seg-1077853030-v1-a1.ts
输出
`输入 #0,mpegts,来自 'seg-109853030-v1-a1.ts':
持续时间:00:00:06.01,开始:57867.901133,比特率:2649 kb/s
计划 1
Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], Closed Captions, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 98 kb/s
Stream #0:2[0x102]: Data: timed_id3 (ID3 / 0x20334449)`
我的问题是我应该用什么命令 运行 打印出带有包括标签和语言在内的轨道元数据的字幕文件。
如果您的 MPEG-TS 文件是 HLS 片段,则只需解析 HLS 主播放列表以检索值。
如果您的输入是从直播中捕获的,请继续阅读。
GROUP-ID
您可以在 HLS 播放列表中设置此值以指示再现组。
参见:https://www.rfc-editor.org/rfc/rfc8216#section-4.3.4.1.1
LANGUAGE
这就是事情变得有点复杂的地方。
CEA-608 字幕不包含语言代码。
对于 CEA-708 和超过 708 的 608,这被指示为 ATSC 节目和系统信息协议 (PSIP) 表的一部分,应该出现在 PMT 和 EIT 中。
cc_type
- 0
代表 608,1
代表 708
line21_field
- 当 cc_type
为 0
时:0
用于字段 1(包括通道 CC1 和 CC2),1
用于字段 2(其中包括频道 CC3 和 CC4)
caption_service_number
- 当 cc_type
是 1
INSTREAM-ID
对于 CEA-608,这可以是 CC1
、CC2
(字段 1)、CC3
、CC4
(字段 2)——其中 CC1 和 CC2 携带主要语言的普通和 easy-reader 字幕以及次要语言的 CC3 和 CC4 - 或者以 SERVICEn
的形式用于 CEA-708 服务。
这些应该在 CSD 中公布(见上文),如果有的话。
我认为 FFmpeg 默认情况下不会提取这些信息,因此您需要扩展它或编写 MPEG-TS 解析器来检索信息。有一些用于解析 MPEG-TS 和处理字幕的库(例如:Whosebug 用户@szatmary 的 libcaption)。
如果您只想提取字幕,请使用 FFmpeg 或 ccextractor
如果您想手动执行此操作,可以使用 DVBInspector 等软件查看 PSI 内容:
我正在尝试从实时提要的片段中获取字幕。我是运行指挥部
ffmpeg -i seg-1077853030-v1-a1.ts
输出
`输入 #0,mpegts,来自 'seg-109853030-v1-a1.ts': 持续时间:00:00:06.01,开始:57867.901133,比特率:2649 kb/s 计划 1
Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], Closed Captions, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 98 kb/s
Stream #0:2[0x102]: Data: timed_id3 (ID3 / 0x20334449)`
我的问题是我应该用什么命令 运行 打印出带有包括标签和语言在内的轨道元数据的字幕文件。
如果您的 MPEG-TS 文件是 HLS 片段,则只需解析 HLS 主播放列表以检索值。 如果您的输入是从直播中捕获的,请继续阅读。
GROUP-ID
您可以在 HLS 播放列表中设置此值以指示再现组。
参见:https://www.rfc-editor.org/rfc/rfc8216#section-4.3.4.1.1
LANGUAGE
这就是事情变得有点复杂的地方。
CEA-608 字幕不包含语言代码。
对于 CEA-708 和超过 708 的 608,这被指示为 ATSC 节目和系统信息协议 (PSIP) 表的一部分,应该出现在 PMT 和 EIT 中。
cc_type
-0
代表 608,1
代表 708line21_field
- 当cc_type
为0
时:0
用于字段 1(包括通道 CC1 和 CC2),1
用于字段 2(其中包括频道 CC3 和 CC4)caption_service_number
- 当cc_type
是1
INSTREAM-ID
对于 CEA-608,这可以是 CC1
、CC2
(字段 1)、CC3
、CC4
(字段 2)——其中 CC1 和 CC2 携带主要语言的普通和 easy-reader 字幕以及次要语言的 CC3 和 CC4 - 或者以 SERVICEn
的形式用于 CEA-708 服务。
这些应该在 CSD 中公布(见上文),如果有的话。
我认为 FFmpeg 默认情况下不会提取这些信息,因此您需要扩展它或编写 MPEG-TS 解析器来检索信息。有一些用于解析 MPEG-TS 和处理字幕的库(例如:Whosebug 用户@szatmary 的 libcaption)。
如果您只想提取字幕,请使用 FFmpeg 或 ccextractor
如果您想手动执行此操作,可以使用 DVBInspector 等软件查看 PSI 内容: