通过帧差法判断是否相同帧, 进而由相同帧得出字幕时间轴
计算时间轴对应帧的 SSIM , 合并相同的时间轴
将指定字幕区域二值化得到只包含字幕的图片, 之后利用 OCR 精准识别字幕
目前使用百度 OCR 、腾讯 OCR 接口
有生之年的目标是引入 tesseract-ocr PaddleOCR
Windows 系统 ( macOS 未经测试, 但是理论上没有问题)
Python 3.x (建议 Python 3.7 及以上)
在 Release 页面下载 Zip 格式的 Source code 并解压
在命令行执行
pip install setuptools
pip install opencv-python Pillow scikit-image scipy requests ttkthemes
将会自动安装所依赖的模块
点击这里 在百度智能云创建文字识别应用, 在应用列表页面可以看到 API Key 和 Secret Key
百度OCR提供多个通用文字识别接口, 虽然官网显示不保证并发, 但是实测 QPS 至少能达到 3:
接口 | 通用文字识别 | 通用文字识别(含位置信息版) | 通用文字识别(高精度版) | 通用文字识别(高精度含位置版) | 网络图片文字识别 |
---|---|---|---|---|---|
免费额度 | 50000次/日 | 500次/日 | 500次/日 | 50次/日 | 500次/日 |
因为百度云是按行识别, 所以位置信息不是我们所必需的, 最基本的通用文字识别即可满足大部分需求
其中, 通用文字识别和通用文字识别(高精度版)支持中英文混合, 英文, 葡萄牙语, 法语, 德语, 意大利语, 西班牙语, 俄语, 日语, 韩语 10 钟语言类型
腾讯AI开放平台的文字识别服务已并入腾讯云,暂未做接入
实际测试来看, 两个 OCR 的表现都很不错, 腾讯 OCR 的精确度略微高于百度但也相差不大, 百度 OCR 的 QPS 能达到 3 但是字幕数量最多也就一千多条, 所以时间也不会相差太多
有中文之外的需求, 直接选择百度OCR
- 启动 index.pyw
- 首次启动会要求输入 OCR 的相关信息
,也可以选择使用共享API进行体验共享API存在较大QPS限制,建议体验结束后注册并填写自己的API信息
- 首次启动会要求输入 OCR 的相关信息
- 选择视频并调整参数
- 调整字幕区域使其只包含字幕
- 调整二值化阈值, 尽可能使图片只包含字幕且字幕尽量黑
- 移动最下方的滚动条查看不同帧的效果
- 开始提取时间轴并识别字幕
- 时间轴提取完成后会自动开始识别字幕, 字幕识别完成后会输出带时间轴的字幕文件, 后缀为.srt
- 时间轴提取完成但字幕识别出现错误, 可以直接重新识别字幕, 时间轴信息不会丢失
- 在 output 文件夹查看输出结果
在"参数"页面调整的参数不会作为默认值被保存到文件, 如果需要调整这些参数的默认值, 请直接修改 config.json 文件 建议只根据需要修改 binary_threshold 二值化阈值的默认值