--- title: 在 macOS 上安裝使用 Whisper.cpp 完整指南 description: 實作 OpenAI Whisper 語音識別模型的 C++ 版本,支援即時麥克風辨識和多語言(含中文)轉錄 tags: whisper, openai, audio-transcription, speech-recognition, cpp, macos image: https://i.imgur.com/EKlSBgc.png lang: zh-tw --- # 在 macOS 上安裝使用 Whisper.cpp 完整指南 :::info **📄 文件說明**:本文檔詳細介紹如何在 macOS 系統上安裝、編譯和使用 Whisper.cpp 進行即時語音辨識,支援中文(繁體/簡體)。最後更新:2025年5月 ::: [TOC] ## 📚 簡介 [whisper.cpp](https://github.com/ggerganov/whisper.cpp) 是 OpenAI [Whisper](https://openai.com/research/whisper) 語音識別模型的 C/C++ 實作版本,與原版 Python 相比,具有以下優點: - 🚀 **更快速**:C++ 實作使推理速度提升 4-5 倍 - 💻 **更輕量**:不需要 Python、PyTorch 或大型 ML 框架 - 📱 **更便攜**:可在多種裝置上運行,包括 CPU 和 GPU 支援 ### 主要功能 - ✓ 即時麥克風語音辨識 - ✓ 支援多國語言(含繁體/簡體中文) - ✓ 高精度語音轉錄 - ✓ 低延遲和高效能 - ✓ 語音活動偵測(VAD)整合 - ✓ 時間戳標記(定位詞語時間點) - ✓ 輸出多種格式(文字、SRT、VTT 字幕) - ✓ 支援 Apple Silicon 原生加速 ## 🛠️ 環境設置 ### 系統需求 - macOS 10.15 (Catalina) 或更新版本 - 4GB+ RAM(建議 8GB+) - 支援 Intel 和 Apple Silicon (M1/M2/M3) 晶片 ## 💨 快速安裝方法 (2025年最新) ### 使用 Homebrew 一鍵安裝 (最簡單) 2025年,Whisper.cpp 已正式提供 Homebrew 安裝套件,這是最簡單的安裝方法: ```bash # 安裝 Whisper.cpp 和依賴的 ffmpeg brew install whisper-cpp ffmpeg ``` :::tip **提示**:這種方法適合快速入門,但功能相對有限。若需要最大化效能或啟用進階功能(如 Metal 加速),建議從源碼編譯安裝。 ::: ### 檢查安裝版本 安裝後,您可以檢查 Whisper.cpp 的版本: ```bash whisper-cpp --version ``` 目前最新穩定版本為 v1.7.2(截至2025年5月)。 ## 🎤 安裝 SDL2 音訊處理函式庫 whisper.cpp 的即時轉錄功能依賴 SDL2 來擷取麥克風音訊。 在終端機中執行以下命令安裝 SDL2: ```bash brew install sdl2 ``` ## 📥 從源碼編譯安裝 (進階選項) ### 1. 複製專案 ```bash git clone https://github.com/ggerganov/whisper.cpp.git cd whisper.cpp # 切換到最新穩定版本(目前為v1.7.2) git checkout -b v1.7.2 v1.7.2 ``` ### 2. 啟用 Metal 和 Core ML 加速 (Apple Silicon 專用) 對於 M1/M2/M3 芯片的 Mac,可以啟用 Metal 和 Core ML 加速以獲得最佳效能: ```bash # 使用 Metal 加速(Apple Silicon 優化) cmake -B build -DWHISPER_METAL=ON -DWHISPER_SDL2=ON ``` 或者也可以啟用 Core ML: ```bash # 使用 Core ML 加速 cmake -B build -DWHISPER_COREML=ON -DWHISPER_SDL2=ON ``` ### 3. 標準編譯(適用於所有 Mac) 如果不需要特殊加速,可以使用標準編譯: ```bash cmake -B build -DWHISPER_SDL2=ON cmake --build build --config Release ``` 編譯完成後,whisper-stream 可執行檔將位於 `build/bin/` 目錄中。 ## 🔎 模型選擇與下載 Whisper 提供多種不同大小和精確度的模型。對於中文語音辨識,建議使用多語言模型,而非僅限英文的 `*.en` 模型。 ### 模型對照表 (2025年更新) | 模型名稱 | 檔案大小 | 記憶體需求 | 相對速度 | 準確度 | 中文支援 | 備註 | |---------|--------|-----------|---------|-------|---------|------| | tiny | ~75MB | ~390MB | 最快 | 最低 | ✅ 基本支援 | 適合極度受限的裝置 | | base | ~142MB | ~500MB | 快 | 較低 | ✅ 支援 | 適合一般對話 | | small | ~466MB | ~1.0GB | 中等 | 中等 | ✅ 良好支援 | 平衡速度和準確度 | | medium | ~1.5GB | ~2.6GB | 較慢 | 較高 | ✅ 優良支援 | 適合專業轉錄 | | large-v3 | ~3.1GB | ~5.0GB | 慢 | 最高 | ✅ 最佳支援 | 最高準確度 | | large-v3-turbo | ~3.0GB | ~4.8GB | 中等 | 較高 | ✅ 最佳支援 | **新**: 平衡速度與準確度 | :::warning **注意**: - 帶有 `-q5_0` 或 `-q8_0` 後綴的模型是量化版本,犧牲少量準確度來換取更快的速度和更小的檔案大小 - 帶有 `-turbo` 後綴的模型是2024年新增的平衡型模型,提供更好的效能和精確度平衡 ::: ### Apple Silicon 專用模型 對於 M1/M2/M3 芯片的 Mac,可以使用專為 Apple Silicon 優化的模型版本: ```bash # 下載 Apple Silicon 優化版 large-v3 模型 ./models/download-ggml-model.sh large-v3-applesilicon ``` ### 一般模型下載 使用內建的下載腳本取得所需模型: ```bash # 下載 base 多語言模型(支援中文,較小) ./models/download-ggml-model.sh base # 或下載量化版 large-v3 模型(最佳中文支援,速度較快) ./models/download-ggml-model.sh large-v3-q5_0 # 或下載新的 turbo 模型(平衡速度與準確度) ./models/download-ggml-model.sh large-v3-turbo # 或下載完整 large-v3 模型(最佳準確度,但較慢) ./models/download-ggml-model.sh large-v3 ``` :::info **提示**:下載時請使用模型名稱(如 `large-v3`),而非檔案名稱(如 `ggml-large-v3.bin`)。 ::: ## 🎧 音訊格式處理 Whisper.cpp 最佳支援 16kHz、16-bit 單聲道 WAV 格式。如果您的音訊檔案是其他格式,需要先進行轉換。 ### 使用 ffmpeg 轉換音訊 ```bash # 將任何音訊檔案轉換為 Whisper 最佳支援格式 ffmpeg -i 輸入檔案.mp3 -ar 16000 -ac 1 -c:a pcm_s16le 輸出檔案.wav ``` ### 從影片提取音訊 ```bash # 從影片提取音訊並轉換為適合的格式 ffmpeg -i 影片檔案.mp4 -ar 16000 -ac 1 -c:a pcm_s16le 輸出檔案.wav ``` ## 🚀 執行即時語音轉錄 ### 中文語音辨識(即時麥克風輸入) ```bash # Homebrew 安裝版本的執行方式 whisper-cpp \ --model ~/tools/ggml-large-v3-turbo.bin \ --language zh \ --threads 4 \ --step 500 \ --length 5000 \ --vad-thold 0.6 \ --print-colors \ --split-on-word \ --max-len 65 # 或使用源碼編譯版本的執行方式 ./build/bin/whisper-stream \ -m models/ggml-large-v3-q5_0.bin \ -l zh \ -t 4 \ --step 500 \ --length 5000 \ --keep 200 \ --vad-thold 0.6 \ --freq-thold 100.0 \ -ps \ -kc \ -f whisper_output.txt ``` ### 2025年新增實用參數 | 參數 | 說明 | |-----|------| | `--split-on-word` | 在單詞邊界分割文本,避免單詞被截斷 | | `--print-colors` | 使用彩色輸出,提高可讀性 | | `--max-len <n>` | 設定每行最大字元數,適合字幕製作 | | `--no-timestamps` | 關閉時間戳記輸出 | | `--output-vtt` | 輸出 WebVTT 格式字幕 | | `--output-srt` | 輸出 SRT 格式字幕 | ### 原有參數說明 | 參數 | 說明 | |-----|------| | `-m` | 模型檔案路徑 | | `-l zh` | 語言設定為中文(支援繁體/簡體) | | `-t 4` | 使用 4 個執行緒 | | `--step 500` | 每 500ms 擷取語音進行分析 | | `--length 5000` | 每輪處理 5 秒音訊 | | `--keep 200` | 保留前一段 200ms 防止語音被截斷 | | `--vad-thold 0.6` | 語音活動偵測門檻,0.5~0.8 間調整 | | `--freq-thold 100.0` | 高通濾波,消除背景低頻雜訊 | | `-ps` | 顯示特殊 tokens,如 [NOISE] | | `-kc` | 保留語境,可提升對話連貫性 | | `-f whisper_output.txt` | 將輸出儲存至文字檔 | :::tip **最佳化提示**:若模型辨識結果出現重複詞彙循環,可以: 1. 降低 `--keep` 值至 100ms 2. 不使用 `-kc` 參數 3. 增加 `--step` 間隔時間至 1000ms 4. 考慮使用未量化的完整模型 ::: ## 📊 效能參考數據 (2025年) 以下是在不同 Apple 裝置上處理 10 分鐘中文音訊的參考時間: | 裝置 | 模型 | 處理時間 | 即時因子 | |------|------|---------|--------| | MacBook Pro M3 | large-v3-turbo | ~1.5 分鐘 | 6.7x | | MacBook Pro M2 | large-v3-q5_0 | ~2 分鐘 | 5.0x | | MacBook Air M1 | medium | ~1.8 分鐘 | 5.5x | | Mac Mini Intel i5 | small | ~2.5 分鐘 | 4.0x | *即時因子:處理時間與音訊長度的比率,越高越好* ## 📱 進階應用:集成到 iOS/macOS 應用 Whisper.cpp 2025年版本提供了 XCFramework 支援,方便開發者集成到自己的 iOS 和 macOS 應用中。 ### 建立 XCFramework ```bash # 在 whisper.cpp 目錄下 cd apple ./setup.sh ./build-xcframework.sh ``` 這將在 `apple/framework/whisper.xcframework` 生成可直接集成到 Xcode 專案的框架。 ### 在 Xcode 專案中使用 1. 將生成的 `whisper.xcframework` 拖曳到您的 Xcode 專案 2. 在 Build Phases > Link Binary With Libraries 中確認框架已加入 3. 在 Swift 或 Objective-C 代碼中引用 Whisper API ```swift import whisper // 初始化 Whisper 上下文 let context = whisper_init_from_file("path/to/model.bin") // 使用 Whisper 進行轉錄 // ... // 釋放資源 whisper_free(context) ``` ## 📝 常用指令範例 ### 建立便捷執行腳本 可以創建 `whisper-mic.sh` 腳本,方便日後執行: ```bash #!/bin/bash ./build/bin/whisper-stream \ -m models/ggml-large-v3-q5_0.bin \ -l zh \ -t 4 \ --step 500 \ --length 5000 \ --keep 200 \ --vad-thold 0.6 \ --freq-thold 100.0 \ -ps \ -kc \ -f whisper_output.txt ``` 加上執行權限: ```bash chmod +x whisper-mic.sh ``` ### 處理音訊檔案(非即時) 使用 `whisper-cli` 工具處理預先錄製的音訊檔: ```bash ./build/bin/whisper-cli \ -m models/ggml-large-v3-q5_0.bin \ -f samples/zh.wav \ -l zh \ --output-txt \ --output-srt ``` ### 自動檢測語言 ```bash # 自動檢測音訊的語言 ./build/bin/whisper-cli \ -m models/ggml-large-v3.bin \ -f samples/audio.wav \ --auto-language ``` ## 🔍 常見問題排解 ### 1. 辨識結果重複詞彙或句子 **問題**:輸出像 `[_BEG_]回顧一年的房地產[_TT_100][_TT_100]回顧一年的房地產[_TT_200]...` 反覆出現。 **解決方案**: - 減少 `--keep` 參數值 - 移除 `-kc` 參數 - 增加 `--step` 間隔 - 使用更高質量的模型 ### 2. 輸出含有 `[_BEG_]` 和 `[_TT_]` 標記 **說明**: - `[_BEG_]` 表示新段落開始 - `[_TT_150]` 是時間戳標記(表示 1.5 秒) 這些是內部標記,用於標示轉錄時間點,一般可忽略。 ### 3. 不想在終端顯示輸出 ```bash ./build/bin/whisper-stream ... > /dev/null ``` 這會將所有輸出導向空設備,但仍保留檔案輸出(如有使用 `-f` 參數)。 ### 4. Metal 或 Core ML 加速無法使用 **問題**:編譯時啟用了 Metal 或 Core ML,但執行時出現錯誤。 **解決方案**: - 確保您使用的是 Apple Silicon Mac - 使用 `xcode-select --install` 確保開發工具齊全 - 嘗試更新至最新的 macOS 版本 ## 🌐 網頁版支援 (2025新增) Whisper.cpp 現在也支援在網頁瀏覽器中運行(透過 WebAssembly): 1. 在線試用:https://ggml.ai/whisper.cpp/ 2. 自行部署: ```bash cd examples/web ./build.sh python -m http.server ``` ## 📚 參考資源 - [whisper.cpp GitHub 倉庫](https://github.com/ggerganov/whisper.cpp) - [OpenAI Whisper 模型](https://github.com/openai/whisper) - [Hugging Face 模型庫](https://huggingface.co/ggerganov/whisper.cpp) - [Apple Metal 加速指南](https://developer.apple.com/metal/) - [Core ML 集成文檔](https://developer.apple.com/documentation/coreml) --- ###### tags: `whisper` `openai` `audio-transcription` `speech-recognition` `cpp` `macos`