我有一些包含 HDMV PGS 字幕的视频文件,我需要将它们转换为 subrip(或其他文本字幕)。我知道我可以对视频文件进行 ffmpeg 解复用以提取.sup
并即时将其转换为 VobSub,然后subtitleedit /convert
使用它自己的 tesseract 进行 subrip。
但是,我只想使用 ffprobe/ffmpeg,我之前用 libtesseract 和 all 编译过。我也不介意将原始 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 成为实际的字幕而不是视频?
基于图像的字幕是一种混合媒体类型,它们包含视频数据,但被指定为字幕。几乎所有 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 -
是的,有一种新方法。
如果您愿意,您可以尝试 ffmpeg 即将推出的新增功能,它提供了在过滤器图中处理字幕的功能。目前可在此处获得:
https://github.com/ffstaging/FFmpeg/pull/18
它还包括一个用于字幕 OCR 的新 graphicssub2text 过滤器,包括文本大小、样式和位置、颜色、轮廓和对齐方式。