起因
存了 200 小时的会议录音 + 课程视频,想搜里面"我哪节课讲过 X 主题"。
传统方案:手工转录(贵 / 慢)、剪映等付费云转录(隐私 + 钱)。
Whisper 是 OpenAI 开源的 ASR 模型,本地跑能转 90+ 种语言,
中文识别质量直接打过国内大多数云服务。
解决方案
最快的方式是 whisper.cpp(C++ 重新实现,CPU/GPU 都很快,无需 PyTorch)。
装
git clone https://github.com/ggerganov/whisper.cpp
cd whisper.cpp
# Apple Silicon 用 Metal;NVIDIA 用 CUDA;纯 CPU 也可以
make -j
# 下模型(large-v3 中文最准;medium 速度+准确度平衡;base 最快但中文一般)
bash ./models/download-ggml-model.sh large-v3
# 1.5 GB 左右
转录单个文件
# 输入要是 16kHz mono WAV
ffmpeg -i lecture.mp4 -vn -ar 16000 -ac 1 -c:a pcm_s16le tmp.wav
./build/bin/whisper-cli -m models/ggml-large-v3.bin \
-l zh -f tmp.wav -osrt -otxt
# 生成 tmp.wav.srt + tmp.wav.txt
参数解释:
- -l zh:源语言中文(不指定的话自动检测)
- -osrt:输出 SubRip 字幕
- -otxt:输出纯文本
批量脚本
#!/usr/bin/env bash
for f in *.mp4; do
base="${f%.mp4}"
[ -f "$base.srt" ] && { echo "skip $f (already done)"; continue; }
ffmpeg -y -i "$f" -vn -ar 16000 -ac 1 -c:a pcm_s16le /tmp/_audio.wav
./whisper-cli -m models/ggml-large-v3.bin -l zh -f /tmp/_audio.wav \
-osrt -of "$base"
done
[ -f "$base.srt" ] && continue 做断点续传:跑了一半中断重启不重做。
Python 版(openai-whisper)
如果要嵌入到 pipeline:
uv add openai-whisper
import whisper
model = whisper.load_model('large-v3') # 第一次自动下载
result = model.transcribe('lecture.mp4', language='zh', verbose=True)
print(result['text'])
# 带时间戳
for seg in result['segments']:
print(f"[{seg['start']:.1f}s] {seg['text']}")
GPU 大模型一篇 1 小时音频约 5-10 分钟。CPU 慢 5-10 倍。
性能 / 选型
我笔记本 M1 Pro + whisper.cpp + large-v3:
| 模型 | 中文 WER | 速度 | 显存 |
|---|---|---|---|
| tiny | ~25% | 30x realtime | 1 GB |
| base | ~18% | 16x | 1 GB |
| small | ~13% | 6x | 2 GB |
| medium | ~9% | 2x | 5 GB |
| large-v3 | ~6% | 1x | 10 GB |
"realtime" = 处理 1 分钟音频要多少秒。large-v3 比 medium 准确率明显
但速度慢 2 倍,中文场景值得。
效果
- 200 小时录音转完一晚上跑完
.srt字幕直接拖进 VLC / 剪映对应视频- 搜索
grep -l "知识点关键词" *.srt一秒定位"哪一节哪一段说过" - 转录质量手工抽查:科技 / 普通话清晰场景准确率 > 95%,方言 / 嘈杂
环境降到 80% 左右
踩过的坑
-
GPU 装错版本:whisper-py 默认装 CPU torch。要手动装 CUDA 版:
uv add torch --index https://download.pytorch.org/whl/cu124。 -
音频不是 16kHz mono:whisper.cpp 严格要求格式;自动失败但 error
message 不明显。永远先ffmpeg -ar 16000 -ac 1。 -
长视频中间 hallucination:超过 30 秒的安静段落 whisper 会"幻想"
一些重复的"谢谢观看"之类的话。--no-speech-threshold 0.6加严格点
过滤,或者--temperature 0减少创造性。 -
断句不准:whisper 自动给句号但有时一长串没标点。后处理用
ja-tokenize
或者再过一遍 LLM 加标点:
python client.chat.completions.create(messages=[{ 'role': 'user', 'content': f'给下面文本加合理标点,不要改字:\n{raw_text}' }]) -
GPU 显存不够:large-v3 需要 10 GB+。降级到 medium(5 GB)+
--word-timestamps也能拿很好结果。
登录后参与评论。