Repository navigation
Releases: Superce1l/STTMiniTool
Release list
v2.2.7 — 说话者工作台:自动人数修复 + 逐行编辑 + 循环播放校对
STTMiniTool v2.2.7
本版聚焦「说话者工作台」:修复「人数 自动」在真实音频上恒判 1 人的问题,并给识别结果补齐说话者编辑能力(逐行切换 / 改名 / 拆分 / 合并),外加校对友好的「选中区间 + 循环播放」交互。全套改动有 98 例单元测试兜底。
👥 「人数 自动」判定修复
此前自动模式在真实音频上经常只识别出 1 个说话者(手动指定 2 人却完全正确)。定位到两层原因:声纹相似度矩阵的第一个特征值被「全局公共成分」占据(同语言 + 共享伴奏让所有窗口两两都有基础相似度),特征值间隙据此恒判 1 人;而 silhouette 校验门槛按 TTS 干净人声校准,会把带伴奏的真实双人误杀。
新算法:在层次聚类树上自深而浅搜索,先把关窗残响/间奏产生的碎群吸收进最近大群,取「所有群中心两两距离 ≥ 0.38」的最深切割作为人数;没有任何切割达标 → 整档 1 人。群心距离是全部实测样本中唯一界限分明的量(同一人被拆 ≤0.37 / 真正不同人 ≥0.39)。实测:真实男女对唱歌曲自动=2(与指定 2 人逐秒一致)、TTS 单人=1、双人=2。
🔁 逐行切换说话者
点字幕行上的说话者标签弹出菜单:现有说话者(当前项打勾)即点即换——卡片色条、波形区块、标签栏、导出前缀、合并判定全部同步;「+ 新说话者」可在自动分离并错一人时手工补救;「重命名说话者…」保留一步改名(Enter 存 / Esc 取消,四种导出同步新名)。
✂️🔗 单句拆分 + 同说话者合并
- 拆分:剪刀进入拆分模式,点文本放置光标,点亮的 √(或 Ctrl+Enter)在光标处一分为二,切点自动吸附最近字边界;拆分模式下文字锁定。
- 合并:「合并段落」选择模式点卡片多选,一键合并文本与时间轴;仅允许相邻且同一说话者的段落(跨说话者 / 不相邻会明确拒绝并提示)。合并按钮与操作栏并入波形面板,滚动时随面板钉顶。
- 编辑(笔)与拆分(剪刀)两种模式互斥,进入后按钮变 √。
🎯 选中区间 · 循环播放
校对时点字幕行不再突然出声:点行改为选中该句区间(波形亮出遮罩);播放键从片段头起循环播放当前句(句尾自动回卷),停止键回到片段头,点波形仅移动播放头。
🆕 其他
- 状态点五态:左下角状态点对齐模型下载/热切换语义——「已选≠已加载」显示琥珀「待切换」(此前转录跑旧模型状态点仍绿灯)、「模型未下载」与「尚未加载」区分、加载失败琥珀提醒;tooltip 显示实际加载/已选模型,点击直达模型页
- 最近转录删除:历史条目 hover 显形垃圾桶按钮,确认后字幕文件移入回收站(可恢复)
- 随包 CrispASR 核心 0.8.44
- 测试增至 98 例:合成声纹改用真实相似度量级(旧测试「过干净」曾放过两版人数判定缺陷),新增同人子群不拆、碎群吸收等回归
升级:下载 STTMiniTool-v2.2.7-windows.zip 解压即用(单文件 exe + crispasr 核心),旧版直接覆盖解压目录即可;模型与设置互不影响。首次运行如遇 SmartScreen,点「更多信息 → 仍要运行」,或右键 exe → 属性 → 解除锁定。
v2.2.6 — 设置自动化 + 正确性修复 + ASS/LRC 导出
STTMiniTool v2.2.6
本版是一次集中修复与体验升级:两个「玄学」设置项移出设置页改为自动判断(VAD 灵敏度、每段最长秒数),三处正确性修复(CPU 转录取消、长音频说话者标签、GPU 识别提示),并新增 ASS 卡拉OK / LRC 导出、最近转录列表与真实更新检查。全套改动有 75 例单元测试兜底。
✋ OpenVINO 转录可随时取消
此前用 CPU 核心转录长音频时点「取消」,程序会把剩余段落全部跑完才在收尾时报「已取消」——结果被丢弃,时间全浪费。现转录循环在段间检查取消事件(与 CrispASR 引擎同一契约),点击取消立即停止。
👥 长音频说话者标签不再跨片错乱
超过 2 小时的音频走切片转录 + 说话者分离时,每一片独立聚类会导致同一人在片 1 是「说话者1」、片 2 变成「说话者2」。现改由调度层统一分离:逐片提取声纹中心,按 cosine 相似度映射到全局编号,整份字幕同一人始终同一编号。
💬 GPU 引擎的「识别提示」生效了
「识别提示」输入框此前在 CrispASR 引擎下被静默忽略——贴了歌词/关键词毫无效果也不提示。现 whisper / qwen3 两个后端统一传入 --prompt 初始提示(截 500 字,两后端实测接受且不回显)。
🎛️ 设置页精简:两项改自动判断
- 语音检测灵敏度(VAD)→ 自动重试:默认门槛(0.50)没检出人声、但全段最高人声概率达到可信下限(0.18)时,自动逐级降低门槛(0.35 → 0.22)重试——覆盖「说话轻/远场录音被挡掉」这一手动调低设置的主因;真静音/纯音乐不浪费重试,直接给出明确诊断。
- 每段最长秒数 → 任务自适应:勾选「时间轴对齐」时段上限自动压到 10 秒(抑制长段歌词的「段尾字级跑掉」漂移);不勾则用模型上限(0.6B 30 秒),段更少、吞吐更高。
老用户 settings.json 里的旧键会被忽略,无需手动清理。
🆕 新功能
- 导出格式菜单:保存字幕现支持 SRT / ASS 卡拉OK(字级时间轴 →
\k逐字拍点,播放器直接逐字高亮)/ LRC 歌词 / 纯文本 - 最近转录列表:首页列出
subtitles/最近产出(50 条),点击回填波形视图,可再校对、另存 - 真实更新检查:「检查更新」现通过 GitHub API 比对最新版本,有新版直接打开下载页
- 录制真实时间轴:录制转换导出的 SRT 改用录音内的真实秒数(此前每段固定 5 秒顺排,无法用于同步)
- 卡拉OK逐字弹跳:补完「放大跳动」曲线——字被唱到的瞬间弹起回落、开唱前微抬蓄力(Apple Music 动态歌词风)
⚡ 性能
- VAD 长音频批量推理:时间轴连续分块沿 batch 维并行,60 秒音频 0.37s → 0.11s;阈值判定与逐窗顺序推理完全一致
- 大文件上传流式落盘:转录请求增量解析、音频边收边写盘——拖入几 GB 的视频不再把整份文件读进内存(此前内存峰值 ≥ 2 倍文件大小)
- 前端播放优化:播放/卡拉OK循环去掉全量 DOM 扫描,数千段字幕的长音频不再卡顿
🧱 工程
- 75 例单元测试(
tests/,unittest):字幕分行、切片合并、SRT 解析、设置存储、流式解析、说话者映射、VAD 等价性等 settings.json收敛为单点读写:线程锁 + 临时文件原子替换,修复并发写丢更新、进程被杀留半截文件两类隐患- 引擎转录改返回结构化结果(
TranscribeResult),移除实例侧通道 - 界面补全 English 翻译覆盖
打包内容:STTMiniTool.exe(onefile,WebView2 界面)+ CrispASR 核心二进制。模型文件不随包附带,首次使用时按需下载。
全部改动经 75 例单元测试与真实语音端到端回归验证:正常音量/6% 音量/噪声混合音频的 VAD 自动重试路径、冻结 EXE 无头自检(
status --json)、切片说话者映射、流式上传边界情况,全部通过。
v2.2.5 — 模型下载「CERTIFICATE_VERIFY_FAILED」修复
STTMiniTool v2.2.5
本版修复用户反馈的**「下载并加载模型」失败**。两张截图两个报错(CERTIFICATE_VERIFY_FAILED 与 'gbk' codec can't encode '\u26a0'),实为同一条链:
企业/校园网络里的 HTTPS 代理(深信服等)会用自己的根证书重签 TLS 连接。Python 的 ssl 模块不认代理的根证书 → 到 HuggingFace 的所有模型下载直接证书验证失败。
🔐 SSL 证书验证失败自动降级
下载遇证书验证错误时自动降级为不验证重试一次:
- 模型来源全为固定可信主机(huggingface.co / github.com),风险可控
- 降级时写入运行日志(
logs/app-年月.log)留痕 - 只针对证书错误——超时、DNS 失败等其他网络错误仍走原有的镜像/备援逻辑,行为不变
🖥️ GBK 控制台安全输出
第二张截图的 'gbk' codec can't encode character '\u26a0' 是这样来的:下载备援逻辑的提示 print 里有 ⚠✅❌ 等字符,简体中文 Windows 的 GBK 控制台打不出来,抛出的编码错误反而取代了原始的 SSL 错误——界面「加载失败」显示的正是这个编码错误。现改用安全输出:编码不了的字符替换为 ?,保证提示能出去、真实错误能上抛。
打包内容:STTMiniTool.exe(onefile,WebView2 界面)+ CrispASR 核心二进制。模型文件不随包附带,首次使用时按需下载。
受企业代理影响的用户升级后可直接下载模型;若你的网络有额外的白名单限制,也可在「设置 → HuggingFace 镜像」填
https://hf-mirror.com走镜像站。
全部修复经 mock 与真实网络双重验证:SSL 降级重试、非证书错误不降级、GBK 控制台输出、真实下载回归、404 错误路径,全部通过。
v2.2.4 — CrispASR(Qwen3-ASR)转录「进度卡 0%」修复
STTMiniTool v2.2.4
本版修复用户反馈的 CrispASR(Qwen3-ASR-1.7B)转录时进度条永远 0%、疑似卡死 的问题。经本机实测定位,该问题与显卡无关(Vulkan / CUDA / CPU 均一致),由三个叠加问题造成。
📊 进度条卡 0% 修复(本版核心)
根源:CrispASR 的 -pp 进度输出(progress = NN%)只有 whisper 后端实现了,qwen3 后端完全没有(0.8.38 与最新 0.8.42 实测一致)。而界面进度条唯一的数据来源就是这行输出——于是 qwen3 模型从转录第一秒到最后,进度永远是 0%,模型其实在正常工作。
- 现改以「行活跃度」回报:每收到一行子进程输出就推进模拟进度(状态文字注明「模型运行中,暂无精确进度」),进度条不再静止
- whisper 后端的真实进度解析不受影响
⏱️ qwen3 启动的 44 秒静默等待消除
qwen3 后端启动需要一个 ggml-tiny.bin 做语言识别(LID);目录里没有时 crispasr 会自己联网下载,下载失败要干等约 44 秒(WinHTTP + curl + wget 逐个尝试)才继续转录,期间零输出。现在程序自动加 --lid-model 指向本地已有的 whisper ggml(base 随包附带),这段等待彻底消失。
🐕 停滞看门狗
流式读取新增保护:180 秒无任何输出才判定挂死,杀掉子进程并给出可读的错误提示(此前真挂死会无限期持有引擎锁)。真实的长时间转录不受影响。
🚫 GitHub 限流不再导致重复下载
CrispASR 版本查询被 GitHub 限流(HTTP 403)时,此前回退到硬编码的保底版本 0.8.33——已装 0.8.38 的机器每次加载模型都被判定「核心过期」,重新下载 35MB 的 zip。现在限流时回退到本机已安装版本,不再重复下载。
打包内容:STTMiniTool.exe(onefile,WebView2 界面)+ CrispASR 核心二进制。模型文件不随包附带,首次使用时按需下载。
全部修复均在本机实测验证:qwen3 全流程转录、whisper 后端回归、取消功能、看门狗、中文文件名路径、403 降级场景。
v2.2.3 — 断句质量修复(声学停顿切行)
STTMiniTool v2.2.3
本版聚焦断句质量:修复「一行字幕里混有上一句的下半段和下一句的上半段」的问题,让字幕断句更贴合语义边界。
✂️ 断句修复(本版核心)
问题根源:ASR 模型偶尔在两句之间漏打标点时,唯一的换行依据只剩「每行最多 20 字」的强制保护——切点与语句毫无关系,于是上一句的尾巴和下一句的开头被拼进同一行。
- 新增「声学停顿切行」:字级时间轴上本就记录着字与字之间的空隙。句间停顿普遍 ≥0.35 秒、短语内部几乎不留空隙,现在把足够长的停顿当作「看不见的逗号」主动切行——模型漏打标点也能正确断开
- 兜底换行不再机械:行超长必须切时,回退到行内最长的可信停顿处切开,断点尽量贴近语义边界,而不是硬数到第 20 个字
🎵 长语音段切分修复
- 切点吸附停顿:连续说话超过模型上限时,音频不再按固定秒数硬切(此前会把字词劈成两半,片段首尾各带半句),改为等分片数后在 ±1.5 秒范围内吸附到能量最低的停顿处
- 不再产生超长片:新增可行窗约束,保证每片都不超过模型输入上限、不产生被丢弃的碎片——修掉了「末段可能超长被静默截断掉字」的隐患
🔗 长音频切片合并修复
- 保留更完整的版本:超 2 小时音频的切片重叠区里,同一句话在前一片和后一片各有一个版本——跨片首的句子完整版在前片、跨片尾的完整版在后片。去重时按完整度择优保留,不再无条件取某一侧导致丢字或残句
打包内容:STTMiniTool.exe(onefile,WebView2 界面)+ CrispASR 核心二进制。模型文件不随包附带,首次使用时按需下载。
本版修复经 OCR 代码审查复核,2 项审查意见均已采纳(切片合并的丢字风险、末段超限风险)。
v2.2.2 — 长音频切片修复与取消支持
STTMiniTool v2.2.2
本版聚焦长音频切片转录的可靠性:修复了两个导致超长音频转录必然失败的 bug,并让「取消」真正即时生效。建议所有用户升级。
🎵 长音频切片修复(本版核心)
- 修复切片转录崩溃:超 2 小时音频切片转录完成前最后一步,写出 SRT 时对字典按四元组解包导致
too many values to unpack (expected 4)崩溃——此前任何长音频转录都会在最后一步失败 - 修复 ffmpeg 切片参数语义错误:
-ss放在-i前时输入时间戳被重置,-to <全局终点>被误读成重置后时间轴的终点——第 2 片起每片严重超长、重叠区去重失效。改用-t <片长>显式指定时长
✋ 取消真正即时
- 转录取消不再需要等待:CrispASR 子进程可被随时终止(独立 watch 线程杀进程),此前只能在切片边界退出,单片转录中无法中断
- 取消事件每次运行后自动复位——修复了残留置位状态会让切片转录第 2 片被误杀的回归(代码审查抓出)
📤 上传修复
- 修复 multipart 解析把文件内容尾部
\r\n一并剥掉的问题——音频数据不再静默截断
🧨 错误处理改进
- 转录失败时回结构化的 500 JSON 错误(此前连接直接中断,前端只能显示网络错误)
- 运行日志的 ERROR 记录现在附完整调用栈(缩进格式,按行检索不混入独立事件)
- 切片转录全静音时给出明确诊断(多少片无内容、可能原因),不再笼统报「未检测到人声」
🧹 清理
- 删除已被共享断句模块取代的旧实现(约 150 行)及其残留导入
打包内容:STTMiniTool.exe(onefile,WebView2 界面)+ CrispASR 核心二进制。模型文件不随包附带,首次使用时按需下载。
v2.2.1 — 代码审查健壮性修复
STTMiniTool v2.2.1
本版为 v2.2.0 的健壮性修复:三批代码审查(30 条意见,采纳修复 19 项)。功能与 2.2.0 一致(模型热切换 / 运行日志 / 下载完整性校验),建议所有用户升级。
🔁 热切换修复
- 加载失败回退真正可用:修复旧引擎被提前释放、回退分支不可达的问题——现在新引擎就绪才释放旧的,加载失败自动换回原引擎继续转录
- 模型加载与转录的忙碌判定改原子 check-and-set:并发请求不再双通过守卫(此前会导致双加载线程、转录忙碌状态被错误清除、关窗确认失效)
- 模型成功加载后清空上次失败的错误残留
🏷️ 字幕修正
- 文件名标签改用「实际加载」的引擎与模型(忙碌期间改选择不再误标)
- 标签内
.换·,无扩展名文件不再产生残缺文件名
⬇️ 下载修复
- 断点续传遇忽略 Range 的服务器时,不再误删刚下载完的完整文件
- Qwen GGUF(q4/q8/日语动漫)与 ForcedAligner .bin 的下载跳过 guard 补大小下限——残档不再被当「已存在」跳过下载
- CrispASR 版本查询失败回退保底版本时记录日志
🎵 非 ASCII 路径三连修
- 临时副本在异常路径不再泄漏
- 路径检查从「文件名」扩展到「完整路径」(目录含中文同样处理)
- 临时目录改用保证 ASCII 的位置 + 唯一文件名
- 说话者分离改用原路径(此前对非 ASCII 文件名会静默失效)
🖥️ 其他
- 多显示器(外接主屏 / 任务栏停靠左上)下窗口不再开到错误屏幕
- CLI:显卡探测失败不再误报为「没有显卡」;
profiles命令 WMI 探测 4 次 → 1 次
📦 安装
- 下载
STTMiniTool-v2.2.1-windows.zip并解压 - 右键
STTMiniTool.exe→ 属性 → 如有「解除锁定」勾选后确定 - 双击运行;首次使用在「模型」页选引擎与模型,点「下载并加载模型」
从 v2.2.0 升级:直接覆盖 exe 即可,模型与设置自动沿用。
v2.2.0 — 模型热切换 / 运行日志 / 下载完整性校验
STTMiniTool v2.2.0
本地语音识别字幕生成工具 —— 数据不离开你的电脑。
✨ 新特性
- 🔁 模型热切换:引擎(OpenVINO / CrispASR)、模型、加速版本切换不再需要重启——模型页选好后点「下载并加载模型」就地生效;转录进行中自动禁用切换;加载失败自动回退原引擎
- 🏷️ 字幕文件名带引擎标识:输出字幕自动拼接所用引擎与模型,如
唯一 [CrispASR · Whisper Base].srt,多模型对比不混淆 - 📜 运行日志:转录(耗时/段数)、模型加载、下载事件自动记录到
logs/app-年月.log,问题可回溯 - 🎛️ 模型页改版:检测到的设备 → 推理引擎(两列并排直选)→ 选择模型,去掉「基础/高级」双模式
🐛 修复
- CrispASR 打不开含中文/非 ASCII 字符的音频路径(自动转 ASCII 临时副本转录)
- OpenVINO 路径 VAD 崩溃(
Unable to handle object of type int) - crispasr.exe 异常退出时,错误消息带上子进程真实报错(不再只有笼统提示)
- 长视频(>2 小时,如 .mov)转录报
TypeError: missing 1 required positional argument - 打包补齐缺失的 scipy 依赖(说话者分离必需)
✅ 可靠性
- 下载完成即对账 Content-Length:中断残档立即删除、提示重下(此前会静默留下半截模型导致加载失败)
- GGUF 模型加 100MB 大小下限,残档不再被当成完整模型
- 长音频切片时长依可用物理内存自适应(5–30 分钟),小内存机器不再 OOM
📦 安装
- 下载
STTMiniTool-v2.2.0-windows.zip并解压 - 右键
STTMiniTool.exe→ 属性 → 如有「解除锁定」勾选后确定(单文件 exe 仅此一处) - 双击运行;首次使用在「模型」页选引擎与模型,点「下载并加载模型」
需要 Windows 10+ 与 WebView2 Runtime(Win10/11 一般自带)。
所有模型按需自动下载(HF/GitHub),音频数据全程本地处理。