5分钟跑通本地语音识别:whisper.cpp 从单个音频文件到实时麦克风
【免费下载链接】whisper.cppPort of OpenAI's Whisper model in C/C++项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp
whisper.cpp 是 OpenAI Whisper 语音识别模型的纯 C/C++ 移植版,让你在本机完全离线地完成语音转文字。这篇文章写给想在自己机器上部署语音识别的开发者:跟着读完,你能完成模型下载、编译构建、文件转写和实时流式识别,并知道怎么按设备选模型、开硬件加速。
它解决什么问题
大部分开源语音识别方案要么依赖 Python 生态、环境又重又难装,要么必须调用云端 API、音频要离开本机。whisper.cpp 用纯 C/C++ 重写同一套 Whisper 模型,运行时零外部依赖,编译后就是一个可以直接跑的可执行文件,天然适合离线场景。它覆盖 macOS、Linux、Windows、iOS、Android、WebAssembly 等平台,并附带 C、Go、Java、Ruby 等语言绑定,C 风格接口集中在 include/whisper.h 一个头文件里,方便嵌入自己的项目。
最短路径跑起来
在终端依次执行下面的命令,每一步后面都标注了作用:
git clone https://gitcode.com/GitHub_Trending/wh/whisper.cpp # 拉取代码 cd whisper.cpp # 进入项目目录 sh ./models/download-ggml-model.sh base.en # 下载约 142MB 的英文模型 cmake -B build # 生成构建脚本 cmake --build build --config Release # 编译出全部示例工具 ./build/bin/whisper-cli -f samples/jfk.wav # 转写仓库自带的示例音频如果最后一条命令输出了带时间戳的英文文本,说明链路已经通了。赶时间的话,make base.en一条命令可以替代中间几步:下载模型、编译并对samples/下所有 wav 跑一遍转写。
核心能力速览
先跑通实时流:麦克风持续转写
whisper-stream工具每 500 毫秒采样一次麦克风并持续输出转写结果,做语音助手、实时字幕的原型验证就靠它:
cmake -B build -DWHISPER_SDL2=ON # 开启 SDL2 以获取麦克风输入 cmake --build build --config Release ./build/bin/whisper-stream -m ./models/ggml-base.en.bin -t 8 --step 500 --length 5000把它当作"麦克风输入版的 whisper-cli"来理解即可;滑窗模式与 VAD 语音活动检测的细节可以看 examples/stream/README.md。
按内存和精度预算挑模型
模型越大识别越准,但吃内存。base.en(约 142MB,内存占用约 388MB)是精度和资源的平衡点,推荐作为起点:
sh ./models/download-ggml-model.sh tiny.en sh ./models/download-ggml-model.sh small.en各档位的磁盘与内存占用:tiny 75MiB/约273MB,base 142MiB/约388MB,small 466MiB/约852MB,medium 1.5GiB/约2.1GB,large 2.9GiB/约3.9GB,完整清单见 models/README.md。带.en后缀的只识别英文但更准,不带后缀的多语言模型适合需要中英混读的场景。
用整数量化压缩模型体积
量化把模型权重压成整数,磁盘和内存占用都更小,在部分硬件上推理还更快。两条命令完成转换和使用:
./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0 ./build/bin/whisper-cli -m models/ggml-base.en-q5_0.bin -f samples/jfk.wav内存紧张的设备(比如只有 4GB 内存的服务器)上,这一步基本是必做项。
调优与配置
音频与加速相关的常用开关,每条配一句说明:
ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav——whisper-cli目前只读 16 位 WAV,其他格式先转一下。cmake -B build -DGGML_CUDA=1—— 有 NVIDIA 显卡时开启 CUDA 加速,编译前需装好 CUDA。cmake -B build -DGGML_VULKAN=1—— 跨显卡厂商的通用 GPU 加速方案,AMD、Intel 显卡可优先考虑。cmake -B build -DWHISPER_COREML=1—— Apple 设备上把编码器交给 ANE 神经引擎,官方称比纯 CPU 快 3 倍以上。cmake -B build -DGGML_BLAS=1—— 没有 GPU 时,用 OpenBLAS 加速 CPU 上的编码器计算。
加速开关都是在首次cmake -B build时带上对应的-D参数,改完参数需要重新编译。
踩坑速查
| 现象 | 可能原因 | 解法 |
|---|---|---|
| 加载音频报错或没输出 | 输入不是 16 位单声道 WAV | 先用上面的 ffmpeg 命令转码 |
| 第一次运行特别慢 | 模型首次加载;Core ML/OpenVINO 首次会编译模型 | 正常现象,第二次运行即恢复速度 |
| 进程崩溃或内存不足 | 模型规格超出机器内存 | 换更小模型或使用量化版 |
| 转写速度太慢 | 纯 CPU 跑大模型 | 换 small 及以下模型,或开启 CUDA/Vulkan 加速 |
| 找不到 whisper-stream 可执行文件 | 编译时没开 SDL2 | 重新构建并加-DWHISPER_SDL2=ON |
收尾
这套组合适合三类人:需要在内网或离线环境做语音转文字的开发者、想在树莓派或手机上跑语音功能的工程师,以及想给自己的桌面应用加转写功能的独立开发者。进阶方向如说话人分割、卡拉OK式字幕视频等,仓库的 examples 目录里都有现成示例可参考。现在就可以执行上面的 6 条命令,5 分钟后你手上会有一个能离线转写音频的本地工具。
【免费下载链接】whisper.cppPort of OpenAI's Whisper model in C/C++项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考