whisper.cpp 本地转写上手:后端选择、量化档位与长音频切分

AI相关5分钟前发布 一方
0 00

whisper.cpp 是 OpenAI Whisper 语音识别模型的 C/C++ 重写版,基于 ggml 张量库。它装好就能在本机把录音转成带时间戳的文字,不装 Python,也不把音频传到云端。项目用 MIT 协议开源,现在由 ggml-org/whisper.cpp 维护。本文讲清三件事:编译时怎么挑后端、模型与量化档位怎么取舍、长音频和多人对话上它的边界在哪。

它做什么,不做什么

核心能力只有一件:把音频转成文字。默认输出带时间戳的分段文本,语种用 -l 指定,要译成英文加 -tr。仓库里还带几件配套工具:实时麦克风转写、HTTP 服务、基准测试,编译后都在 build/bin 下。

模型是自定义的 ggml 格式,单个文件里打包了权重、梅尔滤波器、词表和参数,拷走一个 .bin 就能在另一台机器上跑,不用带着整个 Python 环境。这也是它比原版好部署的地方。

官方在限制一栏只写了一句「Inference only」——只做推理,不支持训练和微调。想让模型熟悉自己的口音、行业术语或人名,得先在别的框架里微调,再转成 ggml 加载。

说话人分离是实验功能。它靠 tinydiarize,要配套的 small.en-tdrz 模型加 -tdrz 参数,只在换人处插一个 [SPEAKER_TURN] 标记。它给不出「谁说了哪一句」,官方示例也只覆盖英文。要真正的说话人标注,得另接 pyannote 一类工具,把时间轴对齐回来。

版本节奏可以放心。仓库当前发布版是 v1.9.5,2026 年 10 月 6 日发布,属维护性更新,把 ggml 升到 0.26.0。往前看,v1.9.0 加进了 NVIDIA Parakeet 模型的支持,同一套命令行也能跑这一类模型。

第三方站点 Local Model Watch 记录的 Star 数,在 2026 年 9 月 17 日为 53,721。发布记录本身可以在 releases 页面逐条核对。

安装:三条编译通道怎么选

最省事的是直接用发布页的预编译包,Windows、macOS、Linux 都有 CPU 与 CUDA 版本,解压就能跑。想榨干本机硬件,就从源码编,命令只有两条:cmake -B build,然后 cmake --build build -j --config Release。

后端靠 cmake 开关挑,不同硬件加不同的标志位:

  • 纯 CPU:不加开关,x86 走 AVX2、ARM 走 NEON,笔记本上跑 base 级模型够用。
  • NVIDIA 显卡:换成 cmake -B build -DGGML_CUDA=1,记得装好 CUDA 工具链。
  • 跨厂商显卡:加 -DGGML_VULKAN=1;AMD 显卡另有 -DGGML_HIP=1,还要指定 -DAMDGPU_TARGETS。
  • 苹果机器:Metal 默认开启,想调用神经引擎再编 Core ML,加 -DWHISPER_COREML=1。
whisper.cpp 仓库首页的编译命令与快速开始说明
截图来源:github.com(2026-11-10)

模型单独下载,一条命令一只:sh ./models/download-ggml-model.sh large-v3-turbo。也可以在仓库根目录 make -j large-v3-turbo。语音活动检测要另下 silero 模型,脚本是 download-vad-model.sh。

输入格式是最容易卡住新人的地方。whisper-cli 只接受 16kHz、16 位单声道 WAV。mp3 和 m4a 都要先过一道 ffmpeg:ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav。采样率不对不会报错,而是安静地转出一堆错字。

模型档位:从 tiny 到 large-v3-turbo

下表三个数值取自同一份公开基准,2026 年 5 月在 Apple M4 Max、36GB 内存上跑,每种语言 50 条录音。准确率按词计、暂不含标点,原始数据在 codictate 的基准页。官方 README 另有一张内存表,量级一致。

模型磁盘内存总体准确率
tiny75 MB224 MB59.9%
base142 MB334 MB70.4%
small465 MB807 MB82.1%
medium1.5 GB2.1 GB88.5%
large-v33.0 GB4.0 GB92.9%
large-v3-turbo1.6 GB1.9 GB91.9%

这张表最该看的是落差,不是排名。tiny 不到六成,large-v3 是九成二,中间隔了三十多个百分点。省下的几百兆磁盘,换来的是成片的错字,tiny 只适合做格式验证或极低功耗设备上的关键词识别。

多数人落在 large-v3-turbo 这一档。它的磁盘占用约为 large-v3 的一半,准确率只低一个百分点,速度还快了一截:同一测试里 183 毫秒对 109 毫秒(每音频秒的耗时,越低越好)。差距主要出现在噪声和少数语种上:英语加噪环境 turbo 是 95.4%,完整版 96.3%;匈牙利语 87.4% 对 89.5%。地名、人名要求严格时,这 1.4GB 值得花。

