搜索文章

输入关键词开始搜索

本地 Whisper 引擎选型

AI#AI

背景

我本地一直装着 Whisper 做音频转文字(会议录音、课程音频、口语练习这些)。最近看到 faster-whisper,就拿去问了 AI 哪个更适合我。这个话题前后和两个 AI 讨论了三轮,加上自己实测又翻案一次,过程比结论本身更值得记录。

第一轮,AI 建议我直接换 faster-whisper,理由是它”非常适合 MacBook Air M2”。第二轮交叉验证时被指出硬伤:faster-whisper 底层的 CTranslate2 只支持 CUDA 和 CPU,不支持 Apple Silicon 的 Metal/Core ML,在 M2 上根本调不动 GPU。第一个 AI 承认了错误,马上给出新排序,还顺手设计了一套”双引擎 + 抽象层”的架构。

到这一步我发现一个更根本的问题:这些分析看起来都很严谨,但没有一个有数据。我的判断是,性能结论不靠实测,就是 AI 互相客气。现在回看,这个判断是整件事里最对的一步。

第一轮实测

我造了一段 4.8 分钟的测试音频:用 macOS TTS 合成一段中英混合的技术会议对话,好处是真值文本已知,可以量化准确率。统一 large-v3 模型,在 M2 Air(24GB)上跑:

引擎运行模式转写耗时峰值内存准确率(与真值相似度)
whisper.cpp large-v3Metal69 秒4.2 GB73.5%
faster-whisper large-v3纯 CPU int8926 秒3.2 GB83.0%
whisper.cpp large-v3-turboMetal21 秒2.0 GB10.2%

当时得出的结论是:换 whisper.cpp,速度是 faster-whisper 的 13 倍,准确率损失能接受。我还顺手把这个结论固化成了 skill。

几个数据之外的发现:

  • faster-whisper 转 1 小时音频要约 3 个小时,批量流水线直接不可用。
  • turbo 模型在中英混合场景直接翻车:重复循环、整段丢失。
  • 最意外的坑:-l auto 自动识别语言会把整段判成英语,中文内容全丢。中英混合必须显式 -l zh,内嵌的英文术语照样能转对。

第二次翻案

准备把 whisper.cpp 接进课程转写流水线时,我翻了下现有代码,发现流水线早就在用 mlx-whisper(Apple 原生框架)+ turbo,根本不是官方 Whisper。那我之前测的”谁是 Mac 最快”就漏了一个重要选手,只能补测。

补测结果(同一段中英混合音频):

引擎耗时峰值内存准确率
mlx-whisper turbo105 秒0.73 GB80.1%
whisper.cpp large-v369 秒4.2 GB73.5%

纯英文课程音频上再测一轮,mlx turbo 准确率依然更高(whisper.cpp 有整句丢失),速度接近,内存只有 1/6。

也就是说,我上一轮”换 whisper.cpp”的结论只成立了一天。mlx-whisper turbo 准确率更高、内存六分之一,代价只是慢一点。而且之前” turbo 模型中英混合翻车”的判断也要修正:同一个 turbo,在 whisper.cpp(ggml 运行时)上翻车,在 MLX 上完全正常——翻车的是 ggml,不是模型。

最终结论

  • Mac 本地日常转写:mlx-whisper + large-v3-turbo,显式指定语言。之前写的 skill 已经把默认引擎改成它,whisper.cpp 降级成”追极限速度”的备选。
  • 课程流水线:维持现状,不用改。现有选择恰好就是实测最优。
  • faster-whisper 在这台机器上没有位置:纯 CPU 跑 large-v3 慢到不可用。

日常转写一条命令:

mlx_whisper meeting.m4a --language zh --model mlx-community/whisper-large-v3-turbo

经验教训

  1. AI 给的硬件性能建议,默认是理论推测。它可以帮你列方案、找坑,但”哪个快”这种问题,跑一次的证据效力大于三轮分析。AI 之间互相认错改口的时候都很流畅,不看数据根本分不清哪轮是对的。
  2. 我自己的实测结论也一样会翻案。第一轮漏测了 mlx-whisper,结论就歪了。benchmark 的覆盖面决定了结论的保质期。
  3. 测出来的坑要尽快固化-l zh 这种规则,不靠 skill 记下来,下次大概率还会踩一遍。