把长音频变成精修级中文字幕。
音频/视频 → 人声分离 → VAD + ASR → 稳定化 → LLM 纠错翻译 → 成品 SRT
以主播游戏实况(日语)为例:
时间轴——原生 Whisper 输出 vs 稳定化后的 raw 轴:
# 原生 Whisper(幻觉 + 碎片 + 超长句)
00:00:24.500 --> 00:00:27.800 ご視聴ありがとうござい ← ASR 幻觉
00:00:27.800 --> 00:00:29.100 あの、なんだっけ?
00:00:29.100 --> 00:00:30.200 メミじゃなくて、 ← 碎片
00:00:30.200 --> 00:00:31.500 ユメじゃなくて ← 碎片
00:00:34.800 --> 00:00:42.000 じゃあなんかがなんかして 最後の遺産が時が来てそれを得て ← 超长句
# 稳定化后(幻觉丢弃、碎片合并、超长句拆分、时间精准)
00:00:27.800 --> 00:00:29.000 あの、なんだっけ?
00:00:29.600 --> 00:00:31.200 メミじゃなくて、ユメじゃなくて
00:00:34.800 --> 00:00:37.850 じゃあなんかがなんかして
00:00:38.144 --> 00:00:42.067 最後の遺産が時が来てそれを得て
纠错翻译——结合音频/画面语境:
| raw ASR | 纠错翻译后 |
|---|---|
ほんまに?新書に変わってる。あ、ほんとだ。 | 真的吗?换成新衣服了。啊,真的耶。 |
ネジがやっぱ分かりやすいな | 发条果然很明显呢。 |
ごめんごめん 怖どらないで | 抱歉抱歉,别害怕。 |
核心特色:
如果觉得好用,欢迎点个 Star ⭐
用 uv 安装:
winget install astral-sh.uv # 没有 uv 的话先安装 uv(装完需开新终端再跑下一条)
uv tool install finesub
安装的是一个轻量外壳:首次运行时会自动安装隔离的 Python 运行环境(无需预装 Python)与 FFmpeg,模型按需下载;所有数据存放于 %LOCALAPPDATA%\FineSub 下(大文件可通过 finesub relocate 迁移到其他磁盘),执行 finesub uninstall 即可完整卸载。设置、API Key 和知识库放在 user-data 下,一处配置、处处生效。子命令与细节见 cli/README.md,数据位置见 docs/manual/resources.md。
想改代码或跑开发版的话,clone 仓库后按 仓库安装 装好依赖(含 ASR 必需的补丁版 CTranslate2),入口是 python -m finesub.pipeline,参数与下文的 finesub 完全相同。
# 音频、视频输入都可
finesub <输入名>.mp4 --language ja --extra-info "主播四月一日,原神直播切片" --stage final-srt --knowledge update
# URL 也行
finesub "https://www.bilibili.com/video/BVxxxx" --stage final-srt --name "四月一看PV"
其中:
--language 时自动检测语言;--extra-info 提供背景信息(主播名、游戏名、关键专名等),能显著提升纠错准确率,非必须。--stage 则默认停在 raw SRT(ASR 结果,不调 API);加 --stage final-srt 跑 LLM 纠错翻译。这一步需要配置 API 或 agent,二选一或组合:
.env);推荐再配上 Exa API key;都是免费的,见 环境配置。--knowledge collect):已有内容会自动注入,本次任务不改动它。传 --knowledge update 才在纠错后把本次的发现写回;传 --knowledge none 则完全不读也不写。--name 以指定和覆盖输入名。--style <名字> 让译文沿用知识库里记好的一套翻译口味(某字幕组的用词与断句习惯);不传则用库里的 default_style(如果有)。怎么建一套、怎么让它边翻边学(--style-mode),见 知识库。运行结束后,在 out/<输入名>/ 目录中查看字幕:<输入名>.srt(成品)与 <输入名>-raw.srt(未经纠错的原文)。其余文件的含义与可删除范围,见 运行产物。
同一条命令传入多个输入(或 --manifest tasks.jsonl)即为批量处理:三段流水线并行推进,单项失败不影响其他任务,运行期间可增删任务、调整优先级,中断后 finesub --resume-batch 续跑——细节见 一次跑多个输入。
LLM 路线/档位、知识库、搜索代理、token 预算等细节见 LLM Harness 行为 和 知识库说明。
以 data/input.mp4 跑到 --stage final-srt 为例:
| 文件 | 说明 |
|---|---|
input-raw.srt | 未纠错原文 SRT |
input.srt | 成品 SRT(纠错翻译+后处理) |
全部产物归到 out/input/ 一个目录下。完整产物树见 README_DEV.md。
| 阶段 | 需要 |
|---|---|
| 人声分离 + ASR | NVIDIA 显卡(见下)、≥8GB 内存 |
| LLM 纠错翻译 | 无需 GPU;≥4GB 内存;ffmpeg(托管 CLI 自动提供) |
显卡须为 RTX 20 系或更新(GTX 1660 / 1650,和部分其他卡亦可)。显存 ≥4GB;≥8GB 更佳。完整型号表、各档位的显存要求与不支持时的处理方式,见 显卡支持范围与档位。
URL 输入开箱即用。
面向使用者:
--stage 停在哪个阶段、低置信度行在哪里查看如需了解实现层:开发者说明 为入口,docs/ 根下的其余文件面向开发者(约定见 docs/README.md)。
代码 GPL-3.0-or-later(自 0.5.0 起;0.4.x 及更早的发行版仍按 MIT 授权,不受本次变更影响);src/finesub/llm/prompt_templates/ 下的 prompt 明文 CC BY-SA 4.0。
20 commits
3 commits
Python
90.0%
HTML
9.4%
把长音频变成精修级中文字幕。
音频/视频 → 人声分离 → VAD + ASR → 稳定化 → LLM 纠错翻译 → 成品 SRT
以主播游戏实况(日语)为例:
时间轴——原生 Whisper 输出 vs 稳定化后的 raw 轴:
# 原生 Whisper(幻觉 + 碎片 + 超长句)
00:00:24.500 --> 00:00:27.800 ご視聴ありがとうござい ← ASR 幻觉
00:00:27.800 --> 00:00:29.100 あの、なんだっけ?
00:00:29.100 --> 00:00:30.200 メミじゃなくて、 ← 碎片
00:00:30.200 --> 00:00:31.500 ユメじゃなくて ← 碎片
00:00:34.800 --> 00:00:42.000 じゃあなんかがなんかして 最後の遺産が時が来てそれを得て ← 超长句
# 稳定化后(幻觉丢弃、碎片合并、超长句拆分、时间精准)
00:00:27.800 --> 00:00:29.000 あの、なんだっけ?
00:00:29.600 --> 00:00:31.200 メミじゃなくて、ユメじゃなくて
00:00:34.800 --> 00:00:37.850 じゃあなんかがなんかして
00:00:38.144 --> 00:00:42.067 最後の遺産が時が来てそれを得て
纠错翻译——结合音频/画面语境:
| raw ASR | 纠错翻译后 |
|---|---|
ほんまに?新書に変わってる。あ、ほんとだ。 | 真的吗?换成新衣服了。啊,真的耶。 |
ネジがやっぱ分かりやすいな | 发条果然很明显呢。 |
ごめんごめん 怖どらないで | 抱歉抱歉,别害怕。 |
核心特色:
如果觉得好用,欢迎点个 Star ⭐
用 uv 安装:
winget install astral-sh.uv # 没有 uv 的话先安装 uv(装完需开新终端再跑下一条)
uv tool install finesub
安装的是一个轻量外壳:首次运行时会自动安装隔离的 Python 运行环境(无需预装 Python)与 FFmpeg,模型按需下载;所有数据存放于 %LOCALAPPDATA%\FineSub 下(大文件可通过 finesub relocate 迁移到其他磁盘),执行 finesub uninstall 即可完整卸载。设置、API Key 和知识库放在 user-data 下,一处配置、处处生效。子命令与细节见 cli/README.md,数据位置见 docs/manual/resources.md。
想改代码或跑开发版的话,clone 仓库后按 仓库安装 装好依赖(含 ASR 必需的补丁版 CTranslate2),入口是 python -m finesub.pipeline,参数与下文的 finesub 完全相同。
# 音频、视频输入都可
finesub <输入名>.mp4 --language ja --extra-info "主播四月一日,原神直播切片" --stage final-srt --knowledge update
# URL 也行
finesub "https://www.bilibili.com/video/BVxxxx" --stage final-srt --name "四月一看PV"
其中:
--language 时自动检测语言;--extra-info 提供背景信息(主播名、游戏名、关键专名等),能显著提升纠错准确率,非必须。--stage 则默认停在 raw SRT(ASR 结果,不调 API);加 --stage final-srt 跑 LLM 纠错翻译。这一步需要配置 API 或 agent,二选一或组合:
.env);推荐再配上 Exa API key;都是免费的,见 环境配置。--knowledge collect):已有内容会自动注入,本次任务不改动它。传 --knowledge update 才在纠错后把本次的发现写回;传 --knowledge none 则完全不读也不写。--name 以指定和覆盖输入名。--style <名字> 让译文沿用知识库里记好的一套翻译口味(某字幕组的用词与断句习惯);不传则用库里的 default_style(如果有)。怎么建一套、怎么让它边翻边学(--style-mode),见 知识库。运行结束后,在 out/<输入名>/ 目录中查看字幕:<输入名>.srt(成品)与 <输入名>-raw.srt(未经纠错的原文)。其余文件的含义与可删除范围,见 运行产物。
同一条命令传入多个输入(或 --manifest tasks.jsonl)即为批量处理:三段流水线并行推进,单项失败不影响其他任务,运行期间可增删任务、调整优先级,中断后 finesub --resume-batch 续跑——细节见 一次跑多个输入。
LLM 路线/档位、知识库、搜索代理、token 预算等细节见 LLM Harness 行为 和 知识库说明。
以 data/input.mp4 跑到 --stage final-srt 为例:
| 文件 | 说明 |
|---|---|
input-raw.srt | 未纠错原文 SRT |
input.srt | 成品 SRT(纠错翻译+后处理) |
全部产物归到 out/input/ 一个目录下。完整产物树见 README_DEV.md。
| 阶段 | 需要 |
|---|---|
| 人声分离 + ASR | NVIDIA 显卡(见下)、≥8GB 内存 |
| LLM 纠错翻译 | 无需 GPU;≥4GB 内存;ffmpeg(托管 CLI 自动提供) |
显卡须为 RTX 20 系或更新(GTX 1660 / 1650,和部分其他卡亦可)。显存 ≥4GB;≥8GB 更佳。完整型号表、各档位的显存要求与不支持时的处理方式,见 显卡支持范围与档位。
URL 输入开箱即用。
面向使用者:
--stage 停在哪个阶段、低置信度行在哪里查看如需了解实现层:开发者说明 为入口,docs/ 根下的其余文件面向开发者(约定见 docs/README.md)。
代码 GPL-3.0-or-later(自 0.5.0 起;0.4.x 及更早的发行版仍按 MIT 授权,不受本次变更影响);src/finesub/llm/prompt_templates/ 下的 prompt 明文 CC BY-SA 4.0。
20 commits
3 commits
Python
90.0%
HTML
9.4%