Mac 上的本地 Whisper:需要什么,花多少,怎么运行

本地 Whisper,是指在你自己的 Mac 上运行 OpenAI 的 Whisper 语音模型,让音频在这台机器上变成文字,而不是在某个地方的服务器上。在 Mac 上,要了解的引擎是 whisper.cpp,它把 Apple 芯片当作一等公民,而真正关键的决定是模型文件:模型越大听得越准,占用的磁盘空间和内存也越多。

我会讲这些部分怎样配合,按 whisper.cpp 自己给出的数据,每种模型大小要花多少,自己运行它的命令,以及 YapToText 处在什么位置。YapToText 是我做的免费 App,它用 whisper.cpp 运行原版的 Whisper Large v3 Turbo (Q5) 文件,所以读那一部分时请把这一点考虑在内。如果你只想知道 Mac 上有没有 Whisper 的 App,Whisper Mac App 页面 回答了这个问题。

在 Mac App Store 下载 YapToText免费下载。无需账号,没有锁定的功能。需要搭载 Apple 芯片的 Mac 和 macOS 14 或更高版本。 源代码在 GitHub 上。

本页内容:12 个部分
  1. 步骤
  2. 了解本地 Whisper 的三个部分
  3. 按磁盘空间和内存选择模型
  4. 用 whisper.cpp 自己运行 Whisper
    1. 第 1 步:获取代码和模型
    2. 第 2 步:编译,并转写示例
    3. 第 3 步:先转换你自己的音频
    4. 或者用 OpenAI 的 Python 软件包
  5. 不用终端,在 YapToText 里使用同一个模型
  6. 本地 Whisper 很慢或者听错时
  7. 本地 Whisper 改变不了的事
  8. 简短版
  9. 指南
  10. 更多指南(英文)
  11. 资料来源
  12. 常见问题

步骤

  1. 从 GitHub 克隆 whisper.cpp 仓库,并在终端里打开它的文件夹。
  2. 用项目的 download-ggml-model.sh 脚本下载一个模型,比如 large-v3-turbo-q5_0。
  3. 用 CMake 编译项目,使用它的 README 里的那两条 cmake 命令。
  4. 把你的录音转换成 16 位的 WAV 文件,比如用 ffmpeg。
  5. 用你的模型文件和 WAV 文件运行 whisper-cli,在终端里阅读文字记录。

了解本地 Whisper 的三个部分

本地 Whisper 有三个部分,三个都在你的 Mac 上。模型是一个文件,引擎负责运行它,而你的音频不必离开这台机器。

  • 模型。 Whisper 是 OpenAI 的语音识别模型,OpenAI 以 MIT 许可证发布了它的代码和模型权重。你只需下载一次模型文件,听的工作就由这个文件完成。
  • 引擎。 whisper.cpp 是 Whisper 的纯 C 和 C++ 实现,同样采用 MIT 许可证。它的 README 把 Apple 芯片称作一等公民,通过 ARM NEON、Accelerate、Metal 和 Core ML 做了优化,并说在 Apple 芯片上,推理完全通过 Metal 在 GPU 上运行。OpenAI 自己的软件包则用 Python 运行 Whisper。
  • 你的音频。 输入一段录音或你的麦克风,输出文字。只有最初下载模型文件时才需要联网。

这就是它和云服务的区别:不会上传任何内容去转写。这也意味着由你的 Mac 来干活,所以你选的模型,决定了这些活要占用多少内存和磁盘空间。

App Store 海报,标题为“Nothing leaves your Mac”,下方是 YapToText 的 AI Models 页面,两个模型都标着 Included。
图1. YapToText 里的一行同时显示了模型和引擎:来自 OpenAI 的 Whisper Large v3 Turbo (Q5),由 whisper.cpp 运行,574 MB,标着 Included。

按磁盘空间和内存选择模型

whisper.cpp 公布了每个模型在磁盘上和内存里占多少,OpenAI 公布了每个模型有多少参数。Turbo 是 OpenAI 的 large-v3 的更快版本,它的 5 位文件大约只占 large 磁盘空间的五分之一。

2026年10月3日,依据 whisper.cpp 的 README 和模型列表,以及 OpenAI 的 Whisper README 核对。

