0

我正在尝试从实时提要的片段中获取字幕。我正在运行命令

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)`

我的问题是我应该运行什么命令来打印带有轨道元数据的字幕文件,包括标签和语言。

4

1 回答 1

1

如果您的 MPEG-TS 文件是 HLS 段,则只需解析 HLS 主播放列表以检索值。如果您的输入是从现场直播中捕获的,请继续阅读。

  1. GROUP-ID

您可以在 HLS 播放列表中设置此值以指示再现的组。

见:https ://www.rfc-editor.org/rfc/rfc8216#section-4.3.4.1.1

  1. LANGUAGE

这是事情变得有点复杂的地方。

在此处输入图像描述

CEA-608 字幕不包括语言代码。

对于 CEA-708 和 608 over 708,这表示为 ATSC 程序和系统信息协议 (PSIP) 表的一部分,该表应存在于 PMT 和 EIT 中。

字幕服务描述符

字幕服务描述符(续)

  • cc_type-0对于 608,1对于 708
  • line21_field- 何时cc_type0对于0字段 1(包括通道 CC1 和 CC2)和1对于字段 2(包括通道 CC3 和 CC4)
  • caption_service_number- 什么cc_type时候1
  1. INSTREAM-ID

这可以是CEA-608 的CC1, CC2(field 1), CC3, CC4(field 2) - 其中 CC1 和 CC2 为主要语言提供正常且易于阅读的字幕,而 CC3 和 CC4 为辅助语言 - 或SERVICEnCEA的形式-708 服务。

如果有的话,这些应该在 CSD 中公布(见上文)。

我不认为 FFmpeg 默认情况下会提取这些信息,因此您需要对其进行扩展或编写 MPEG-TS 解析器来检索信息。有一些用于解析 MPEG-TS 和处理字幕的库(例如: StackOverflow 用户@szatmary的 libcaption)。

如果您只想提取字幕,请使用 FFmpeg 或ccextractor

如果您想手动执行此操作,可以使用DVBInspector等软件查看 PSI 内容:

DVBInspector CSD

于 2020-11-21T13:35:20.470 回答