Whisper.cpp 从零到可用:离线语音识别本地转写完整指南
Whisper.cpp 从零到可用:离线语音识别本地转写完整指南
手上有 10 条会议录音想一次性转成文字,又不想把音频传到云服务。whisper.cpp 就是干这个的——它是 OpenAI Whisper 语音识别模型的 C/C++ 移植版,整个转写过程在本地离线完成,纯 C++ 实现、无第三方依赖。
五分钟出第一条转录结果
环境要求很低:一台装了 C++ 编译器(C++11 及以上)和 CMake 的机器,内存 2GB 起步。Linux 直接装编译工具链即可:
sudo apt install build-essential cmake
然后依次执行:拉代码、下模型、编译、跑示例音频。仓库里自带一条 JFK 演讲的样例 samples/jfk.wav,可以直接用:
git clone https://gitcode.com/GitHub_Trending/wh/whisper.cpp
cd whisper.cpp
bash models/download-ggml-model.sh base.en
cmake -B build
cmake --build build --config Release
./build/bin/whisper-cli -f samples/jfk.wav
跑完会在终端看到带时间戳的英文转写结果。模型文件默认找 models/ggml-base.en.bin,所以上面不需要 -m 参数。嫌麻烦的话,make base.en 一条命令可以完成"下载模型 + 构建 + 转写全部示例音频"。
工具装好了,接下来看几个日常会用到的玩法。
换语言、出字幕、批量跑
非英语音频:默认按英语识别,中文音频要加 -l zh,日语 -l ja。不确定语种就传 -l auto 让它自动判断,或者只加 -dl 让它检测完语种直接退出。注意 .en 后缀的模型只认英语,多语种场景要下不带 .en 的模型。
生成字幕文件:命令行工具能直接输出多种格式。加 -osrt 得到 SRT 字幕、-otxt 纯文本、-ovtt VTT、-oj JSON,文件会放在音频同目录。做字幕工作流的话基本 -osrt 就够了。
批量处理:-f 参数可以出现多次,一条命令处理多个文件:
./build/bin/whisper-cli -f a.wav -f b.wav -f c.wav -osrt
有个坑先说在前面:它目前只吃 16 位单声道 16kHz 的 WAV。mp3、m4a 之类的先用 ffmpeg 转一下:
ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav
按硬件选对模型尺寸
五个档位的内存和磁盘占用如下,选型基本就是拿这个数字跟你的机器对一下:
| 模型 | 磁盘 | 内存占用 | 适用场景 |
|---|---|---|---|
| tiny | 75 MiB | ~273 MB | 快速验证流程 |
| base | 142 MiB | ~388 MB | 日常使用,默认推荐 |
| small | 466 MiB | ~852 MB | 精度要求更高 |
| medium | 1.5 GiB | ~2.1 GB | 专业场景 |
| large | 2.9 GiB | ~3.9 GB | 精度优先 |
内存不够可以下量化版(如 large-v3-q5_0,2.9 GiB 压到 1.1 GiB),精度损失很小。
有加速硬件的话,构建时加对应参数即可,运行时自动走 GPU:
- NVIDIA:
cmake -B build -DGGML_CUDA=1 - 各品牌显卡(Vulkan):
cmake -B build -DGGML_VULKAN=1 - CPU 用 OpenBLAS 加速:
cmake -B build -DGGML_BLAS=1 - Apple Silicon 默认走 Metal,无需额外配置
线程数默认取核心数的一半,可以用 -t 手动指定。改完参数重新 cmake --build build 就行。
几个高频坑
Q:报错或者转写出来是空的? 九成是音频格式问题。确认是 16 位 16kHz 单声道 WAV,不是用 -f 直接传了 mp3。
Q:识别不准怎么办? 先升一档模型(base → small → medium);再确认语种参数和模型类型匹配——中文音频配 .en 模型必然拉胯。
Q:模型下载脚本失败? 手动下载 ggml-xxx.bin 文件放进 models/ 目录即可,模型清单和下载地址见 models/ 的说明。
Q:第一次用 GPU 特别慢? 首次运行要把模型编译成设备专属缓存,第二次开始就快了,属正常现象。
Q:想在局域网里给别的程序调用? 仓库自带一个 HTTP 服务示例,接口风格模仿 OpenAI 的 API,位置在 examples/server/。
转写逻辑本身集中在 src/whisper.cpp,想改采样或解码策略的话从这里入手。
更多推荐


所有评论(0)