Whisper 本地转写 2026
云端转写按分钟计费,音频还得先上传。Whisper 系列模型本地跑完全免费,但选错分支、算力类型或参数,速度能差出一个数量级。这篇给能直接跑的配置和六个真实坑。
Whisper 本地转写 2026:不依赖云端的开源语音转文字
云端转写按分钟计费,音频还得先上传到别人的服务器。本地转写把这两件事都解决了:文件不出机器,跑多少小时都是电费。
Whisper 是这条路的事实标准,但直接用原版在 CPU 上慢到没法用。2026 年的现实是三个项目分工:原版做参考,faster-whisper 做生产,whisperX 做带时间戳和说话人分离的精细场景。
三个选择,别选错
| 项目 | 底层 | 优势 | 什么时候用 |
|---|---|---|---|
| openai/whisper | PyTorch 原版 | 文档最全,行为最接近论文 | 对照实验、复现结果 |
| faster-whisper | CTranslate2 重实现 | 同精度下快数倍,CPU 可用,内存占用低 | 默认选择,批量转写 |
| whisperX | faster-whisper + 对齐 | 词级时间戳、说话人分离 | 做字幕、多人会议记录 |
十分钟跑通 faster-whisper
pip install faster-whisper
# 需要 ffmpeg 解码音频,Windows 装完要把 bin 目录加进 PATH
from faster_whisper import WhisperModel
model = WhisperModel("small", device="cpu", compute_type="int8")
segments, info = model.transcribe(
"meeting.mp3",
language="zh", # 明确指定,别让它猜
vad_filter=True, # 静音段直接跳过,防幻觉
beam_size=5,
)
for s in segments:
print(f"[{s.start:7.1f} → {s.end:7.1f}] {s.text}")
segments 是生成器,边解码边出结果,长音频不会一次性吃满内存。
要输出 SRT,自己写十几行就够:
def fmt(t):
h, m, s = int(t // 3600), int(t % 3600 // 60), t % 60
return f"{h:02d}:{m:02d}:{s:06.3f}".replace(".", ",")
with open("out.srt", "w", encoding="utf-8") as f:
for i, s in enumerate(segments, 1):
f.write(f"{i}\n{fmt(s.start)} --> {fmt(s.end)}\n{s.text.strip()}\n\n")
模型档位与算力类型
| 模型 | 参数量(约) | 相对速度 | 质量 | 建议 |
|---|---|---|---|---|
| tiny | 39M | 最快 | 只能听个大概 | 只用于草稿或关键词检索 |
| base | 74M | 很快 | 一般 | 快速验证流程 |
| small | 244M | 中等 | 中文可读 | CPU 上的默认起点 |
| medium | 769M | 慢 | 明显更好 | GPU 或愿意等 |
| large-v3 | 1.55B | 最慢 | 最好 | GPU,正式交付 |
compute_type 决定速度和显存的平衡:
| 取值 | 硬件 | 说明 |
|---|---|---|
float16 |
GPU | 默认,速度快 |
int8_float16 |
GPU | 省显存,质量损失很小 |
int8 |
CPU | CPU 上的首选 |
float32 |
CPU | 慢,一般不必 |
显存大致量级:medium 在 GPU 上占 2-4GB,large-v3 占 4-6GB,随 beam size 和并发变化。CPU 上内存主要被模型本身占用,int8 量化后 small 约 0.5GB。
六个真实会踩的坑
1. 中文输出繁体字。 Whisper 的中文输出常常是繁体,这是模型训练数据导致的,不是配置错。两个办法:转写时给 initial_prompt="以下是普通话的句子,请用简体中文输出。",或转完后用 OpenCC 统一转简体。后者更可靠。
2. 指定语言比自动检测好。 自动检测要额外解码一段音频,短片容易误判成粤语或日语。已知语种就写死 language="zh"。
3. 静音段产生幻觉。 没有语音的段落,模型有时会凭空输出"谢谢观看""字幕由某某提供"。开 vad_filter=True 基本能压住。
4. 长音频复读。 同一句话被反复输出,是解码上下文串了。设 condition_on_previous_text=False 断开跨段依赖,代价是段间连贯性略降。
5. 专有名词错。 人名、产品名、术语几乎必错。用 initial_prompt 把这些词写进去,等于给模型一个词表。
6. GPU 版报 cuDNN/cuBLAS 错。 CTranslate2 对 CUDA 和 cuDNN 版本敏感,装完 CUDA 还要单独装匹配的 cuDNN。图省事就先跑 device="cpu", compute_type="int8",速度未必不能接受。
速度与成本
一小时会议音频,在普通笔记本 CPU 上用 small + int8 大致接近实时或稍慢,跑完要一杯咖啡的时间;同一条音频在云端按分钟计费,还要上传几十到上百 MB。
真正的差别不在钱,在合规:法务、医疗、HR 的录音走云端要过数据协议,本地转写是"允许处理"和"不许出机器"的区别。
常见问题
Q:能不能做到比实时更快? A:GPU 上可以,large-v3 配 float16 通常快于实时;CPU 上很难,除非用小模型。
Q:多人会议怎么区分说话人? A:faster-whisper 本身不做分离,用 whisperX(带 diarization 流程),或额外接 pyannote 一类的说话人分离模型。
Q:能转写视频吗? A:能,ffmpeg 支持的容器都能解,直接传 mp4 即可,音频轨会被抽出来。
Q:中文标点准吗? A:Whisper 自带标点,整体可读,但长句断句和引号经常要人工过一遍。正式交付前留出校对时间。
Q:有没有不用 Python 的方案? A:有,whisper.cpp 是 C++ 实现,编译后单个二进制可跑,适合塞进桌面工具或嵌入式设备。
注:模型体积、显存与速度为量级参考,随硬件、量化方式和音频长度变化;安装依赖以 faster-whisper 官方文档为准。
相关文章
本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。