whisper.cpp:极速语音识别的 C++ 实现,PC 到手机都能跑
AI音频
📖 简介
whisper.cpp 是 OpenAI Whisper 模型的 C++ 移植版,由 llama.cpp 的同一作者开发。在 CPU 上就能达到接近实时的语音转文字速度,支持 ARM 架构(树莓派/手机),无需 GPU。45k+ Stars,本地语音识别的事实标准。
📝 详细介绍
语音识别,不能总要联网
OpenAI 的 Whisper 模型准确率极高——但官方的 Python 实现需要 PyTorch、显存占用大、推理速度慢。对于想做本地实时语音转文字、或者想集成到嵌入式设备中的场景来说太笨重了。
whisper.cpp 的作者正是 llama.cpp 的那个大神(ggerganov)。他用纯 C++ 重新实现了 Whisper 模型,把推理速度提升了 10 倍以上,而模型文件大小缩小了 80%。
GitHub 数据
| 指标 | 数据 |
|---|---|
| Stars | 45,000+ |
| 主语言 | C++ |
| 开源协议 | MIT |
| 最近更新 | 2026 年 7 月 |
| 核心作者 | ggerganov(也是 llama.cpp 作者) |
性能对比:C++ vs Python
| 指标 | OpenAI Whisper (Python) | whisper.cpp |
|---|---|---|
| 推理速度(CPU, 12 核) | 3.2x 实时 | 0.8x 实时(比说话还快) |
| 峰值内存 | ~6 GB | ~400 MB |
| 模型文件大小 | ~3 GB | ~500 MB(GGML 格式) |
| GPU 要求 | 必需 CUDA | 完全不需要 |
| 启动时间 | 10-20 秒 |
使用方式
命令行用法
# 下载模型
bash ./models/download-ggml-model.sh base.en
# 转录音频文件
./main -m models/ggml-base.en.bin -f sample.wav
# 实时麦克风转录
./stream -m models/ggml-small.en.bin
# 输出带时间戳的字幕
./main -m models/ggml-base.bin -f meeting.mp3
--print-timestamps -ot -of meeting
C++ 集成示例
#include "whisper.h"
struct whisper_context *ctx = whisper_init_from_file("ggml-base.bin");
if (!ctx) { fprintf(stderr, "模型加载失败
"); return 1; }
// 处理音频
std::vector pcmf32 = load_audio("speech.wav");
whisper_full_params params = whisper_full_default_params(
WHISPER_SAMPLING_GREEDY);
params.print_progress = false;
if (whisper_full(ctx, params, pcmf32.data(), pcmf32.size()) == 0) {
int n_segments = whisper_full_n_segments(ctx);
for (int i = 0; i
模型选择指南
| 模型 | 参数量 | 磁盘 | 速度(i7-12700) | 推荐场景 |
|---|---|---|---|---|
| tiny | 39M | 75 MB | 0.1x 实时 | 嵌入式设备、实时性优先 |
| base | 74M | 142 MB | 0.2x 实时 | 普通 CPU、日常转录 |
| small | 244M | 466 MB | 0.5x 实时 | 准确率和速度的最佳平衡 |
| medium | 769M | 1.5 GB | 1.0x 实时 | 高准确率需求 |
| large-v3 | 1.5B | 2.9 GB | 2.0x 实时 | 最高准确率(多语言) |
tiny 和 base 模型在 Android 手机上也能跑出实时效果。whisper.cpp 甚至有对应的 Android 和 iOS Demo 应用。
应用场景
实时会议转写
whisper.cpp + 麦克风输入,可以实现本地实时会议录音转文字,数据不出局域网:
./stream -m models/ggml-small.en.bin
--step-ms 2000
--length-ms 10000
# 每 2 秒增量识别,保留 10 秒上下文
字幕自动生成
配合 ffmpeg,批量生成视频字幕文件:
ffmpeg -i video.mp4 -vn -acodec pcm_s16le -ar 16000 audio.wav
./main -m models/ggml-medium.bin
-f audio.wav
--print-timestamps
-osrt -of subtitles
# 输出 subtitles.srt 字幕文件
语音助手管线
whisper.cpp + Ollama + 语音合成 = 完整的本地语音助手:
语音输入 → whisper.cpp 转文字 → Ollama LLM 推理 → 语音合成输出
↓ ↑
(纯本地) (纯本地)
数据全程不出设备
技术架构
whisper.cpp 的底层是 GGML 张量库(也是 llama.cpp 的基础)。GGML 针对 CPU 做了极致的优化:
- AVX2 / NEON 指令集加速:充分利用桌面和移动 CPU 的 SIMD 能力
- INT8 量化:模型权重从 FP16 量化为 INT8,速度翻倍,精度几乎无损
- 内存映射(mmap):模型不一次性加载到内存,按需读取
- 纯 C++11 实现:零依赖,编译后单二进制文件
同类对比
| 方案 | CPU 推理速度 | 内存占用 | 语言支持 | 嵌入集成难度 |
|---|---|---|---|---|
| whisper.cpp | ★★★★★ | ★★★★★ | ★★★★ | ★★★★★ |
| OpenAI Whisper (Python) | ★★ | ★★ | ★★★★★ | ★★★ |
| Faster Whisper (CTranslate2) | ★★★★ | ★★★ | ★★★★★ | ★★★ |
| WhisperX (带说话人分离) | ★★★ | ★★ | ★★★★ | ★★ |
| Google Speech-to-Text(云) | N/A | N/A | ★★★★★ | ★★★★ |
总结
whisper.cpp 是那种"用完就回不去"的工具。一旦体验过 400MB 内存、零 GPU、实时转录的流畅感,就很难接受 Python 版的臃肿了。它让本地语音识别不再是服务器专属——一台笔记本电脑、甚至一部手机就能跑出专业级的语音转文字效果。推荐给:语音应用开发者、会议转录需求者、嵌入式 AI 开发者、隐私优先的应用场景。
🚀
AI 项目推荐
AI音频- 标签
- #语音识别 #Whisper #C++ #本地推理 #GGML
- 浏览
- 👁️ 8
- 发布日期
- 2026-07-24