{"id":49553135,"url":"https://github.com/siveci/echosrt","last_synced_at":"2026-05-10T08:05:20.754Z","repository":{"id":353842479,"uuid":"1221034558","full_name":"SiVeci/EchoSRT","owner":"SiVeci","description":"本地 AI 字幕工作站。集成 faster-whisper 语音识别与 LLM 智能翻译，提供一站式 WebUI 自动化工作流，支持 GPU 加速。","archived":false,"fork":false,"pushed_at":"2026-05-02T17:42:09.000Z","size":129,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-03T00:40:34.296Z","etag":null,"topics":["auto-subtitle","dual-subtitles","faster-whisper","gui","java","javascript","llm-translation","openai-whisper","python","subtitle-generator","transcription","translation","whisper"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SiVeci.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-25T17:04:09.000Z","updated_at":"2026-05-02T17:42:13.000Z","dependencies_parsed_at":"2026-04-25T22:00:48.705Z","dependency_job_id":"878fbcd6-3996-4eba-8db8-c7aa72e8bedc","html_url":"https://github.com/SiVeci/EchoSRT","commit_stats":null,"previous_names":["siveci/autosrt","siveci/echosrt"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/SiVeci/EchoSRT","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SiVeci%2FEchoSRT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SiVeci%2FEchoSRT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SiVeci%2FEchoSRT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SiVeci%2FEchoSRT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SiVeci","download_url":"https://codeload.github.com/SiVeci/EchoSRT/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SiVeci%2FEchoSRT/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32631058,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"ssl_error","status_checked_at":"2026-05-04T10:08:02.005Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auto-subtitle","dual-subtitles","faster-whisper","gui","java","javascript","llm-translation","openai-whisper","python","subtitle-generator","transcription","translation","whisper"],"created_at":"2026-05-03T00:32:23.635Z","updated_at":"2026-05-10T08:05:20.737Z","avatar_url":"https://github.com/SiVeci.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"frontend/logo.png\" alt=\"EchoSRT Logo\" width=\"180\"\u003e\n  \u003ch1\u003eEchoSRT 字幕工作台\u003c/h1\u003e\n  \u003cp\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Platform-Docker%20%7C%20Windows%20%7C%20Linux-brightgreen\" alt=\"Platform\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Python-3.10%2B-blue\" alt=\"Python Version\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Framework-FastAPI%20%7C%20Vue%203-orange\" alt=\"Framework\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/License-MIT-lightgrey\" alt=\"License\"\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n## 🌟 项目简介\n\n**EchoSRT** 是一个音视频字幕自动化提取与翻译工具。提供WebUI，支持本地 GPU/CPU 推理以及云端 API 处理，提供一站式、全自动流水线解决方案。\n## ✨ 核心特性\n\n- **双引擎语音识别 (ASR)**：\n  - **本地引擎**：内置 `faster-whisper`，自动探测 NVIDIA CUDA 硬件加速或回退 CPU 模式，支持 VAD 静音过滤、Beam Size 等高阶参数。\n  - **云端引擎**：支持 OpenAI 格式的语音 API，针对超大文件实现了突破 25MB 限制的物理切片与时间戳重排机制。\n- **大语言模型智能翻译 (LLM)**：基于并发信号量 (`asyncio.Semaphore`) 实现字幕分块异步翻译。支持 DeepSeek、ChatGPT 等任意兼容 OpenAI 接口的模型，结合上下文自动润色，生成“熟肉”字幕。\n- **自动化非阻塞流水线**：后端基于 FastAPI + `asyncio.Queue` 实现多任务调度，支持批量下发处理。\n- **可视化 Web 工作台**：Vue 3 前端，提供实时 WebSocket 状态同步、滚动日志输出与看板式资产管理。\n- **强大的分流代理机制**：支持按模块（模型下载 / 云端 ASR / LLM 翻译）独立接管 HTTP/SOCKS5 网络代理。\n- **多平台 Docker 部署**：提供 CPU 和 GPU 独立镜像，支持快捷部署。\n\n---\n\n## 🚀 快速部署\n\n### 方案一：Docker 部署 (推荐)\n\n#### 1. 使用 Docker Compose 启动 (最简单)\n已提供云端预编译镜像，在项目根目录下直接使用 `docker-compose` 启动：\n\n```bash\n# 启动 CPU 节点（适合绝大多数无显卡的家用 NAS 或服务器）\ndocker-compose up -d echosrt-cpu\n\n# 或者：启动 GPU 节点（需在宿主机安装 NVIDIA Container Toolkit 及驱动）\ndocker-compose up -d echosrt-gpu\n```\n\n#### 2. 使用 Docker CLI 手动启动\n使用 `docker run` 命令启动预编译镜像：\n```bash\n# CPU 版本\ndocker run -d --name echosrt-cpu \\\n  -p 8000:8000 \\\n  -v $(pwd)/workspace:/app/workspace \\\n  -v $(pwd)/models:/app/models \\\n  ghcr.io/siveci/echosrt:cpu-latest\n\n# GPU 版本 (需增加 --gpus all 参数)\ndocker run -d --name echosrt-gpu \\\n  --gpus all \\\n  -p 8000:8000 \\\n  -v $(pwd)/workspace:/app/workspace \\\n  -v $(pwd)/models:/app/models \\\n  ghcr.io/siveci/echosrt:gpu-latest\n```\n\n#### 3. 手动构建镜像 (可选)\n```bash\n# 构建 CPU 镜像\ndocker build -t echosrt:cpu-local -f Dockerfile .\n\n# 构建 GPU 镜像\ndocker build -t echosrt:gpu-local -f Dockerfile.gpu .\n\n#构建完成后，将上述 `docker run` 命令中的镜像名称替换为构建的镜像名后运行\n```\n\n### 方案二：本地 Python 运行\n```bash\n# 1. 安装 FFmpeg\n# Windows: 下载 FFmpeg 并在项目根目录创建 bin/ffmpeg/bin/ 放入 ffmpeg.exe\n# Linux: sudo apt install ffmpeg\n\n# 2. 安装 Python 依赖\npip install -r requirements.txt\n\n# 3. 启动后台服务与 WebUI\npython app.py\n```\n\n*(注：命令行交互，运行 `python main.py`)*\n\n---\n\n## 🛠️ 使用指南\n\n### 1. 访问WebUI工作台\n- 浏览器打开`http://127.0.0.1:8000`或`http://[远程IP]:8000`进入工作台\n- 访问 `/docs` 查看 API 接口文档。。\n\n### 2. 工作区与流水线\n- 在 **[任务工作区]** 拖拽上传视频或音频文件，系统支持批量排队上传，音频文件将自动经过 FFmpeg 进行标准化 16kHz 单声道重采样。\n- 勾选任务并点击“执行全量工作流”，后端会在后台自动串行执行提音、识别、翻译。\n\n### 3. ASR 识别调优\n- **本地模式**：对于含有大量环境噪音的视频，建议在「高级设置 -\u003e 阈值过滤」中开启 **VAD 智能静音过滤**，减少模型的“幻觉”复读并提升推理速度。\n- **云端模式**：长音频切片上传过程全自动完成，如果使用非官方的第三方代理接口，请注意调整大文件网络超时时间。\n\n### 4. LLM 翻译设置\n- 填入 API Base URL 和 API Key。\n- 自定义 **Prompt** 强制大模型输出特定风格（例如语气、设定、特定角色人名映射等）。\n\n---\n\n## 📁 项目结构 (Monorepo)\n```text\n├── api/                # FastAPI 路由、服务逻辑与任务 Worker 车间\n│   ├── routers/        # Web API 接口\n│   ├── services/       # 配置层与文件流操作\n│   └── workers/        # 异步队列消费进程\n├── core/               # 底层算法库\n├── frontend/           # 前端代码与静态资源\n├── config/             # 配置文件目录\n├── models/             # Faster-Whisper 离线模型文件\n├── workspace/          # 音视频及字幕任务产物存储区\n├── app.py              # WebUI \u0026 API 后端启动入口\n├── main.py             # CLI 命令行交互入口\n├── docker-compose.yml  \n└── Dockerfile          \n```\n\n---\n\n## ⚙️ 系统要求\n\n| 维度 | 要求 |\n| :--- | :--- |\n| **操作系统** | Windows 10+ / Linux |\n| **Docker** | 支持 linux/amd64 (GPU 版需具备 NVIDIA Runtime) |\n| **Python** | 3.10 - 3.12（推荐 3.12.x） |\n| **硬件(推荐)** | 至少 8GB 内存；使用本地 GPU 引擎推荐至少 6GB+ 显存的 NVIDIA 显卡 |\n\n\u003e **💡 Docker 权限说明**：如果在 NAS (如群晖、Unraid 等) 上部署遇到读写权限的问题，增加环境变量 `-e PUID=1000` 和 `-e PGID=1000` (替换为实际的 UID/GID)，容器将会自动对齐挂载目录的读写权限。\n\n## TODO\n\n- [x] **分流代理控制**：云端识别API和LLM 翻译API可独立选择是否使用全局代理。（v1.0.0 实装）\n- [x] **API 多方案管理系统**：支持预设多套 API 配置及快速切换。（v1.1.0 实装）\n- [x] **媒体库扫描与状态自愈**：支持一次性全量扫描并根据磁盘状态自愈。（v1.1.0 实装）\n- [x] **下载与资产管理标准化**：统一了全局带进度条的下载交互逻辑。（v1.1.0 实装）\n- [ ] **API 自动轮询与故障自愈**：在遇到可恢复错误（如 HTTP 429/401）时，自动切换方案池中的下一个可用方案，并支持断点接管。\n- [ ] **LLM 翻译断点续传**：翻译模块增加“断点续传/缓存”机制，避免长视频翻译意外中断后从头开始。\n- [ ] **任务插队机制**：后端队列基于 `PriorityQueue` 重构，允许紧急任务无视先来后到，直接插入队列最前端。\n- [ ] **全局队列进度透明化**：“流水线看板”中应直接显示具体的进度百分比与子状态（如“正在提音 45%”）。\n- [ ] **智能静音切片 (VAD 切分)**：解决超长音频一刀切断导致时间轴断裂与薛定谔“幻觉”的问题，支持静音区安全切片。\n- [ ] **模型适用语言标注**：在模型下拉列表中，增加 Whisper 模型的适用识别语言标注。\n- [ ] **空间管理优化**：提供“清理中间产物”选项，并在面板显示任务占用的磁盘空间大小。\n- [ ] **WebSocket 断线重连**：加入断线自动重连机制，并结合长轮询作为兜底。\n- [ ] **模型下载进度显示优化**：优化后台拉取巨型模型时的数据量和进度条动态显示体验。\n---\n\n## ⚠️ 免责声明\n1. **合法使用**：本项目仅供技术研究、个人视频剪辑与字幕制作辅助使用。\n2. **接口规范**：请用户自行准备合规的 LLM API 及云端识别 API，确保使用不违反当地法律法规及服务商的使用条款。\n3. **开源许可**：本项目基于 MIT 协议开源，完全免费，由第三方模型引起的任何输出内容问题概不负责。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiveci%2Fechosrt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsiveci%2Fechosrt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiveci%2Fechosrt/lists"}