模型参数量 (OpenAI)磁盘上的文件 (whisper.cpp)内存 (whisper.cpp)
tiny39 M75 MiB约 273 MB
base74 M142 MiB约 388 MB
small244 M466 MiB约 852 MB
medium769 M1.5 GiB约 2.1 GB
large (v1, v2 或 v3)1550 M2.9 GiB约 3.9 GB
large-v3,5 位 (q5_0)量化的 large-v31.1 GiB未列出
large-v3-turbo809 M1.5 GiB未列出
large-v3-turbo,5 位 (q5_0)量化的 turbo547 MiB未列出

MiB 和 GiB 按 1,024 为一级计数,所以 whisper.cpp 列表里 547 MiB 的 turbo 文件,就是 YapToText 显示为 574 MB 的同一个文件。两个都如实的页面,就是这样把同一个文件分别写成 547 和 574,而且都没错。whisper.cpp 的内存表只涵盖最初的五种大小,没有给出 turbo 或量化文件的数字。

YapToText 的 AI Models 页面:Whisper Large v3 Turbo (Q5) 和 Phi-3.5 Mini Instruct 都标着 Included,下方是模型库。
图2. YapToText 用 MB 显示大小,所以 whisper.cpp 列为 547 MiB 的 turbo 文件,在这里写成 574 MB,其他 Whisper 模型列在它下面。

这两个项目里还有几点说明:

  • 仅英语的模型。 tiny、base、small 和 medium 还有大小相同的 .en 文件,只能听英语。OpenAI 说,它们在英语上往往表现更好,尤其是 tiny.en 和 base.en,而到了 small.en 和 medium.en,差别就缩小了。
  • 量化模型。 以 q5_0 结尾的文件是量化过的。whisper.cpp 说,量化模型需要的内存和磁盘空间更少,而且视硬件而定,处理起来可以更高效。
  • Turbo。 OpenAI 称它是 large-v3 的优化版本,转写更快,准确度的下降很小,并给出大约是 large 的 8 倍的速度。这个倍数是在 A100 上测的,不是在 Mac 上,OpenAI 还说 turbo 没有为翻译训练过。
  • 语言。 OpenAI 说,Whisper 的表现随语言的不同差别很大。
  • OpenAI 的内存一栏。 OpenAI 的 README 列的是它的 Python 软件包所需的显存:tiny 和 base 约 1 GB,turbo 约 6 GB,large 约 10 GB。这些不是 whisper.cpp 的数字。

我给 YapToText 选了 5 位的 turbo 文件,因为在我自己的听写里,它听到的内容几乎和完整模型一模一样,内存却只要三分之一。这只是一个人的听写,不是基准测试,所以定下来之前,请用你自己的声音试两种大小。

用 whisper.cpp 自己运行 Whisper

自己运行 whisper.cpp,需要终端,以及它的 README 里的命令所假定的两个工具,Git 和 CMake。下面是 README 自己的命令,只是把模型换成了 5 位的 turbo 文件。得到的是终端里一个音频文件的文字记录,而不是输入到你各个 App 里的文字。

第 1 步:获取代码和模型

终端: 克隆 whisper.cpp,并下载 5 位的 turbo 模型。

git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
sh ./models/download-ggml-model.sh large-v3-turbo-q5_0

会发生什么: 项目落在 whisper.cpp 文件夹里,脚本会从 Hugging Face 把 ggml-large-v3-turbo-q5_0.bin 下载到它的 models 文件夹。想少下载一点,可以换成 base.en 或 small。

第 2 步:编译,并转写示例

终端: 编译 whisper-cli,然后在项目自带的示例录音上运行它。

cmake -B build
cmake --build build -j --config Release
./build/bin/whisper-cli -m models/ggml-large-v3-turbo-q5_0.bin -f samples/jfk.wav

会发生什么: CMake 编译项目,whisper-cli 用你下载的模型转写示例,并在终端里打印出文字。

第 3 步:先转换你自己的音频

README 说,whisper-cli 目前只能处理 16 位的 WAV 文件,并给出了一条把其他格式转换过来的 ffmpeg 命令。ffmpeg 需要另外安装。

终端: 把 MP3 转成 whisper-cli 能读取的 WAV 格式。

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

会发生什么: ffmpeg 把 output.wav 写成 16 kHz、单声道、16 位的音频,然后你把它放在 -f 后面交给 whisper-cli。

或者用 OpenAI 的 Python 软件包

