# VideOCR
**Repository Path**: kulke/VideOCR
## Basic Information
- **Project Name**: VideOCR
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-12-03
- **Last Updated**: 2025-12-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[English](https://github.com/timminator/VideOCR/blob/master/README.md) | 中文
VideOCR
从视频中提取硬编码字幕!
## ℹ 关于
通过简单易用的图形界面,利用 [PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR) OCR引擎,从视频中提取硬编码(烧录)字幕。所有配置均可通过点击轻松完成。
此仓库还提供了可与PaddleOCR结合使用的命令行版本VideOCR。
最新版本集成了PaddleOCR的最新版本,OCR能力大幅提升。
## 安装
### Windows:
您可以使用安装程序进行安装,也可以直接下载包含所有必需文件(包括可执行文件)的压缩包,解压到目标位置即可。
### Linux:
从发布页面下载压缩包,解压到目标位置。
如需将VideOCR添加到应用程序菜单,可在解压后的目录中打开终端并运行以下命令:
```
./install_videocr.sh
```
此命令将创建VideOCR的快捷方式。如需移除,可运行:
```
./uninstall_videocr.sh
```
## 使用说明
导入视频后,可通过时间轴或左右方向键浏览视频内容。通过点击拖拽的方式在视频上绘制裁剪框,选择字幕区域。完成后,点击“运行”按钮开始字幕提取。
更多选项可在“高级设置”选项卡中配置,详细信息可参考CLI版本的参数说明。

## 命令行版本(CLI)使用说明
解压压缩包后,在目标位置打开终端,运行以下命令:
### Windows:
```
.\videocr-cli.exe -h
```
### Linux:
```
./videocr-cli -h
```
### 示例用法(Windows):
```
.\videocr-cli.exe --video_path "视频路径\example.mp4" --output "字幕保存路径\example.srt" --lang en --time_start "18:40" --use_gpu true
```
更多参数说明请参考下文。
## 性能说明
在CPU上运行OCR过程可能较慢,建议搭配GPU使用。
## 小贴士
裁剪时,在文字上下方留出一定的缓冲空间以提高识别准确率,但不要将裁剪框设置得过大。
### 快速配置参考
|| 更高速度 | 更高准确率 | 备注
-|------------|---------------|--------
输入视频质量 | 使用较低质量 | 使用较高质量 | 高分辨率视频的性能影响可通过裁剪减轻
`frames_to_skip` | 数值更高 | 数值更低 | 如需完全准确的时间戳,此参数需设为0。
`SSIM阈值` | 阈值更低 | 阈值更高 | 若连续帧的SSIM超过此阈值,则跳过OCR。较低的值可显著减少OCR处理的帧数。
## 命令行参数说明(CLI版本)
- `video_path`
待提取字幕的视频路径。
- `output`
字幕文件(.srt)保存路径。
- `lang`
字幕语言。支持的语言及缩写请参考[PaddleOCR文档](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.10/docs/ppocr/blog/multi_languages.en.md#5-support-languages-and-abbreviations)。
- `subtitle_position`
指定字幕在视频中的对齐方式,有助于提升识别准确率。
- `conf_threshold`
文字预测的置信度阈值。低于此值的文字将被忽略。默认值`75`适用于大多数场景。
若每行文字过少,可降低此值;若每行文字过多,可提高此值。
- `sim_threshold`
字幕行的相似度阈值。基于[Levenshtein距离](https://en.wikipedia.org/wiki/Levenshtein_distance),高于此阈值的字幕行将被合并。默认值`80`适用于大多数场景。
若字幕行重复过多,可降低此值;若字幕行过少,可提高此值。
- `ssim_threshold`
若连续帧的SSIM超过此阈值,则跳过OCR。较低的值可减少OCR处理的帧数。在字幕区域裁剪较精确时,此值可降至85。
- `post_processing`
启用后处理步骤,自动分析并修复缺失的空格(PaddleOCR常见问题)。目前仅支持英语、西班牙语、葡萄牙语、德语、意大利语和法语。详情请参考[wordninja-enhanced](https://github.com/timminator/wordninja-enhanced)仓库。
- `max_merge_gap`
合并相似字幕的最大时间间隔(秒)。默认值0.09(90毫秒)适用于大多数场景。
若发现相同字幕被错误分割为多条,可增加此值。
- `time_start` 和 `time_end`
仅提取视频片段中的字幕。时间戳仍以完整视频长度计算。
- `use_fullframe`
默认使用裁剪区域或底部三分之一帧进行OCR。设为`True`时,将使用完整帧。
- `use_dual_zone`
启用后,可指定两个OCR区域。
- `crop_x(2)`, `crop_y(2)`, `crop_width(2)`, `crop_height(2)`
指定OCR区域的像素范围。示例见下图:

- `use_gpu`
设为`True`时,使用GPU进行OCR。
- `use_angle_cls`
设为`True`时,启用分类功能。
- `brightness_threshold`
若设置,亮度低于此阈值的像素将被置黑。有效范围为0(黑)至255(白)。适用于白色字幕的视频。
- `frames_to_skip`
OCR前跳过的帧数。调整时需注意视频的fps。
- `min_subtitle_duration`
短于此阈值的字幕将被忽略。
- `use_server_model`
默认使用轻量模型进行OCR。启用后将使用服务器模型,提升检测效果,但会消耗更多资源。建议仅在GPU版本中使用。
## 构建与编译说明
- 要求:
- Python 3.9或更高版本
- Windows:
- C++构建工具(如Visual Studio的“使用C++的桌面开发”套件)
- 7zip(需添加到PATH)
- Tkinter(Windows默认Python安装包含)
- Linux:
- 7zip
- Tkinter
- 建议安装dbus
- 步骤:
- 克隆仓库到目标位置:
```bash
git clone https://github.com/timminator/VideOCR.git
```
- 进入目录并安装依赖:
```bash
cd VideOCR
pip install -e ".[dev]"
```
- 运行构建脚本:
```bash
python build.py --target cpu
```
更多信息可通过以下命令查看:
```bash
python build.py -h
```