项目:视频字幕提取与识别工具,可输出 LRC 和文本格式
这是一个用于从视频中提取字幕区域并通过本地/远程多模态模型或 HTTP OCR 服务识别字幕文本的工具集合。项目包含:帧提取、图像拼接保存、发送图像给模型识别、以及对 OCR 结果进行评分的脚本。
subtitle_qwen_usage.py:示例/使用模板,展示如何配置ModelConfig(在qwen_config.py)并调用SubtitleExtractor进行批处理。qwen_config.py:模型和运行时配置(ModelConfig、Presets),包含本地/云端/远程的默认示例配置。subtitle_qwen.py:核心实现。负责视频帧提取(支持 ffmpeg 或基于 Python 的处理方式)、图像处理、并行提交 OCR 任务、以及将识别结果保存为 LRC/文本文件。subtitle_score.py:对 OCR 输出与标准字幕进行对比、计算准确率的工具,基于 Levenshtein 编辑距离和自定义加权距离。qwen_ocr.py:一个轻量的 HTTP 客户端封装(ImageTextRecognizer),用于将 base64 图像提交到多模态服务并获取 JSON 响应(注意:使用的后端必须能够返回 JSON)。dist.py:项目中自定义的加权编辑距离实现。
- ffmpeg: 如果使用
VideoProcessor2(基于 ffmpeg 的帧提取),需要预先安装并可在 PATH 中调用。 - 模型部署:建议在服务器/工作站上使用
vllm或其它高性能推理引擎来部署多模态模型,以获得更高吞吐和更低延迟。LM Studio 不支持 JSON 输出,无法使用。
- 环境管理
运行 uv sync 以安装所有依赖。
注意:opencv-python 不是强制依赖,仅在使用 OpenCVProcessor(已废弃,默认使用效率更高的 ffmpeg) 进行视频帧提取时需要。
- 准备模型服务
- 推荐:使用
vllm在本地或远程服务器上部署模型,保证服务能通过 HTTP 接收 base64 图片并返回 JSON 结构化结果。 - 参考:使用
Qwen2.5-VL-3B,WSL 下 4060 上运行 AWQ 版本速度约 0.1 秒/帧,受实际计算 token 数影响。命令参考uv run --frozen vllm serve ~/LLM/Qwen2.5-VL-3B-Instruct-AWQ --host 0.0.0.0 --port 2345 --dtype float16 --max-model-len 512 --max-num-seqs 32 --max-num-batched-tokens 512 --block-size 16 --gpu-memory-utilization 0.85,vllm 只支持 Linux 环境。 - 修改
subtitle_qwen_usage.py中的ModelConfig类型参数config,配置正确的base_url
- 运行样例
在 subtitle_qwen_usage.py 中修改 video_path 为实际视频文件路径,然后运行脚本。
- 图像输出:默认保存到
cache_pic/(或使用配置中指定的路径),拼接的大图像形如subtitle_<video>_<interval>.jpg。 - 文本输出:LRC 时间轴文件与纯文本分别保存到
sub/,如subtitle_<video>.lrc和.txt。
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)