我有一些包含 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/idx
会No 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,包括文本大小、样式和位置、颜色、轮廓和对齐方式。