在 macOS 上安装和使用 Whisper.cpp:本地语音转文本的完整指南

本文详细介绍了如何在 macOS 上安装和使用 whisper.cpp,这是一个基于 OpenAI Whisper 模型的 C++ 实现,专为高效语音识别而设计。文章从克隆仓库、安装依赖、编译项目到下载模型文件,逐步指导用户完成配置。此外,还提供了如何使用 whisper.cpp 进行语音识别的具体命令,包括输出 SRT、VTT 和 TXT 格式的字幕文件。针对苹果 M1/M2 芯片用户,文章还介绍了如何通过启用 Metal 支持来优化性能。最后,针对常见问题(如长音频识别错误)提供了解决方案。无论你是开发者还是研究人员,本文都能帮助你快速上手 whisper.cpp,实现本地高效的语音转文本功能。

阅读时长: 4 分钟
共 1753字
作者: eimoon.com

Whisper 是 OpenAI 发布的一款强大的语音识别模型,能够将语音转换为文本。它在多个平台上都有支持,而 whisper.cpp 是 Whisper 模型的一个 C++ 实现,旨在提高推理速度和效率,特别是在低资源环境下。

如果你是 macOS 用户,并且想要在本地使用 whisper.cpp 进行语音识别,本文将教你如何安装和使用 whisper.cpp。

1. 克隆 whisper.cpp 仓库

首先,我们需要从 GitHub 克隆 whisper.cpp 仓库。打开终端并运行以下命令:

git clone https://github.com/ggerganov/whisper.cpp.git

这将把 whisper.cpp 仓库克隆到本地。接下来,进入该目录:

cd whisper.cpp

2. 安装依赖

whisper.cpp 项目使用 CMake 进行构建(编译)。你需要先安装一些必要的工具,比如 CMake 和 Make,它们可以通过 Homebrew 安装:

brew install cmake make

3. 编译 whisper.cpp

现在你已经准备好编译项目了。在 whisper.cpp 目录中,运行以下命令来构建项目:

cmake -B build
cmake --build build --config Release

这样会在/build/bin/目录下面 生成一个whisper-cli可执行文件

4. 下载 Whisper 模型

whisper.cpp 需要使用预训练的 Whisper 模型进行语音识别。你可以从 OpenAI 提供的链接下载模型文件:

可以从下面两个链接查询下载:

https://huggingface.co/ggerganov/whisper.cpp/tree/main

https://ggml.ggerganov.com

下载后,将模型文件放到 whisper.cpp 目录下(或放到其子目录models中)。

Model	Disk	SHA
tiny	75 MiB	bd577a113a864445d4c299885e0cb97d4ba92b5f
tiny.en	75 MiB	c78c86eb1a8faa21b369bcd33207cc90d64ae9df
base	142 MiB	465707469ff3a37a2b9b8d8f89f2f99de7299dac
base.en	142 MiB	137c40403d78fd54d454da0f9bd998f78703390c
small	466 MiB	55356645c2b361a969dfd0ef2c5a50d530afd8d5
small.en	466 MiB	db8a495a91d927739e50b3fc1cc4c6b8f6c2d022
small.en-tdrz	465 MiB	b6c6e7e89af1a35c08e6de56b66ca6a02a2fdfa1
medium	1.5 GiB	fd9727b6e1217c2f614f9b698455c4ffd82463b4
medium.en	1.5 GiB	8c30f0e44ce9560643ebd10bbe50cd20eafd3723
large-v1	2.9 GiB	b1caaf735c4cc1429223d5a74f0f4d0b9b59a299
large-v2	2.9 GiB	0f4c8e34f21cf1a914c59d8b3ce882345ad349d6
large-v2-q5_0	1.1 GiB	00e39f2196344e901b3a2bd5814807a769bd1630
large-v3	2.9 GiB	ad82bf6a9043ceed055076d0fd39f5f186ff8062
large-v3-q5_0	1.1 GiB	e6e2ed78495d403bef4b7cff42ef4aaadcfea8de
large-v3-turbo	1.5 GiB	4af2b29d7ec73d781377bfd1758ca957a807e941
large-v3-turbo-q5_0	547 MiB	e050f7970618a659205450ad97eb95a18d69c9ee