如果你更关心「本地跑什么引擎」这件事本身,而不是这一个项目,可以对照本地跑大模型选引擎那篇看横向分工。

量化:q4_0、q5_0、q8_0 怎么挑

量化自己做也就一行:./build/bin/quantize 输入模型 输出模型 q5_0。官方仓库也放了转好的文件,可以直接下载,省掉这一步。下表仍是同一台 M4 Max 上的 large-v3-turbo 数据。

档位磁盘内存速度(毫秒/音频秒)总体准确率
f161.6 GB1.9 GB10991.9%
q8_0834 MB1.1 GB10891.9%
q5_0574 MB800 MB10191.9%

从全精度压到 q5_0,体积剩不到四成,准确率在这套样本上没动,速度还略快。这类「压缩几乎免费」的结论在大模型上成立得比较好,越往下压、模型越小,代价越明显。

速度那一列有个反常的地方。在这台 M4 Max 上 q5_0 比 q8_0 还快一点。换到社区另一份 2010 年 i5-460M 的测试,q5_0 反而比 q4_0 慢三到五倍,f16 的耗时是 q4_0 的九倍(1285.57 秒对 142.16 秒)。

原因不难猜。低位宽能不能提速,取决于后端有没有为解包写好内核。老 CPU 缺 AVX 指令,多出来的解包开销就变成纯亏。所以「哪个档位快」这个问题没有跨机器的答案,只能在自己的机器上量一遍。

k-quant 系列(q2_k 到 q6_k)在 Whisper 模型上的兼容性不稳。那份老 CPU 报告里,tiny 档加载 k-quant 直接崩溃,base 的 q2_k 输出成了「I, I, I」式的复读。要稳妥,就用官方预转换的 q4_0、q5_0、q8_0 三档。

我的取法是:显存或内存宽裕用 q8_0,几乎不掉字;要压体积用 q5_0;只有老机器、且瓶颈在内存带宽时,才用 q4_0 换速度。

长音频与实时转写:两个绕不开的限制

Whisper 按 30 秒窗口读音频,读完一段,再用自己预测的时间戳决定下一段从哪开始。前一段偏了,后面就一路偏下去,这是长录音时间轴漂移的根源,相关复盘可看 这类错位的成因在 Whisper 的窗口切分逻辑里。人声连续、静音又长的素材,错位最明显。

whisper.cpp 给的解法是语音活动检测。加 --vad 并用 -vm 指定 silero 模型后,它会在静音处切段。--vad-max-speech-duration-s 还能把过长的语音段,在超过 98 毫秒的静音点上强制切开。这样每段都从静音开始、到静音结束,时间戳不再互相牵连。

更稳的路子在进模型之前先切。用 ffmpeg 按静音把长录音切成几分钟一段,再批量跑,切点落在停顿上,跨段丢掉的上下文更少,出问题也容易定位到具体文件。真出错,重跑那几段就行。

实时场景用 whisper-stream,编译时要带 -DWHISPER_SDL2=ON,示例里每 500 毫秒取一次音频。要给内网应用做转写后端,用 whisper-server,它的 HTTP 接口照着 OpenAI 的形式设计,前端改个 base_url 就能接。

还有一些小参数值得先记住:-ml 16 把输出切成短行,-ml 1 输出词级时间戳,--print-colors 按置信度着色,方便人工挑出可疑的句子。这些都属于实验特性,版本之间行为会变。

适用人群与上手路径

适合本地处理会议录音、播客、访谈和课程字幕的人,尤其是素材不方便上云的场合。批量出字幕、按时间轴校对,比手动听写省事,也比按分钟计费的云端接口可控。

不适合两类需求。一是要标出「谁在说话」,得另接说话人分离;二是要低延迟的同声传译,30 秒窗口的切分方式决定了它快不起来。

上手路径建议这样走:先用 base 或 small 跑通整条链路,确认音频格式、线程数和输出格式都对。再按本机硬件换后端,有独显就编 CUDA 或 Vulkan,苹果机保持 Metal。

最后一步是把模型升到 large-v3-turbo 的 q5_0 或 q8_0,用自己的一段真实录音对比准确率,再决定要不要为那一个百分点多花磁盘。若方向反过来是要生成语音,可以看Kokoro-82M 上手那篇。


相关地址

以下为文中项目的官方入口,版本号、编译参数与模型文件以这些页面为准。

  • whisper.cpp(GitHub 仓库):https://github.com/ggml-org/whisper.cpp
  • whisper.cpp(发布页,含预编译包):https://github.com/ggml-org/whisper.cpp/releases
  • ggml 格式模型下载(Hugging Face):https://huggingface.co/ggerganov/whisper.cpp
  • 量化与硬件基准讨论(GitHub Discussions #3752):https://github.com/ggml-org/whisper.cpp/discussions/3752
© 版权声明

相关文章