Whisper.cpp 从零到可用:离线语音识别本地转写完整指南

【免费下载链接】whisper.cpp Port of OpenAI's Whisper model in C/C++ 【免费下载链接】whisper.cpp 项目地址: https://gitcode.com/GitHub_Trending/wh/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

按硬件选对模型尺寸

五个档位的内存和磁盘占用如下,选型基本就是拿这个数字跟你的机器对一下:

模型磁盘内存占用适用场景
tiny75 MiB~273 MB快速验证流程
base142 MiB~388 MB日常使用,默认推荐
small466 MiB~852 MB精度要求更高
medium1.5 GiB~2.1 GB专业场景
large2.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,想改采样或解码策略的话从这里入手。

【免费下载链接】whisper.cpp Port of OpenAI's Whisper model in C/C++ 【免费下载链接】whisper.cpp 项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp

更多推荐