AI 工具 15 min read

whisper.cpp 本機語音轉文字:M2 MacBook 實測,不用 Python、不上雲

純 C/C++ 寫成的 Whisper 實作,MIT 授權、無 Python 依賴,clone 完 cmake 一下就能跑,Apple Silicon 走 Metal 加速。我在 M2 / 8GB 的 MacBook 上實測三種模型:base 系列約 6-7 倍即時速度但中文會寫錯人名,large-v3-turbo 全對且仍有 1.5 倍即時——8GB 記憶體跑 1.5G 模型無壓力。

whisper.cpp 本機語音轉文字:M2 MacBook 實測,不用 Python、不上雲
本文目錄 · 10
懶人包
whisper.cpp 是 OpenAI Whisper 模型的純 C/C++ 實作,MIT 授權,沒有 Python、沒有 PyTorch,clone 完 cmake 兩行就有一支執行檔。
我在 M2 MacBook(8GB 記憶體)實測:base 多語模型轉 17.6 秒中文只要 2.54 秒(6.9 倍即時),但人名會寫錯;large-v3-turbo 全對,仍有 1.5 倍即時。
8GB 記憶體跑 1.5GB 模型完全沒問題,運算緩衝區加起來不到 200MB。
兩個要先知道的坑:.en 結尾的模型完全無法轉錄中文(只回一句 (speaking in foreign language),不報錯);輸出是簡體字,繁中要自己接 OpenCC 轉換。

📌 目錄

把一小時的會議錄音轉成文字,你有三種選擇:丟給雲端 API(要付費、要上傳、敏感內容不能用)、裝一套 Python 環境跑 OpenAI 官方 Whisper(要處理 PyTorch 和 CUDA 的依賴地獄)、或者 clone 一個 repo、cmake 一下,得到一支不到 10MB 的執行檔。

這篇講第三種:whisper.cpp

我在自己這台 M2 MacBook(8GB 記憶體)上從頭 build 起來,實測了三個模型的速度與中文品質。結論先說:最小的模型有 6.9 倍即時速度但會寫錯人名,large-v3-turbo 全對而且仍然快過即時,8GB 記憶體跑 1.5G 的模型完全沒問題。

whisper.cpp 是什麼

whisper.cpp 是 OpenAI Whisper 模型的純 C/C++ 實作,作者是 Georgi Gerganov(也是 llama.cpp 和 ggml 的作者)。MIT 授權,寫這篇的時候 52.5k stars,最新的 commit 是昨天(2026-08-03)。

它跟其他 Whisper 加速方案最大的差別在依賴:

  • 沒有 Python。不用 venv、不用 pip、不用擔心某個套件升版後整組壞掉。
  • 沒有 PyTorch。省下好幾 GB 的安裝空間。
  • 模型是單一檔案。一個 .bin 檔就是一個模型,搬到別台機器一樣能用。
整個專案就是 C/C++ 原始碼加上 ggml 張量函式庫,build 完得到一支執行檔。這個設計讓它可以跑在很多地方:Apple Silicon 走 Metal 和 Core ML、NVIDIA 走 CUDA、還有 Vulkan、OpenVINO、AMD ROCm 等後端,甚至能編成 WebAssembly 在瀏覽器裡跑。

安裝:clone、cmake、完成

我實測的完整流程,在 macOS 26.5.1 / Apple M2 上:

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 完執行檔在 build/bin/whisper-cli

macOS 上不需要額外裝任何東西,Metal 支援是預設開啟的,build 過程中會看到它編譯 libggml-metal.dylib

接著下載模型。專案內附腳本,直接指定模型名稱:

# 英文專用的小模型,141MB
bash ./models/download-ggml-model.sh base.en

# 多語言版本,同樣 141MB
bash ./models/download-ggml-model.sh base

# 目前速度與品質平衡最好的大模型,1.5GB
bash ./models/download-ggml-model.sh large-v3-turbo

然後就能轉錄了:

./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/jfk.wav

專案自帶 samples/jfk.wav 這個 11 秒的甘迺迪演說片段,適合拿來確認環境有沒有裝對。

實測:M2 MacBook 上跑三個模型

測試環境是 Apple M2、8 核心(4 效能 + 4 節能)、8GB 統一記憶體、macOS 26.5.1,whisper.cpp 版本是 commit 64d57d3

