# SubLens
**Repository Path**: Agions/SubLens
## Basic Information
- **Project Name**: SubLens
- **Description**: 一个高效的视频硬字幕提取工具,可以从视频中提取字幕并输出为SRT格式文件
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-03-17
- **Last Updated**: 2026-05-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# SubLens
**视频字幕提取工具** — 从视频中提取硬编码字幕,输出 SRT / VTT / ASS / JSON 等多种格式。
[](https://opensource.org/licenses/MIT)
[](https://github.com/Agions/SubLens/stargazers)
[](https://tauri.app)
[](https://vuejs.org)
[](https://www.rust-lang.org)
[](https://github.com/Agions/SubLens/actions)
[](https://github.com/Agions/SubLens/actions/workflows/CI.yml)
[](https://www.npmjs.com/package/sublens)
[](https://nodejs.org)
---
## 功能特性
### 🤖 多引擎 OCR
| 引擎 | 技术 | 精度 | 速度 | 语言 |
|:---|:---|:---:|:---:|:---:|
| **PaddleOCR** | PP-OCRv4 深度学习 | 优秀 | 快(GPU)| 80+ |
| **EasyOCR** | PyTorch | 优秀 | 中等 | 80+ |
| **Tesseract.js** | LSTM + WASM | 良好 | 最快 | 100+ |
### ✨ 智能后处理
- **多轮 OCR** — 同一区域识别多次,取最优结果
- **文本正则化** — 全角/半角标点规范化
- **置信度校准** — 混语/短文本/重复字符自动降权
- **字幕合并** — Levenshtein 相似度智能去重
- **场景检测** — 直方图 + 卡方检验跳过无字幕帧
### 📦 9 种导出格式
SRT · VTT · ASS · SSA · JSON · CSV · TXT · LRC · SBV
### 📋 ROI 预设
底部 · 顶部 · 左侧 · 右侧 · 中间 · 自定义 — 一键切换。
### 🎬 支持格式
MP4 · MKV · AVI · MOV · WebM · M4V · WMV · FLV · 3GP
---
## 快速开始
```bash
git clone https://github.com/Agions/SubLens.git
cd SubLens
pnpm install
pnpm tauri dev # 开发模式
pnpm tauri build # 生产构建
```
**前置依赖:** Node.js 18+ · Rust 1.70+ · pnpm 8+ · FFmpeg
---
## 系统架构
```
Frontend (Vue 3 + TypeScript)
┌─────────────────────────────────────────────────────────────┐
│ Files Tab │ ROI Tab │ OCR Tab │ Export Tab │ ⚙ Tab │
└──────────────────────────┬──────────────────────────────────┘
│ Tauri IPC
┌──────────────────────────┴──────────────────────────────────┐
│ Backend (Rust / Tokio) │
│ │
│ video │ scene │ export │ file │ system │ utils│
│ ├─ ffmpeg (frame extract) ├─ export_fmt (12 formats) │
│ └─ ffmpeg (metadata) └─ timestamp (SRT/VTT/ASS…) │
└──────────────────────────────────────────────────────────────┘
```
---
## 项目结构
```
SubLens/
├── src/ # Vue 3 前端
│ ├── components/ # Vue SFC 组件
│ │ ├── common/ # Button、Modal、Tooltip
│ │ ├── layout/ # ToolBar、SidePanel、VideoPreview
│ │ │ └── tabs/ # Files / Progress / ROI / OCR / Export / Settings
│ │ ├── video/ # ROISelector、Timeline
│ │ └── subtitle/ # SubtitleList、ExportDialog
│ ├── composables/ # 组合式函数(逻辑/UI 分离)
│ ├── stores/ # Pinia 状态管理
│ └── core/ # 纯业务逻辑(可 Tree-shake / 独立测试)
│ ├── Pipeline.ts # 5 阶段 OCR 后处理管道
│ ├── Exporter.ts # 9 格式导出器
│ ├── SceneDetect.ts # 直方图 + 卡方场景检测
│ └── Calibrator.ts # 置信度校准
│
├── src-tauri/src/
│ ├── lib.rs # Tauri 应用入口 + 命令注册
│ └── commands/ # Rust 命令层
│ ├── video.rs # 元数据 + 帧提取
│ ├── export.rs # 导出入口 + 类型(SubtitleItem、ExportFormat)
│ ├── export_fmt.rs # 9 格式实现
│ ├── scene.rs # 场景检测
│ ├── file.rs # 文件对话框 + 读写
│ ├── system.rs # 系统依赖诊断
│ ├── ffmpeg.rs # FFmpeg / ffprobe 输出解析
│ ├── timestamp.rs # 时间戳格式化(SRT/VTT/ASS/SSA/SBV)
│ ├── types.rs # 共享类型(ROI)
│ ├── utils.rs # 工具(TempFileGuard、UUID、脚本查找)
│ └── ocr.rs # OCR 占位(已移至前端 WASM)
│
├── docs/ # VitePress 文档站
│ ├── .vitepress/ # VitePress 配置
│ ├── guide/ # 用户指南(面向使用者)
│ │ ├── getting-started.md
│ │ ├── first-extraction.md
│ │ ├── ocr-engines.md
│ │ ├── roi.md
│ │ ├── export-formats.md
│ │ ├── keyboard-shortcuts.md
│ │ └── faq.md
│ ├── api/ # API 参考(面向开发者)
│ │ ├── commands.md
│ │ ├── pipeline.md
│ │ ├── exporter.md
│ │ ├── scene-detect.md
│ │ └── calibrator.md
│ ├── architecture.md # 深度架构文档
│ ├── developer-guide.md # 开发者指南
│ └── index.md # 文档首页
│
├── .github/ # GitHub 配置
│ └── workflows/ # CI/CD 工作流
│ ├── ci.yml # 前端质量(tsc + ESLint + Vitest)
│ ├── docs.yml # VitePress → GitHub Pages
│ └── release.yml # 发布构建
│
├── public/ # 静态资源
│ ├── logo.svg
│ └── logo-preview.html
│
└── src-tauri/ # Tauri 后端(Rust)
├── Cargo.toml
└── src/
├── lib.rs
└── commands/
```
---
## 技术栈
| 层级 | 技术 |
|:---|:---|
| 桌面框架 | Tauri 2.x |
| 前端 | Vue 3 + TypeScript + Vite + Pinia |
| 后端 | Rust(Tokio 异步运行时)|
| OCR | Tesseract.js (WASM)、EasyOCR (PyTorch)、PaddleOCR |
| 测试 | Vitest |
---
## 文档
| 文档 | 说明 |
|:---|:---|
| [docs/architecture.md](docs/architecture.md) | 前后端分层、数据流、接口定义、命名规范 |
| [docs/developer-guide.md](docs/developer-guide.md) | 环境搭建、调试、测试、添加新命令 / 新格式 |
| [CHANGELOG.md](./CHANGELOG.md) | 版本变更记录 |
---
## License
[MIT License](./LICENSE)