有没有办法将 dvdsub(基于图像的)字幕转换为 srt?例如使用 mencoder 或 ffmpeg 与 tesseract 结合使用?
我正在寻找基于命令行的东西,并且可以接受经过几次传递。
我不太喜欢基于 GUI 的工具。
答案1
您可能已经找到了解决方案,但由于这是“ffmpeg ocr dvdsub srt”的第一个搜索结果,因此这里是我使用的工具。
https://github.com/ruediger/VobSub2SRT
它并不完美,可能需要一些编辑。
我试图在 ffmpeg 中找到一个比我的方法更好的功能,但我发现了这个,并想起了我必须去的兔子洞,所以我希望这对某些人有所帮助。
以下是我的流程
从 .mkv 中提取 dvdsub
使用 mkvtoolnix-cli 中的 mkvextract
mkvextract video.mkv tracks 2:video.idx
- arg 1 - 包含 dvdsub 的视频文件名
- arg 2 - 提取类型
- arg 3 - [包含 dvdsub 的流号]:[所需的提取文件文件名].idx
我的示例将生成一个 video.idx 和一个 video.sub 文件
从 .idx 和 .sub 文件生成 subrip
使用 vobsub2srt
vobsub2srt 使用 tesseract,我发现使用 tesseract 的传统模式效果最好。
vobsub2srt --tesseract-oem 0 video
- arg 1 - Tesseract 引擎模式(
tesseract --help-oem
用于模式) - arg 2 - 传统模式
- arg 3 - 文件名两个都.idx 和 .sub没有扩大
我的示例将生成 video.srt
检查并编辑 subrip 文件
我犯过的错误
- '|' 而不是 'I',tesseract 的传统模式似乎并不经常犯这个错误。
- ` 而不是 '
- 间距,当一行以‘-’开头时,‘-’和第一个单词之间可能没有空格。
- 丢失的 ' & ”
- 'I' 或 '|' 而不是 '[',legacy 似乎并不经常犯这个错误。
編輯
如果您不熟悉 subrip 文件,可以简单地将它们放入文本编辑器中。
grep、vim 和 sed 是你的朋友。
然而,传统模式中的大多数错误很容易被忽略。
用 subrip(srt) 替换 dvdsub
使用 ffmpeg
ffmpeg -i video.mkv -i video.srt -c copy -c:s subrip -map 0:v -map 0:a -map 1 final-video.mkv
- arg 1 & 2 - 输入 #1 - 包含 dvdsub 的视频文件
- 参数 3 & 4 - 输入 #2 - Subrip 文件
- arg 5 - 用于所有流的编解码器
- arg 6 - 复制所有流(仅复制视频和音频)
- 参数 7 - 字幕编解码器(覆盖字幕的参数 5)
- arg 8 - 选择 subrip 作为字幕编解码器(可能多余,但安全>抱歉)
- arg 9 & 10 - 将视频流从第一个输入映射到输出中的第一个流
- arg 11 & 12 - 将音频流从第一个输入映射到输出中的第二个流
- arg 13 & 14 - 将字幕流从第二个输入映射到输出中的第三个流
- arg 15-输出文件名
完成了,我希望这里没有字符限制。