中文測試音檔是我用 macOS 內建的 say 指令合成的一段 17.6 秒旁白,內容是這篇文章的開場白,再用 ffmpeg 轉成 whisper.cpp 要求的 16kHz 單聲道 WAV:

say -v Meijia "各位好,我是陳彥彤。今天要介紹的是 whisper 點 c p p⋯⋯" -o zh-test.aiff
ffmpeg -i zh-test.aiff -ar 16000 -ac 1 -c:a pcm_s16le zh-test.wav

這是 large-v3-turbo 跑中文音檔的實際終端機輸出,可以看到它掛上 Metal GPU、認出裝置是 Apple M2,最後印出轉錄結果與各階段耗時:

whisper.cpp 在 M2 MacBook 上以 large-v3-turbo 模型轉錄中文音檔的終端機輸出,顯示 MTL0 backend、Apple M2 裝置、轉錄文字與 11492.28 ms 總耗時

三組實測結果:

模型大小音檔耗時即時倍速運算後端
base.en141MB英文 11 秒1.88 秒5.9xBLAS / Accelerate
base(多語)141MB中文 17.6 秒2.54 秒6.9xBLAS / Accelerate
large-v3-turbo1.5GB中文 17.6 秒11.94 秒1.5xMetal GPU
表中的耗時是實際轉錄運算時間(whisper.cpp 的 total time),不含模型載入。large-v3-turbo 每次啟動要花 7 到 9 秒把 1.5GB 的權重讀進記憶體,這筆固定成本在轉長音檔時可以攤掉,但如果你要一次處理很多個短音檔,用同一個 process 批次跑會比每個檔案重啟一次划算得多。

三個模型的轉錄運算都比即時快,代表一小時的錄音,最慢的 large-v3-turbo 大約 40 分鐘能轉完,base 系列則是 9 分鐘上下。

中文品質的實際差距

同一句話,兩個模型的輸出差異很具體。base 多語模型:

各位好,我是陳雁銅,今天要介紹的是 Whisper.CPP,這是一個用程C加加寫程的語音轉文字工具,
不需要安裝python,在蘋果晶片的筆電上可以,直接使用metal加速執行。

語意大致到位,專有名詞 Whisper.CPP、python、metal 都抓對了,但人名「陳彥彤」變成「陳雁銅」,「純 C++ 寫成」變成「程C加加寫程」。

換 large-v3-turbo:

各位好,我是陈彦彤,今天要介绍的是Whisper.cpp,这是一个用纯C++写成的语音转文字工具,
不需要安装Python,在苹果晶片的笔电上可以直接使用Metal加速执行。

全對。人名對了、「純C++寫成」對了、大小寫也對了。

但注意輸出是簡體字。這是 Whisper 模型處理中文的已知行為,不是 whisper.cpp 的問題——模型訓練資料裡簡體中文佔多數,繁中使用者需要自己在後面接一層轉換(OpenCC 之類的工具)。

三個實測才踩到的坑與細節

這幾件事 README 沒有明講,是我跑起來看 log 才發現的,其中第二個直接讓我的第一次中文測試整個失敗。

小模型不走 Metal,大模型才走

跑 base 系列的時候,啟動 log 是這樣:

whisper_backend_init: using BLAS backend

它走的是 CPU 搭配 Apple 的 Accelerate 框架。換成 large-v3-turbo:

ggml_metal_device_init: GPU family: MTLGPUFamilyMetal4  (5002)
whisper_backend_init_gpu: using MTL0 backend

這時才真的用上 Metal GPU。小模型在 CPU 上跑本來就夠快,搬去 GPU 的傳輸成本反而不划算,所以它會自己判斷。如果你想確認自己的機器有沒有用到 GPU 加速,看啟動時這幾行就知道。

.en 結尾的模型完全不能處理中文

這個坑值得單獨講。我一開始拿 base.en 餵中文音檔,加上 -l zh 參數,結果它回:

[00:00:00.000 --> 00:00:03.920]   (speaking in foreign language)

沒有報錯、沒有警告,就是一句「講外語」然後結束。.en 後綴代表這是英文專用的訓練版本,它認得出「這不是英文」,但沒有能力轉錄。

要處理中文,模型名稱不能有 .enbasesmallmediumlarge-v3-turbo 這些沒後綴的才是多語版本。

8GB 記憶體跑得動 1.5GB 模型