终端: 如果你更想用 Python,就安装 OpenAI 自己的软件包。

pip install -U openai-whisper

会发生什么: pip 会安装 whisper 命令。OpenAI 的 README 说,这些代码预计可以在 Python 3.8 到 3.11 上运行,需要 ffmpeg,默认模型是 turbo。

要做实时语音,whisper.cpp 带有 whisper-stream,它每半秒对你的麦克风采样一次并持续转写。它需要 SDL2,README 称它是个简单的示例。把文字送进邮件、Slack 或你的编辑器,则是 App 要补上的部分。

不用终端,在 YapToText 里使用同一个模型

YapToText 运行的是同一个引擎、同一个文件,却没有终端窗口:App 里内置了一份用 Metal 和 Accelerate 编译的 whisper.cpp,App Store 的下载里自带 ggml-large-v3-turbo-q5_0.bin。它的 SHA-256 与 Hugging Face 上的文件一致,所以是原版模型,不是经过定制调整或重新训练的。我做这款 App,是因为我用手打字有困难,我想要的是 Whisper 把文字输入到每个 App 里,而不是打印在终端窗口里。它就是脚本下载的那个文件,变的是它周围的一切。

App Store 海报,标题为“Yap it. Bam. It's typed.”,下方是 YapToText 主窗口和三种浮动面板布局。
图3. 没有终端的同一个 Whisper 文件:你说话时,文字在浮动面板里成形,再落到最前面那个 App 的光标处。

这款 App 在模型周围加了这些东西:

  • 会归还的内存。 在 Energy 页面,Keep models in memory 决定模型在一次听写之后保持加载多久:默认是用完后 2 分钟,选项从 Only while dictating 到 Until quit。更早卸载可以节省能耗和内存,卸载之后的下一次听写要多花几秒。
  • 给 macOS 留出空间。 当 macOS 内存不足时,YapToText 会立刻丢掉已加载的模型,并等五分钟再重新预热。
  • 用电池时换更轻的模型。 Switch models with the power source 默认关闭,它让听写模型和整理模型各有一个接通电源时和使用电池时的选择。
  • 你自己的文件。 在 AI Models 页面的 Your own models 下面,Add Model 接受任何 whisper.cpp 的 GGML .bin 文件,所以你用脚本下载的模型也能用。App 会读取文件来判断它是什么,其他的一律拒绝。
  • 你的 Mac 的数字。 Energy 页面上的 This Mac 卡片显示你的芯片和内存,拿它去对照上面的表就行。

AI Models 页面上的 Dictation Model Library 还有十个 Whisper 模型,从 Tiny 到 Large v3,各自带着 App 显示的大小。AI Models 指南 列出了它们,Energy 指南 解释了内存设置。App Store 的下载大约有 2.9 GB,因为 App 的两个模型都在里面。Homebrew 版本约 12 MB,第一次听写之前需要先下载一个语音模型。

本地 Whisper 很慢或者听错时

下载更大的模型之前,先试试省事的办法。先修好麦克风和词汇,再换模型。

  1. 等第一次运行结束。 模型要先加载才能转写。在 YapToText 里,启动后的第一次听写要等一会儿。如果你用 Core ML 编译了 whisper.cpp,它的 README 说,在设备上第一次运行会很慢,因为 Neural Engine 服务要编译模型。
  2. 设置你说的语言。 YapToText 的 AI Models 页面上,Language 选择器默认是你 Mac 的系统语言,Whisper 用不了的语言会退回到自动检测。语言页面 列出了全部 29 种。
  3. 修好麦克风。 蓝牙麦克风是电话音质,所以 Mac 自己的麦克风听得更清楚。在 YapToText 里,请在菜单栏面板的 Input 选择器里选它。
  4. 教它你的词。 YapToText 的 Dictionaries 页面会用你的名字和术语预先提示 Whisper,而不只是修正它输入的文字。词典指南 介绍了做法。
  5. 说英语就用仅英语的模型。 如果内存紧张,而你只说英语,OpenAI 说 .en 版本往往表现更好,在 tiny 和 base 上最明显。
  6. 更换模型大小。 如果听错而内存允许,就换大的,如果太慢,就换小的。在 YapToText 里,AI Models 页面上的星级显示了其中的取舍,History 里的每次听写,也都显示它自己从停止到出字的时间。
