Skip to content

better-er/subtitle-extract-tool

Repository files navigation

项目:视频字幕提取与识别工具,可输出 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 输出,无法使用。

快速开始

  1. 环境管理

运行 uv sync 以安装所有依赖。

注意:opencv-python 不是强制依赖,仅在使用 OpenCVProcessor(已废弃,默认使用效率更高的 ffmpeg) 进行视频帧提取时需要。

  1. 准备模型服务
  • 推荐:使用 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
  1. 运行样例

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)

About

视频字幕提取与识别工具,可输出 LRC 和文本格式

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages