最近有对英文 audio file 做 ASR 的需求,这里记录一下用 Whisper.cpp 在 macOS 平台上处理音频之后得到转录文本的过程。
Whisper.cpp 不提供 Mac 平台的预编译包,所以只能用 CMake 编译源代码来使用。编译之前可以用 Homebrew 安装 CMake:
brew install cmake
没有 Xcode 编译环境的话也可以先装一下:
xcode-select --install
接下来 clone 源码和编译:
git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j --config Release
# 编译完成后会得到 ./build/bin/whisper-cli
在真正做 ASR 之前还要下载模型,这里下载的是 large-v3-turbo:
sh ./models/download-ggml-model.sh large-v3-turbo
# 模型下载好之后会保存在 models/ggml-large-v3-turbo.bin
如果用自带的脚本下载模型失败,也可以用下载工具(比如 Folx)直接下载 https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-turbo.bin,下载完之后放在 models 目录下就好了。
上面这些都准备好之后就可以做 audio 转录了:
./build/bin/whisper-cli \
-m models/ggml-large-v3-turbo.bin \
-f ~/input.wav \
-otxt
Whisper.cpp 接受的输入格式是 16-bit WAV,所以如果输入格式是 m4a 的话,可以用 ffmpeg 先转换一下再做 ASR:
ffmpeg -i input.m4a -ar 16000 -ac 1 -c:a pcm_s16le input.wav
如果比较明确 audio 里使用的语言还可以用参数直接告诉 Whishper.cpp,这样比自动检测会更稳定些,比如 -l zh。