本地語音轉文字實戰:用 whisper.cpp 將廣東話錄音變字幕
唔上傳、唔收費、離線跑——由裝機、模型揀 size、到自動生成 SRT 字幕,附香港口音實測同糾錯心得
重點整理
- 痛點:網上語音轉文字服務要上傳錄音(私隱)、按分鐘收費、廣東話準確度參差——本地跑 whisper.cpp 全部解決
- 模型點揀:tiny/base/small/medium/large-v3 五級,速度同準確度實測對比,教你按機器規格揀啱嘅 size
- 實戰流程:用 ffmpeg 抽音 → whisper.cpp 出 SRT → 用 LLM 加標點同糾正廣東話專有名詞
- 香港場景:廣東話 mixing 英文詞(「schedule」「confirm」)點處理、幾時要 fallback 返雲端模型
點解要本地跑語音轉文字?
香港人做字幕、做會議紀錄、做 podcast 文稿,好多時第一反應係開網上服務。但三個問題:
- 私隱:內部會議錄音、客戶對話,上傳去第三方服務本身就係風險。
- 成本:按分鐘收費,一個鐘嘅錄音唔平;長年累月用落去好肉赤。
- 廣東話:好多雲端服務嘅廣東話模型係「順便支援」,準確度明顯差過英文。
whisper.cpp 係 OpenAI Whisper 模型嘅 C/C++ 實現,可以完全離線跑喺你部機度,仲支援 CPU、Apple Metal、NVIDIA CUDA。裝好之後,一個鐘嘅錄音喺中階機跑 10 至 20 分鐘就出到字幕,零 API 費、零上傳。
裝機(Windows / Mac / Linux)
# 1. 攞 source(用 git)
git clone https://github.com/ggml-org/whisper.cpp
cd whisper.cpp
# 2. Build(CPU 版最簡單)
cmake -B build
cmake --build build --config Release -j
# Mac 有 Metal 加速,build 時會自動開
# NVIDIA 卡就想用 CUDA,加 -DGGML_CUDA=ON:
# cmake -B build -DGGML_CUDA=ON
Build 完,可執行檔喺 build/bin/ 度(whisper-cli 同 whisper-server)。
模型 size 點揀(最緊要嘅一步)
whisper.cpp 嘅模型係 GGML 格式,直接內建下載 script:
# 由細到大(multilingual 版,支援廣東話)
./models/download-ggml-model.sh tiny
./models/download-ggml-model.sh small
./models/download-ggml-model.sh medium
./models/download-ggml-model.sh large-v3
| 模型 | 檔案大細 | 速度(1 分鐘錄音) | 廣東話準確度 | 適合 |
|---|---|---|---|---|
| tiny | 75 MB | ~5 秒 | 差,好多錯字 | 只做粗剪索引 |
| base | 142 MB | ~10 秒 | 一般 | 快速逐字稿 |
| small | 466 MB | ~25 秒 | 幾好 | 日常推薦起點 |
| medium | 1.5 GB | ~1 分鐘 | 好 | 正式字幕 |
| large-v3 | 3.1 GB | ~2.5 分鐘 | 最好 | 要出街嘅成品 |
建議:唔夠快就細一級,唔夠準就大一級。一般 Notebook(無獨顯)用 small 平衡最好;有獨顯就跑 large-v3,速度都追得上。
基本用法:出字幕檔
# 先將音頻轉做 16kHz 單聲道 wav(whisper.cpp 要求)
ffmpeg -i meeting.m4a -ar 16000 -ac 1 -c:a pcm_s16le meeting.wav
# 出 SRT 字幕(指定語言 zh 加快速度同穩定度)
./build/bin/whisper-cli -m models/ggml-large-v3.bin \
-f meeting.wav -l zh -osrt -of meeting
# 想順便出逐字時間戳
./build/bin/whisper-cli -m models/ggml-small.bin \
-f meeting.wav -l zh -ml 1 -osrt
出嚟嘅 meeting.srt 直接拖入剪片軟件就用得。
香港場景:廣東話 mixing 英文詞
呢個係最多人撞板嘅位。模型明明識字,但一遇到「下星期三前 confirm 個 schedule」就變咗「下星期三前 confirm 個 schedule」變「下星期三前功sign個屎cou」……
兩個實用做法:
- 加 prompt 引導:whisper.cpp 支援
--prompt,餵一段包含常見英文詞嘅開場白,會明顯改善。
./build/bin/whisper-cli -m models/ggml-large-v3.bin \
-f meeting.wav -l zh \
--prompt "本段錄音係香港人講嘅廣東話,內容包含 schedule、confirm、deadline、meeting 等英文詞。" \
-osrt
- 出咗字幕再用本地 LLM 執:將 SRT 文字餵入 Ollama,叫佢修正同音錯字、補標點、統一英文詞寫法。呢步嘅 prompt 可以咁寫:
以下係一段廣東話語音轉文字嘅逐字稿,可能夾雜英文詞同音近錯字。
請你:
1. 修正明顯嘅同音錯別字(保持原意,唔好改寫內容)
2. 補返正確標點
3. 英文詞統一用英文寫(例如「個schedule」唔好變「個斯基啾」)
只輸出修正後嘅文字,唔好加解釋:
{{逐字稿}}
實測呢個兩步法(whisper.cpp + 本地 LLM 後處理)嘅成品質素,已經接近直接用貴價雲端服務嘅級數,但完全離線。
幾時唔應該本地跑
本地跑唔係萬能,以下情況考慮雲端:
- 要即時串流轉文字(例如 live caption):whisper.cpp 有 streaming 範例但設定複雜,商用 API 省心。
- 機器太弱(無 GPU + 舊 CPU):跑 large-v3 可能慢過實時,錄 1 個鐘要跑 2 個鐘。
- 要極高準確度嘅專業轉錄(例如法律紀錄):人工校對始終無可替代,本地模型可以當「第一稿」加速工序。
總結
- whisper.cpp = 離線 + 免費 + 私隱安全,係香港做字幕/會議紀錄嘅實用工具。
- 模型揀 size 用「small 起步、按需要升降級」,唔使一嚟就 large-v3。
- 廣東話 mix 英文係最大難關,用
--prompt引導 + 本地 LLM 後處理兩招夾擊。 - 裝一次、跑一世,之後所有錄音轉文字都唔再逐分鐘俾錢。
延伸閱讀
- Ollama vs llama.cpp 實戰對決——本地模型引擎嘅選擇
- 量化入門——大模型點塞入細卡
- AI Agent 工作流入門——將轉文字接落自動化流程
