视频输出:
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 编程,但它是一种非常挑剔的工具,需要花费一些精力才能掌握并获得结果