本地语音转文字:2026年Whisper、faster-whisper、FunASR对比
2026本地语音转文字:Whisper重准确、faster-whisper重速度、FunASR强中文,附模型规格表与安装代码。
📜 目录
本地语音转文字:2026年Whisper、faster-whisper、FunASR对比
录音转文字这件事,云服务按小时收费,一小时的会议几毛到几块,量一大就不便宜;更麻烦的是内容要出机器,法务和医疗场景基本不能接受。本地方案现在足够好用:三个项目覆盖了准确率、速度、中文三个方向,装完就能跑,没有调用次数限制。
一、三个项目的定位
| 项目 | GitHub 星数 | 定位 | 一句话评价 |
|---|---|---|---|
| openai/whisper | 111,299 | 原版参考实现 | 准确率基线,99 种语言,代码最干净 |
| SYSTRAN/faster-whisper | 26,163 | CTranslate2 重实现 | 同样的权重,速度数倍,显存更省 |
| modelscope/FunASR | 20,824 | 阿里达摩院中文工具包 | 中文标点、时间戳开箱即用 |
| m-bain/whisperX | 24,855 | 加了强制对齐和说话人分离 | 要"谁在什么时候说了什么"就用它 |
星数为 2026 年 10 月统计,会持续变化。
二、模型规格与硬件门槛
Whisper 系列权重是通用的,faster-whisper 和 WhisperX 读的是同一套:
| 模型 | 参数量 | 显存(fp16 约) | 适合 |
|---|---|---|---|
| tiny | 39M | 1GB 以内 | 实时字幕草稿、树莓派 |
| base | 74M | 1GB 到 2GB | 语速清晰的短音频 |
| small | 244M | 2GB 到 3GB | 日常会议 |
| medium | 769M | 5GB 到 6GB | 带口音、噪声环境 |
| large-v3 | 1550M | 10GB 左右 | 质量优先,默认选它 |
| distil-large-v3 | 756M | 5GB 到 6GB | 英文场景的速度妥协 |
显存数字随批量、音频长度和框架实现浮动,官方仓库有对照表,以官方说明为准。没有显卡也能跑,只是慢:CPU 上一小时音频用 large-v3 要几十分钟量级,用 small 或 int8 量化能压到十几分钟。具体快慢取决于你的 CPU 核数和音频质量,建议先拿自己的样本跑一遍再定档。
三、原版 Whisper:两条命令跑通
# 需要先装 ffmpeg(Windows 用 winget install ffmpeg,mac 用 brew install ffmpeg)
pip install -U openai-whisper
whisper meeting.mp3 --model large-v3 --language zh \
--task transcribe --output_format srt \
--initial_prompt "以下是普通话会议记录,涉及产品、接口和排期。"
--initial_prompt 这一步很关键:把参会人的名字、专有名词、行业术语写进去,模型会倾向用这些词,人名和缩写的错误率明显下降。
四、faster-whisper:快几倍,代码差不多
pip install -U faster-whisper
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
segments, info = model.transcribe(
"meeting.mp3",
language="zh",
beam_size=5,
vad_filter=True, # 先切掉静音,长录音提速明显
vad_parameters={"min_silence_duration_ms": 500},
initial_prompt="以下是普通话会议记录,涉及产品、接口和排期。",
)
for s in segments:
print(f"[{s.start:.1f} -> {s.end:.1f}] {s.text}")
显存吃紧就把 compute_type 改成 "int8_float16" 或 "int8",精度损失很小,显存占用差不多减半。纯 CPU 用 device="cpu", compute_type="int8",比原版快得多。
五、FunASR:中文场景的实战选择
FunASR 的好处是把 VAD、识别、标点三件事串成了一条链,输出直接带标点和时间戳,不用自己后处理。
pip install -U funasr modelscope
from funasr import AutoModel
model = AutoModel(
model="paraformer-zh", # 中文识别主模型
vad_model="fsmn-vad", # 语音端点检测
punc_model="ct-punc", # 加标点
)
res = model.generate(
input="meeting.wav",
batch_size_s=300, # 按 300 秒一批处理,长音频友好
hotword="青鸟观察派 向量数据库 RAG", # 热词,专有名词命中率提升明显
)
print(res[0]["text"])
模型首次运行会从 ModelScope 自动下载,几百 MB 到 1GB 多,之后就完全离线。热词(hotword)是 FunASR 对中文最实用的一项,产品名、客户名、内部黑话都能塞进去。
六、要区分说话人怎么办
Whisper 本身不分说话人。两条路:
pip install -U whisperx
whisperx meeting.mp3 --model large-v3 --language zh --diarize --min_speakers 2 --max_speakers 6
--diarize 依赖 pyannote 的说话人模型,需要在 Hugging Face 上接受模型条款并配置 token,具体步骤以 whisperx 官方文档为准。中文场景也可以直接用 FunASR 的说话人分离方案,效果依录音质量差异较大,务必先用真实录音验证。
七、怎么选
| 场景 | 选择 |
|---|---|
| 想最快跑通,不要折腾 | 原版 whisper,large-v3 |
| 长录音、有显卡、追求速度 | faster-whisper + large-v3 |
| 纯中文会议、要标点和时间戳 | FunASR paraformer-zh |
| 需要说话人标签 | WhisperX 或 FunASR 说话人方案 |
| 机器很弱、只做草稿 | faster-whisper + small,int8 |
八、四个提升准确率的小动作
- 加 VAD:先把静音和空调噪声切掉,长录音能省一半时间,还减少空转导致的重复输出。
- 喂术语表:
initial_prompt(Whisper)或hotword(FunASR)里放人名和专名,比模型升级更便宜。 - 控制分段长度:超过 30 秒的段落容易跑偏,faster-whisper 里配合 VAD 参数把段落压到 10 到 20 秒。
- 做后处理替换表:把稳定出现的错词做成映射表批量替换,一次配置长期受益。
常见问题
Q:中文识别总是缺标点?
A:原版 Whisper 不给标点,用 FunASR 的 punc_model,或者在提示词里加"以下是带标点的普通话记录"。
Q:为什么转写结果里有重复的整句?
A:多数是模型在静音段空转。开 VAD 过滤,并把 condition_on_previous_text 设为 False 再试。
Q:本地转录一小时音频要多久? A:取决于模型和硬件。中端显卡 + large-v3 通常在几分钟量级,纯 CPU 用 large 会到几十分钟。先跑 5 分钟样本测速,再决定要不要降档。
Q:能商业使用吗? A:Whisper 权重为 MIT 许可,FunASR 为 Apache 2.0,faster-whisper 为 MIT,商用基本无障碍。具体条款以各仓库 LICENSE 为准。
注:模型规格、显存占用与许可条款以各项目官方文档为准。
相关文章
本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。