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

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

  •  1
     
  •   retemlamb · 7 days ago · 5632 views

    这几个月一直在做一个叫 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 模型库,你觉得最需要什么功能?

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

    119 replies    2026-07-27 18:52:39 +08:00
    1  2  
    retemlamb
        101
    retemlamb  
    OP
       5 days ago
    @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
       5 days ago
    @exmorning #93 方便到 https://github.com/QuintinShaw/openasr/issues 提一个 issue 吗?把崩溃信息和 daemon.log 贴上来(高级设置 → 打开日志文件夹),我帮你排查。或者也可以等今天中午时段新版本,新的 0.1.19 版本还在走发布流程(部分内核编译需要一个半小时左右)
    retemlamb
        103
    retemlamb  
    OP
       5 days ago
    @zealotxxxx #94 96 非常感谢,刚刚在 github 上看到了,非常详细和有用,目前这个问题已经修复,将随下一个版本在今天中午发布
    retemlamb
        104
    retemlamb  
    OP
       5 days ago
    @undefine2020 #95 好的,用手机连接把通话转到电脑上走系统音频,这样就是数字流了,识别效果会好很多。期待你的使用反馈!
    retemlamb
        105
    retemlamb  
    OP
       5 days ago
    @aaxx2xx #97 好的,稍后我会专门优化解决断句的问题,断句确实是当前最大的痛点之一,后续会做针对字幕的专门优化工作,确保断句/换行等合理,这个场景会重点优化
    retemlamb
        106
    retemlamb  
    OP
       4 days ago
    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  
       4 days ago
    我觉得你要做的已经有人做了,https://github.com/TypeWhisper 。它实现了一个插件系统,支持调用不同模型(本地或是远程)来翻译。目前总计有 30 个插件,除了翻译模型插件,也有一些其他后处理插件。

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

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

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

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

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

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

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


    我已经把 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
       3 days ago
    @ethusdt 太棒了,直接把 xcframework 接进自己的 App 里,这正是我们希望看到的用法!

    回你的三个问题:

    1. Metal 后端支持在计划中,目前 macOS 桌面端已经用上了 Metal 加速,iOS 的 xcframework 还是 CPU ,后续会加上(预计下周)
    2. FireRedVAD 目前确实只在桌面端/CLI 里用了,xcframework 没有暴露。你用的能量 VAD 方案作为轻量替代是合理的,后续会把 VAD 也作为 SDK 能力开放
    3. 你说得对,目前推理过程中没有接 ggml 的 abort callback ,停止时要等当前计算图跑完才能释放。这个确实该补上
    sickworm
        116
    sickworm  
       3 days ago
    支持,试用一下,这个能替代 typeless 不?
    retemlamb
        117
    retemlamb  
    OP
       3 days ago   ❤️ 1
    @sickworm 坦率地说,目前听写功能只做了热词,还没有加基于 LLM 的文字后处理,目前无法完全替代 typeless ,后续会加强这方面的内容,感谢支持
    Cado
        118
    Cado  
       1 day ago
    后面会支持会议记录的转写不?
    背景是有大量线上的会议记录需求,发现现在的能力只能记录机内或者麦克风的声音,不能同时记录,且没有拆分人的能力
    tangping
        119
    tangping  
       15h 30m ago
    我想在 J4105 8G 内存的板子上跑这个服务(实时语音转文字),这个能带起来么
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5994 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 02:22 · PVG 10:22 · LAX 19:22 · JFK 22:22
    ♥ Do have faith in what you're doing.