从视频流中隔行扫描的 .mkv 文件中提取隐藏字幕 (CC)

从视频流中隔行扫描的 .mkv 文件中提取隐藏字幕 (CC)

视频输出:

ffmpeg -i 输出.mkv

输入 #0,matroska,webm,来自‘output.mkv’:

元数据:

编码器:libebml v1.3.6 + libmatroska v1.4.9

创作时间:2018-08-31T06:43:45.000000Z

时长:00:42:51.03,开始:0.000000,比特率:1928 kb/s

流 #0:0:视频:h264(主)、yuv420p(逐行)、960x540 [SAR 1:1 DAR 16:9]、隐藏式字幕、23.98 fps、23.98 tbr、1k tbn、47.95 tbc(默认)

使用这个:

“ffmpeg”-f lavfi-i“电影=输出.mkv[out0+subcc]”-map s“输出_map-s.srt”

我可以提取(CC),但时间代码和标签很奇怪。

1 00:00:00,019 --> 00:00:00,051 {\an7}对话

2 00:00:00,052 --> 00:00:00,134 {\an7}对话

3 00:00:00,135 --> 00:00:00,161 {\an7}对话

4 00:00:00,163 --> 00:00:00,178 {\an7}对话

5 00:00:00,179 --> 00:00:00,194 {\an7}对话

6 00:00:00,220 --> 00:00:00,246 {\an7}对话

7 00:00:00,272 --> 00:00:00,296 {\an7}-对话

提取同步(CC)的正确句子是什么。

谢谢。

答案1

这对我有用,N 是从 0 开始的字幕索引:

ffmpeg -hide_banner -i myfile.mkv -map 0:s:N subtiles_N.srt

答案2

我遇到了同样的问题,最简单的解决方案是使用 Handbrake 将其转换为 MP4 并告诉它添加 CC 作为字幕。

然后,有几种工具可以使用简单的方法将 MP4 中的字幕提取到文本 SRT 文件中。

这是一个很长的路要走,但我的媒体播放器直接拒绝播放嵌入式字幕,只想要与我想要观看的文件同名的 srt。

答案3

这里的所有答案似乎都是指字幕流(专门用于字幕的文本流或图像流)。可以通过多种方式提取这些字幕流,例如,只需使用“字幕编辑”打开文件,您就可以直接提取和处理文本字幕,或者使用 OCR 将图像字幕转换为文本,然后根据需要进行编辑。但隐藏式字幕 (CC) 是另一种野兽。隐藏式字幕是嵌入在视频流中的文本字幕,在旧式广播电视中,模拟信号通过实际电子束逐行显示在 CRT 电视屏幕上,电子束逐行物理扫描屏幕,当到达底部时,它再次回到屏幕顶部,这需要一些时间。在此期间,使用某种调制来发送未显示的信号(因为电子束正在返回起始位置),该信号编码的文本信息被解码为字幕。 CC 数据仍然可以嵌入到我们今天使用的数字文件的视频部分中,​​并且某些工具可以对其进行解码,例如 VLC 可以显示它,ffmpeg 可以访问它(例如使用“ffmpeg”-f lavfi -i“movie=output.mkv[out0+subcc]”-map s“output_map-s.srt”,如原始问题所示)。我只知道另一种可以将它们提取到具有正确时间代码的 SRT 文件(或其他格式)的工具,它是 CCExtractor,由 CFSMP3 编程,但它是一种非常挑剔的工具,需要花费一些精力才能掌握并获得结果

相关内容