YapToText 的一条 History 记录,展开了处理流程详情:原始转写文本、整理后的文本、模式、输入方式、目标 App 和耗时。
图4. History 里的每次听写都带着自己的耗时:你说了多久,以及从停止到出字的时间,拆分成转写、AI 整理和输入三段。

本地 Whisper 改变不了的事

在本地运行 Whisper,是把活挪到了你的 Mac 上,挪动的也只有这些。本地改变的是你的声音去了哪里,而不是它被听得多准。

  • 错误。 不管在哪里运行,听得准不准都由模型决定,所以它听错的名字,需要的是一个词典条目或一个更好的麦克风,而不是换个地方。
  • 翻译。 OpenAI 说 turbo 没有为翻译训练过,而 YapToText 始终只让 Whisper 转写,从不让它翻译。
  • 一次下载。 本地模型仍然要下载一次。whisper.cpp 的脚本从 Hugging Face 获取它,YapToText 的 App Store 版本里自带它,Homebrew 版本则从 AI Models 页面获取。
  • Intel Mac。 whisper.cpp 把 Intel 和 Arm 的 Mac 都列为支持。YapToText 需要 Apple 芯片和 macOS 14 或更高版本,Intel Mac 我不作任何保证。
  • 准确度的数字。 我不公布任何模型的准确度百分比。星级和你自己的 History 就是参考。

要证明某个设置确实是本地的,离线听写页面 有一个一分钟的测试:关闭 Wi-Fi,然后听写。

简短版

  • 本地 Whisper。 就是你 Mac 上的一个模型文件和一个引擎,不上传任何内容。
  • 模型。 5 位的 turbo 文件,在 whisper.cpp 的列表里是 547 MiB,YapToText 自带的就是它。
  • 自己动手。 克隆 whisper.cpp,下载模型,用 CMake 编译,再对 16 位 WAV 文件运行 whisper-cli。
  • 或者跳过终端。 YapToText 运行同一个文件,并免费输入到任何 App 里。

先根据 Mac 的内存选模型,再根据你自己的声音选。 如果这里的内容和你看到的不一样,请 在 GitHub 上提交 issue。每一条我都会看。

在 Mac App Store 下载 YapToText免费下载。无需账号,没有锁定的功能。需要搭载 Apple 芯片的 Mac 和 macOS 14 或更高版本。 源代码在 GitHub 上。

关于作者。 Ryleigh Newman 从事软件开发,用手打字有困难,每天都用本站介绍的 YapToText 听写。本页译自英文。App 的界面和网站的其他页面是英文的。 进一步了解这个项目(英文)。

指南

更多指南(英文)

资料来源

常见问题

怎样在 Mac 上本地运行 Whisper?

用 whisper.cpp:克隆仓库,用它的 download-ggml-model.sh 脚本下载模型,用 CMake 编译,再对 16 位 WAV 文件运行 whisper-cli。或者安装一个内置它的 App,比如 YapToText,它不用任何设置就能运行 Whisper Large v3 Turbo。

Whisper 需要多少内存?

取决于模型。whisper.cpp 列出的数字是:tiny 约 273 MB,small 约 852 MB,medium 约 2.1 GB,large 约 3.9 GB,并说量化模型需要的更少。它没有给出 turbo 的内存数字。

最好的本地 Whisper 模型是哪个?

我会从 Large v3 Turbo 开始,它的 5 位文件就是 YapToText 自带的那个,在 whisper.cpp 的列表里是 547 MiB。如果内存紧张,small 或 base 占用小得多,OpenAI 说在最小的几种大小上,仅英语的版本在英语上往往表现更好。

Whisper Large v3 Turbo 模型有多大?

在 whisper.cpp 的模型列表里是 1.5 GiB,5 位的 q5_0 文件则是 547 MiB,按十进制单位算是 574 MB。OpenAI 列出的 turbo 参数量是 8.09 亿。

本地 Whisper 需要联网吗?

只有下载一次模型时才需要。之后,whisper.cpp 和 YapToText 都不用联网就能转写,YapToText 的 App Store 版本里自带模型,连那次下载也省了。

能在 YapToText 里使用 whisper.cpp 的模型吗?

能。在 AI Models 页面的 Your own models 下面,Add Model 接受任何 whisper.cpp 的 GGML .bin 文件,App 会从文件本身判断它是什么。