• 请不要在回答技术问题时复制粘贴 AI 生成的内容
retemlamb
V2EX  ›  程序员

做了一个完全本地的语音转文字工具,不想只做一个 Whisper GUI

  •  1
     
  •   retemlamb · Jul 21 · 7389 views
    This topic created in 45 days ago, the information mentioned may be changed or developed.

    这几个月一直在做一个叫 OpenASR 的项目,今天来 V2EX 聊聊。

    起因很简单。平时会议录音、视频素材、语音笔记需要转文字,也经常要给 Agent 口述比较长的需求。试了不少语音服务,要么要上传云端,要么只支持 Whisper ,要么需要自己搭 Python 环境装 CUDA 下权重改参数。

    其实本地 ASR 模型这两年发展得很快。Whisper 之外,Qwen3-ASR 、SenseVoice 、FireRed 、Dolphin 、X-ASR 都是非常优秀的模型,但普通用户想体验它们的门槛还是太高了——每个模型一套推理框架、一套依赖、一套配置方式。模型越来越多,使用体验还停留在开发者工具阶段。

    所以我想做一个统一的本地 ASR 工具。音频不上传服务器,模型下完可以断网跑。支持本地音频视频转文字、实时字幕、全局语音输入、CLI 和本地 API ,多种模型一键切换。

    为什么不只做 Whisper GUI ?

    OpenASR 语音转写演示

    一方面,不同 ASR 模型各有强项。有些中文场景强,有些方言覆盖广,有些适合实时流式,有些对低配设备友好。一个好的本地 ASR 工具不应该绑死在一个模型上。

    另一方面,现在各家模型的 runtime 其实很割裂。有的跑在 ggml 上,有的用 ONNX ,有的要 PyTorch ,开放的推理接口也不统一。如果你想同时用 Whisper 和 FireRed 和 Dolphin ,实际上要装三套环境、学三套用法。OpenASR 想把这层差异吃掉——统一成一个引擎、一套模型格式、一个入口,用户不需要关心底层跑的是什么。而且统一引擎不只是方便,同模型同参数下我们实测比 whisper.cpp 快约 8%,这个指标是 CI 门禁锁住的,每次提交都跑,不允许回归。

    目前已经接入了 Whisper 、Qwen3-ASR 、SenseVoice 、FireRed 、Dolphin 、X-ASR 、Moonshine 、Parakeet 等十几个模型族,做了一个模型市场,打开就能搜索、下载、切换,不用碰命令行。

    聊几个我觉得比较有意思的:

    FireRedASR2 来自小红书团队,在公开中文测试集上表现非常强,很多场景可以到 SOTA 级别。不过 benchmark 只是参考,真实会议、噪声、口音环境下到底怎么样,我自己也没完全摸清,希望有人帮忙测。

    Dolphin 是 Dataocean AI 和清华联合做的,最大亮点是支持 22 种中文方言和地区口音。普通话模型"能听懂一点方言"和专门针对方言训练的模型,体验差别真的很明显。四川话、粤语、吴语、闽南语用户如果愿意试试,我特别想知道结果。

    X-ASR 来自上海交大、复旦等机构,是中英双语流式模型。不是"录完再识别",而是边说边出字,特别适合实时字幕和语音输入。也是我自己 vibe coding 时最喜欢的模型。

    一些技术细节

    OpenASR 模型市场

    底层不是套壳 whisper.cpp 。基于 vendored ggml fork 自己写的推理引擎,有一套自研的 .oasr 模型格式,mmap 零拷贝加载。Whisper 同模型同参数下实测比 whisper.cpp 快约 8%,其他模型族对比各自的最佳推理方案也保持更快或与 SOTA 持平。M1 上最快的模型可以到 37 倍实时速度,几乎所有模型都可以做到实时,除了两个特别大的 8B 模型。

    模型下载也不是裸 HTTP 拉文件。每个模型经过 sha256 校验 + Ed25519 catalog 签名 + GGUF 格式预检,通过了才原子安装。"不联网"不只是一句口号,信任链是完整的。

    另外 openasr serve 可以起一个本地 OpenAI 兼容 API (/v1/audio/transcriptions),改个 base_url 就能接现有的 OpenAI SDK 生态。如果你的 agent 工具链已经在用 OpenAI 的转录接口,换成本地几乎零改动。

    除了转录本身,还有标点恢复、说话人分离、声纹识别这些周边模型,不过这部分还在完善。后续也会计划支持实时翻译、转写后的文本润色、视频/音频总结等功能。

    当前状态

    项目还是 0.1.x 早期阶段。支持 macOS Apple Silicon 和 Windows x64(有对 vulkan/cuda/rocm 的支持),有桌面端安装包和本地 CLI/API 。核心用 Rust 写,Apache-2.0 开源。

    接下来给自己定了个目标:尽量每周研究一个新的 ASR 模型族,适合本地跑的就接入,不适合的也记录原因。不会为了数量把"能启动"当成正式支持。

    官网: https://openasr.org GitHub: https://github.com/QuintinShaw/openasr

    最后想问几个问题

    1. 各位用过哪些 ASR 模型觉得效果好但比较小众的?不一定排行榜第一,某个场景特别强就很有价值。
    2. 中文方言场景,有没有实际体验过 X-ASR / FireRed / Dolphin / SenseVoice 的?
    3. 如果做一个本地 ASR 模型库,你觉得最需要什么功能?

    具体的问题、失败案例、模型推荐对我来说比点赞有用得多,欢迎直接吐槽

    125 replies    2026-08-11 06:55:54 +08:00
    1  2  
    retemlamb
        101
    retemlamb  
    OP
       Jul 23
    @4641585 #92 批量转换应该这周内会上线桌面端。WAV 一开始就是原生支持的。目前支持格式如下,供参考:

    - WAV 无损未压缩录音,最常见的原始录音格式
    - MP3 通用有损音频,播客/音乐/录音笔常用
    - FLAC 无损压缩音频
    - M4A (AAC) 苹果设备录音、语音备忘录的默认格式
    - M4A (ALAC) 苹果无损音频
    - MP4 视频文件,自动抽取音轨转写
    - WebM 网页视频/录屏(Vorbis 或 Opus 音轨),自动抽取音轨
    - OGG 开源容器(Vorbis 或 Opus 音轨)
    - OPUS 微信、Telegram 、WhatsApp 等聊天软件的语音消息格式
    - QTA QQ 语音导出格式
    retemlamb
        102
    retemlamb  
    OP
       Jul 23
    @exmorning #93 方便到 https://github.com/QuintinShaw/openasr/issues 提一个 issue 吗?把崩溃信息和 daemon.log 贴上来(高级设置 → 打开日志文件夹),我帮你排查。或者也可以等今天中午时段新版本,新的 0.1.19 版本还在走发布流程(部分内核编译需要一个半小时左右)
    retemlamb
        103
    retemlamb  
    OP
       Jul 23
    @zealotxxxx #94 96 非常感谢,刚刚在 github 上看到了,非常详细和有用,目前这个问题已经修复,将随下一个版本在今天中午发布
    retemlamb
        104
    retemlamb  
    OP
       Jul 23
    @undefine2020 #95 好的,用手机连接把通话转到电脑上走系统音频,这样就是数字流了,识别效果会好很多。期待你的使用反馈!
    retemlamb
        105
    retemlamb  
    OP
       Jul 23
    @aaxx2xx #97 好的,稍后我会专门优化解决断句的问题,断句确实是当前最大的痛点之一,后续会做针对字幕的专门优化工作,确保断句/换行等合理,这个场景会重点优化
    retemlamb
        106
    retemlamb  
    OP
       Jul 23
    0.1.19 桌面版(内核 0.1.23 )更新了

    更新日志:
    - 修复启动后偶尔卡死 — 系统托盘菜单更新时存在一个死锁,已排除。特别感谢 @zealotxxxx 提供的日志分析
    - GPU 内核切换失败时给出明确原因 — 例如切换到 CUDA 失败,现在会告诉你具体哪一步出了问题,日志里也能查到详情;不再只显示含糊的"本地文件错误"。
    - 双显卡电脑正确识别独显 — 集显+独显并存时,现在能正确找到 NVIDIA 或 AMD 独立显卡并优先使用,不会再用错卡。
    - Windows 深层路径不再报错 — 路径超出系统默认长度限制时,模型目录迁移、引擎内核安装等操作现在都能正常完成。
    - 直接转写微信/Telegram 语音 — 新增 Opus 、WebM 、无损 M4A 格式支持,不用再手动转格式。
    - 显存不够时自动降级到 CPU — 遇到显存不足,会自动回退用 CPU 跑完,不再整个任务直接失败。特别感谢 @tushile928 提供的日志分析
    - FireRed 系列转写更快 — 引擎层面的速度优化。速度提升至前一版本 2-6 倍。 @ccvip 可以试试这个版本,速度快了很多
    Kobayashi
        107
    Kobayashi  
       Jul 23
    我觉得你要做的已经有人做了,https://github.com/TypeWhisper 。它实现了一个插件系统,支持调用不同模型(本地或是远程)来翻译。目前总计有 30 个插件,除了翻译模型插件,也有一些其他后处理插件。

    本地模型它提供的有 Whisper, Parakeet, Voxtral, Qwen3 ASR, Cloudflare ASR, Granite ...
    retemlamb
        108
    retemlamb  
    OP
       Jul 23
    @Kobayashi #107 感谢推荐,刚认真看了一下,确实有不少重叠。侧重点不太一样:TypeWhisper 更偏听写 + AI 工作流,通过插件组合本地和云端模型; OpenASR 更偏统一的本地推理引擎和模型生态,重点在多架构模型统一运行、长音频字幕、说话人分离和中文方言上。两者也不冲突,TypeWhisper 完全可以通过本地 API 把 OpenASR 当模型后端用
    justxwy
        109
    justxwy  
       Jul 23
    下载速度好慢啊。。。
    retemlamb
        110
    retemlamb  
    OP
       Jul 24
    @justxwy 可能是的,因为模型都托管在 hf 上,高级设置中有“国内加速”的选项,打开后会好很多
    ccvip
        111
    ccvip  
       Jul 24
    再次来支持下 已经在下载新版体验了。
    再次看了帖子,感慨前几段说的几乎全是我走过的路,
    因为喜欢一些博主需要学习他们的素材,就下载了视频音频,看到别人用 ASR 整理,我也开始研究。
    测试 ollama 用 CPU 转写太慢,于是买了显卡,电源不够又折腾电源,折腾 CUDA 环境,从头开始学的 PyTorch ,不同模型的用法有差异,走了很多弯路,最后发现一些行业词的转写当下还是要用在线 ASR ,于是又折腾音频的合适码率、公网访问、上传 OSS 获取临时链接,为了 ASR 投入了也有几千块了
    话说,如果软件如果需要商业化功能,可以从赚在线 API 的差价开始,比官方价贵点,减少我折腾写代码、转码、公网访问、配置、调整输出文档的时间,我也是愿意接受的。

    另外上次没说清楚几个需求,
    1 、我用批量转写功能比较在意文件夹结构,比如选择输入和输出文件夹,输出的结构跟输入保持完全一致,只是扩展名不一样,大量转写的时候方便整理,比如,我下载了几十个博主的音频分别在分类\名字\年份 文件夹下,转写成功后的目录也是这样

    2 、可选输出文本格式( txt/md )、是否区分说话人、是否有 meta 摘要(还是纯语音的文字)、选择不同的热词配置文件

    3 、有没有一种可能,可以配置 LLM 接口,调用 prompt 模板或 skill,转写后自动按照要求出总结
    tushile928
        112
    tushile928  
       Jul 24   ❤️ 1
    @retemlamb #77 已更新版本,使用无异常,转写成功,效果很好👍
    retemlamb
        113
    retemlamb  
    OP
       Jul 24
    @ccvip 感谢二次支持,你走过的路正好就是 OpenASR 想解决的问题。

    你提的三个需求都很实在:

    1. 批量转写保持目录结构——CLI 的 openasr transcribe 已经支持指定输入目录 + -o 输出目录,输出文件名跟输入一致只换扩展名(目前可以让 agents 来做)。桌面端的批量导入在做了
    2. 输出格式目前支持 txt/json/srt/vtt/markdown ,说话人分离/声纹识别预计周内上线,热词目前支持(后续会考虑增增加热词配置文件)。meta 摘要还没有,跟第 3 点一起规划
    3. 转写后接 LLM 做总结/润色确实是下一步方向,配置 prompt 模板自动出总结这个思路很好,之前有考虑过,目前可能排期可能会到 1-2 周后(目前仍在优化基础体验,提升模型的运行速度,接入新模型等)

    商业化的建议也收到,目前暂无精力做云版本,待功能完善后,可能会出一些企业产品,感谢!
    ethusdt
        114
    ethusdt  
       Jul 24


    我已经把 OpenASR 接入到我的 App 了,感谢楼主的开源。等下周发布新版可以使用,具体可以查看 https://www.clipflowapp.com/features/speech-to-subtitles-iphone

    另外,3 个说明/问题:
    1. 什么时候支持 Metal 后端? Metal 的实现可以加速 Qwen/Whisper 么?
    2. 手机上没有使用 FireRedVAD ,我使用的是简单的能量 VAD:20ms 一帧,能量阈值 0.02 ,连续 200ms 声音判定开始说话,连续 600ms 低能量判定停止,单段最长 30 秒 这些条件。等我再多测试一下对比一下。
    3. 推理过程中很慢,点击停止,结果会卡非常久,内存和 cpu 不立即释放,应该是 OpenASR 没有 cancellation token (接入 ggml abort callback )。
    retemlamb
        115
    retemlamb  
    OP
       Jul 24
    @ethusdt 太棒了,直接把 xcframework 接进自己的 App 里,这正是我们希望看到的用法!

    回你的三个问题:

    1. Metal 后端支持在计划中,目前 macOS 桌面端已经用上了 Metal 加速,iOS 的 xcframework 还是 CPU ,后续会加上(预计下周)
    2. FireRedVAD 目前确实只在桌面端/CLI 里用了,xcframework 没有暴露。你用的能量 VAD 方案作为轻量替代是合理的,后续会把 VAD 也作为 SDK 能力开放
    3. 你说得对,目前推理过程中没有接 ggml 的 abort callback ,停止时要等当前计算图跑完才能释放。这个确实该补上
    sickworm
        116
    sickworm  
    PRO
       Jul 24
    支持,试用一下,这个能替代 typeless 不?
    retemlamb
        117
    retemlamb  
    OP
       Jul 25   ❤️ 1
    @sickworm 坦率地说,目前听写功能只做了热词,还没有加基于 LLM 的文字后处理,目前无法完全替代 typeless ,后续会加强这方面的内容,感谢支持
    Cado
        118
    Cado  
       Jul 26
    后面会支持会议记录的转写不?
    背景是有大量线上的会议记录需求,发现现在的能力只能记录机内或者麦克风的声音,不能同时记录,且没有拆分人的能力
    tangping
        119
    tangping  
       Jul 27
    我想在 J4105 8G 内存的板子上跑这个服务(实时语音转文字),这个能带起来么
    zeusho871
        120
    zeusho871  
       Jul 29
    看起来很强 好像我用 m1max 64g 运行 然后直接崩溃了打不开
    retemlamb
        121
    retemlamb  
    OP
       Aug 3
    @Cado 0.1.21 的内置 MOSS 说话人分离 + 声纹识别( Voice ID ),多人录音会按人切分、登记后能标姓名,都在本地跑。会议转写方面,录好的会议文件可以直接转写;线上会议可以用"系统内录音"把通话声音录进来再转。目前确实还不支持麦克风和系统音同时录,这是已知需求,我们在评估
    retemlamb
        122
    retemlamb  
    OP
       Aug 3
    @tangping J4105 是低功耗弱核,8G 内存装得下小模型,但算力可能带不动"实时",建议把它当离线/非实时转写用。选最小档模型(如 xasr / sensevoice 小模型)可以尝试实时,但目前我手上没有相关设备,不能保证效果
    retemlamb
        123
    retemlamb  
    OP
       Aug 3
    @zeusho871 实在不好意思,前两天比较忙,没有及时回复消息,目前已经在 0.1.21 的桌面端上进行了优化,有收到你的 issue ,如果还是存在问题,麻烦提供 deamon.log/报错信息,感谢
    tangping
        124
    tangping  
       Aug 3
    @retemlamb 好的 我试下,我原来用的 funasr 可以带动就是慢点 😄
    undefine2020
        125
    undefine2020  
       Aug 11
    win11 打开 win 版本和 cuda 版本都是 cmd 闪一下就没了
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1156 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 23:48 · PVG 07:48 · LAX 16:48 · JFK 19:48
    ♥ Do have faith in what you're doing.