上个月整理播客录音,我差点把两小时的音频传到某个在线转写平台。手停在回车键上,忽然想到:这些内容里有公司项目名和同事的名字,凭什么给别人的服务器处理?
后来我在自己电脑上用 Whisper 跑完了全部转写。不花钱,不出门,断网也能跑。这篇文章把三条路线一次讲清,你照着做就能跑通。
Whisper 是什么来头
Whisper 是 OpenAI 在 2022 年开源的语音识别模型。代码和模型权重都用 MIT 协议,官方 README 写得明白,商用没有法律障碍。
它能做的事不止转写:多语言语音识别、语音翻译、语言识别,三样都行。中文识别是它的强项之一,普通话的准确率相当能打,带口音的也有不错的表现。
模型分好几个尺寸,最小 tiny 只有 39M 参数,手机都能跑;最大 large 有 1550M 参数,官方还提供了一个 turbo 版本,是 large-v3 的优化版,速度约 8 倍,精度损失很小,显存需求约 6 GB。
路线一:whisper.cpp,纯 CPU 也能跑
这是我个人最推荐的方案,尤其适合没有独显的机器。
whisper.cpp 是社区用纯 C/C++ 重写的 Whisper 推理实现,无依赖,编译完一个可执行文件就能跑。重点是它对量化支持很好,模型压到 4 bit 之后,普通笔记本 CPU 跑 medium 模型都不吃力。量化是什么,之前写过一篇讲 GGUF 文件名的入门文章,原理相通。
项目在 GitHub 上叫 ggml-org/whisper.cpp,我写这篇时看了一眼,54,000 多 star,最新版本 v1.9.5 是 2026 年 10 月 6 日发的,维护非常活跃。
跑起来就三步:
# 1. 拉代码并编译
git clone https://github.com/ggml-org/whisper.cpp
cd whisper.cpp
cmake -B build
cmake --build build --config Release
# 2. 下载模型(bash 脚本自动下)
bash ./models/download-ggml-model.sh small
# 3. 转写
./build/bin/whisper-cli -m models/ggml-small.bin -f录音.wav -l zh
Mac 用户有额外福利:whisper.cpp 支持 Metal 加速,M 系芯片跑起来速度很可观。Linux 和 Windows 就靠 CPU 硬扛,small 模型的速度完全可接受。
它还有个内置的 HTTP server 示例(examples/server),起个本地服务,其他应用就能通过接口调它转写。
路线二:faster-whisper,Python 党首选
如果你日常写 Python,或者想批量处理一堆音频文件,faster-whisper 更顺手。
它是 SYSTRAN 用 CTranslate2 框架重做的实现,官方声称比 openai/whisper 原版快 4 倍,显存占用也更省。GitHub 上 25,900 多 star,最新版 v1.2.1。
安装就一行:
pip install faster-whisper
批量转写脚本的骨架长这样:
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cpu", compute_type="int8")
segments, info = model.transcribe("会议录音.mp3", language="zh")
for seg in segments:
print(f"[{seg.start:.1f}s -> {seg.end:.1f}s] {seg.text}")
没有 GPU 就把 device 设成 cpu,compute_type 用 int8 量化,8GB 内存的机器跑 large 模型也没问题。有 N 卡的话把 device 换成 cuda,速度直接起飞。
它返回带时间戳的分段,做字幕、做会议纪要都方便。输出逐段打印,你可以边跑边看进度。
路线三:浏览器里直接跑,不装任何东西
whisper.cpp 的 examples 目录里有个 whisper.wasm,把模型编译成 WebAssembly,浏览器打开网页就能转写。音频不出你的浏览器,连本地服务器都不用过。
适合两种场景:一是想先试试效果再决定装不装,二是用公司电脑没权限装软件。缺点是浏览器里跑大模型慢,推荐用 tiny 或 base 模型先体验。
同一目录下还有 stream.wasm,做实时听写用,对着麦克风说话实时出字。
模型怎么选:一张表说清
官方 README 给的参数和资源对照(速度倍数是官方声明,以 large 为 1x 基准):
| 模型 | 参数量 | 显存需求 | 相对速度 |
|---|---|---|---|
| tiny | 39 M | 约 1 GB | 约 32x |
| base | 74 M | 约 1 GB | 约 16x |
| small | 244 M | 约 2 GB | 约 6x |
| medium | 769 M | 约 5 GB | 约 2x |
| large | 1550 M | 约 10 GB | 1x |
| turbo | 809 M | 约 6 GB | 约 8x |
我的建议:中文转写从 small 起步,不满意再上 medium 或 turbo。tiny 和 base 只适合英文或者先跑通流程。
实际用下来的几点体感
中文识别的整体准确率让我满意,日常对话和播客基本不用改。专有名词是重灾区,人名、产品名、行业黑话,错得比较多,转写完要通读一遍。
标点符号时有时无,whisper.cpp 的默认输出偶尔一整段没有一个逗号,建议搭配它的最大长度参数切分,或者转写后用文本处理补。
长音频记得先切段。超过半小时的录音,用 ffmpeg 按 5-10 分钟切片再喂进去,出错好排查,中断也不心疼。
什么情况还是该用云端
说句公道话,本地方案不是万能的。如果你的音频噪音大、说话人多的会议,或者需要说话人分离(谁在什么时候说了什么),云端的付费转写服务处理得更好,它们专门优化了这些场景。
本地跑的价值在于:隐私敏感的内容、高频大量的常规转写、以及没网的环境。三条路线按你的机器和习惯选就行,折腾一次,之后转写就是免费的。
本地跑模型这件事,之前写过本地和云端怎么选的分析,语音模型和语言模型的取舍逻辑是相通的。完全不想碰命令行的话,LM Studio 那类图形界面工具是另一个入口,不过它主要面向聊天模型,语音还是本文的方案更直接。