我這台是 8GB 統一記憶體的入門機型,載入 1.5GB 的 large-v3-turbo 全程沒有 swap 爆掉或被系統砍掉。實際運算時 whisper.cpp 配置的緩衝區加起來不到 200MB(KV cache 約 25MB、各階段 compute buffer 約 180MB)。

這代表你不需要頂規機器才能用最好的模型。

常用參數

whisper-cli --help 看得到完整清單,實際常用的是這幾個:

# 指定語言(不指定會自動偵測,但指定了比較準也比較快)
./build/bin/whisper-cli -m models/ggml-large-v3-turbo.bin -f audio.wav -l zh

# 輸出 SRT 字幕檔
./build/bin/whisper-cli -m models/ggml-large-v3-turbo.bin -f audio.wav -l zh -osrt

# 輸出 VTT / 純文字 / JSON
./build/bin/whisper-cli -m models/ggml-large-v3-turbo.bin -f audio.wav -ovtt -otxt -oj

# 翻譯成英文(而不是轉錄原文)
./build/bin/whisper-cli -m models/ggml-large-v3-turbo.bin -f audio.wav -l zh -tr

# 指定執行緒數量
./build/bin/whisper-cli -m models/ggml-base.bin -f audio.wav -t 8

輸入音檔如果不是 16kHz 單聲道 WAV,先用 ffmpeg 轉:

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

還能再快:量化與 Core ML

如果實測速度還不夠,專案提供兩條加速路徑。

整數量化把模型權重壓成更小的精度,換取速度與記憶體:

./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0

量化後的模型用法完全一樣,只是換個檔名。

Core ML 則是把 encoder 的運算搬到 Apple 的神經網路引擎(ANE)上。README 寫這條路徑可以讓 encoder 快三倍以上,但需要額外裝 Python 依賴來轉換模型格式,並且重新 build 時要開 WHISPER_COREML=1。第一次執行會很慢,因為 ANE 要先把模型編譯成裝置專用格式。

我這次實測沒走 Core ML(build log 顯示 COREML = 0),因為預設路徑的速度已經夠用,而且開 Core ML 就得把 Python 依賴請回來,跟「不用 Python」這個核心優點衝突。如果你的場景是大量批次轉錄、每一分鐘都要省,那值得花時間設定。

適合誰用

whisper.cpp 特別適合這幾種情況:

  • 內容不能上雲。會議錄音、客戶訪談、醫療或法律相關的音檔,本機跑完全沒有外傳問題。
  • 不想碰 Python 環境。尤其是要把語音轉文字包進其他應用程式裡的時候,一支執行檔比一整套 Python 環境好處理太多。
  • 要跨平台部署。同一份程式碼可以編到 Mac、Linux、Windows、樹莓派、甚至瀏覽器的 WebAssembly。
  • 量大、要省錢。雲端 API 按時計價,本機跑的邊際成本是電費。
反過來說,如果你要的是精準到單字的時間戳語者分離(分辨誰在什麼時候說話),whisper.cpp 的原生能力比較弱,WhisperX 那類方案更適合。如果你完全不想碰命令列,那也有很多包好圖形介面的工具可以選。

延伸資源

  • whisper.cpp GitHub repo — 原始碼、README 與各平台 build 說明,MIT 授權。
  • ggml — whisper.cpp 底層的張量函式庫,同一批作者維護,llama.cpp 也用它。
  • OpenAI Whisper 論文與官方實作 — 模型本身的來源,想了解模型架構與各尺寸差異可以看這裡。
  • WhisperX — 需要單字級時間戳與語者分離時的選擇。

小結

whisper.cpp 的價值不在於它是最快的 Whisper 實作,而在於它把「跑 Whisper」這件事的門檻降到最低:clone、cmake、下載模型、執行,四個步驟,沒有依賴地獄。

實測數字擺在這裡——一台 8GB 的 M2 MacBook,用最好的 large-v3-turbo 模型,中文轉錄全對,速度仍然快過即時。對大多數本機語音轉文字的需求來說,這個組合已經很夠用了。

author
陳彥彤

AI 工程師 · AI 顧問。Java 後端 8 年、AI 工程師 2 年。AI 內訓 · AI 導入顧問 · 前後端與雲端培訓。

support

覺得文章有用可以到 GitHub 給個 star,或是透過信箱聊聊 AI 內訓、AI 導入顧問或前後端 / 雲端培訓。