ffprobe 字幕流的 OCR

ffprobe 字幕流的 OCR

我有一些包含 HDMV PGS 字幕的视频文件,我需要将它们转换为 subrip(或其他文本字幕)。我知道我可以使用 ffmpeg 解复用视频文件来提取.sup并即时将其转换为 VobSub,然后subtitleedit /convert使用其自己的 tesseract 将其转换为 subrip。

但是,我只想使用 ffprobe/ffmpeg,我之前已经用 libtesseract 等编译过它。我也不介意将原始 tesseract 输出解析为 subrip,但我只需要获取它。

我已经尝试过例如:

ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=pgs.mkv,ocr"

当然,它会尝试读取视频流而不是某个字幕流。将它瞄准一个.sup文件或多个字幕.mks文件.sub/idxNo video stream with index '-1' found出错,这在技术上是正确的,但是...

有没有办法让 ffprobe/ffmpeg OCR 成为真正的字幕而不是视频?

答案1

基于图像的字幕是一种混合媒体类型,它们包含视频数据,但被指定为字幕。几乎所有 ffmpeg 代码都要求实际流数据属于它们所指示的类型。因此,ffmpeg(并且只有 ffmpeg)有定制的例程来提取此类字幕。

使用

ffmpeg -f lavfi -i color=black:s=hd720 -i pgs.mkv -filter_complex "[0][1:s:0]overlay=format=yuv444:shortest=1,ocr,metadata=print:key=lavfi.ocr.text:file=subs.txt" -an -f null -

答案2

是的,有新方法。

如果您愿意,可以尝试 ffmpeg 即将推出的新功能,该功能提供了在过滤器图中处理字幕的功能。目前可在此处获得:

https://github.com/ffstaging/FFmpeg/pull/18

它还包括一个新的 graphicsub2text 过滤器,用于字幕 OCR,包括文本大小、样式和位置、颜色、轮廓和对齐方式。

相关内容