除非模型名称包含.en,否则模型是多语言的。以-Q5_0结尾的模型进行了量化。有关型号的更多信息,请访问上游(OpenAI/Whisper)。上面的列表是由download-ggml-model.sh脚本支持的模型子集,但更多的内容可在https://huggingface.co/ggerganov/whisper.cpp/tree/main和其他地方获得。

一般来说模型越大越准确,但是可能速度可能会慢一些。这里推荐使用medium模型,你可以通过shell脚本进行下载或者手动下载:

cd whisper.cpp
bash ./models/download-ggml-model.sh medium

下载完成后,会在项目的models目录保存ggml-medium.bin模型文件,至此,Whisper.cpp就配置好了。

5.准备格式

whisper-cli 目前仅适用于 16 位 WAV 文件,因此请确保在运行该工具之前转换输入。例如,您可以ffmpeg这样使用:

ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav

如果你的文件时视频文件,例如mov类型,使用下面命令提前音频文件

ffmpeg -i input.mov -vn -acodec pcm_s16le -ar 16000 -ac 1 output.wav

6. 使用 whisper.cpp 进行语音识别

一切准备就绪后,你可以通过运行以下命令来使用 whisper.cpp 对音频文件进行语音识别:

./main -f <audio-file> -m <model-path>

例如:

./main -f /path/to/your/audio.wav -m /path/to/your/whisper-large.bin

默认情况下,识别结果只会打印在终端上。如果你需要输出字幕文件(如 SRT、VTT 或 TXT 格式),可以添加以下参数:-osrt -otxt -ovtt 这会在音频的同级目录下生成 srt,txt,vtt 文件。

1.针对英文语音(medium.en 模型):

./main -m models/ggml-medium.bin -f ~/Downloads/white.wav  -osrt -otxt -ovtt

2.针对中文语音(large 模型)

./main -m models/ggml-medium.bin -l zh -f ~/Downloads/white.wav  -osrt -otxt -ovtt

6. 调整参数

whisper.cpp 提供了多个命令行选项来调整语音识别的行为。以下是一些常用的选项: • -f : 输入音频文件 • -m : 使用的模型文件路径(例如 whisper-large.bin) • -l : 指定识别的语言(默认为自动检测) • -t : 指定使用的线程数(根据你的 CPU 核心数量调整)

例如,如果你想指定语言为英语并使用 4 个线程,可以运行:

./main -f /path/to/your/audio.wav -m /path/to/your/whisper-large.bin -l en -t 4

7. 性能优化

如果你使用的是苹果 M1 或 M2 芯片,whisper.cpp 会自动利用硬件加速(例如 Metal 或 ARM 架构)来提高推理性能。但是,若想要进一步优化,你可以尝试在 CMake 构建过程中启用特定的优化选项,例如:

cmake .. -DAPPLE_METAL=ON
make

这将启用对 macOS Metal API 的支持,可以更有效地利用 GPU 来加速模型推理。

8.常见错误

问题:长音频文件识别错误

有时候,处理较长的音频文件(> 20 分钟)时,可能会遇到识别错误,导致输出重复的句子。例如:

你好,今天
谢谢
谢谢
谢谢
akaaka
ddw
ddw
ddw
ddw

看到有这两种方法解决,但是没有验证:

1.用 –condition_on_previous_text False,但它也可能導致輸出品質比較差 2.有人說用 –temperature_increment_on_fallback 比 1 好 3.尝试把视频剪切成短视频来完成。

github 有很多讨论,但是目前还没有完美的解决办法。

openai/whisper#1253

9.进一步处理

下面你可以使用aegisub等工具来编辑字幕,使其符合你的要求,然后使用ffmpeg嵌入到视频中。

结语

通过以上步骤,你应该可以在 macOS 上成功使用 whisper.cpp 进行语音识别。这为开发人员和研究人员提供了一个高效、轻量的本地语音转文本解决方案,不需要依赖云服务。

如果你在使用过程中遇到任何问题,可以参考 whisper.cpp 的 GitHub 页面 获取更多帮助。希望这篇教程对你有所帮助!

关注我获取更多资讯

公众号
📢 公众号
个人号
💬 个人号

ffmpeg -i input.mov -i subtitles.srt -c:v copy -c:a copy -c:s mov_text output.mov

使用 Hugo 构建
主题 StackJimmy 设计