如何用 faster-whisper 把 Whisper 语音转录提速4倍:完整实战指南
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
faster-whisper 是一个基于 CTranslate2 推理引擎重新实现的 OpenAI Whisper 语音转录库。它保持与原版相同的准确率,但速度最快可提升 4 倍,内存占用更低,并支持 8 位量化。如果你还在用 openai/whisper 转录整场会议录音、干等十几分钟,这套方案可以直接替换,准确率不降。
场景先说清楚:转录慢卡在哪
用原版 Whisper 做语音转文字时,常见的两个抱怨:
- 13 分钟录音要转 2 分多钟(GPU、large-v2 模型),长音频更夸张;
- 批量处理时内存/显存吃紧,想开批处理又容易爆显存。
faster-whisper 的做法不是"魔改 Whisper",而是把 Whisper 模型搬到 CTranslate2 这个专门为 Transformer 模型做过推理优化的引擎上跑,再配合权重量化(int8)和批量推理,把耗时和内存同时压下来。
一句话版本:项目结构有多轻
整个库就 6 个核心模块,职责清晰:
| 模块 | 负责什么 |
|---|---|
| faster_whisper/audio.py | 音频解码,依赖 PyAV(自带 FFmpeg 库,系统不用单独装 FFmpeg) |
| faster_whisper/feature_extractor.py | 梅尔频谱特征提取 |
| faster_whisper/tokenizer.py | 多语言分词器 |
| faster_whisper/transcribe.py | 转录核心算法(含批量推理入口) |
| faster_whisper/vad.py | 语音活动检测,内置 Silero VAD 模型(faster_whisper/assets/silero_vad_v6.onnx) |
| faster_whisper/utils.py | 工具函数 |
当前版本 1.2.1,要求 Python 3.9+。
用数据看提速:同一段 13 分钟音频
官方基准用 13 分钟音频对比各实现,测试环境分别是 CUDA 12.4 + RTX 3070 Ti 8GB(GPU)和 8 线程 i7-12700K(CPU),beam_size 统一为 5:
GPU 上跑 large-v2 模型
| 实现 | 精度 | 耗时 | 显存 |
|---|---|---|---|
| openai/whisper | fp16 | 2m23s | 4708MB |
| faster-whisper | fp16 | 1m03s | 4525MB |
| faster-whisper(batch_size=8) | fp16 | 17s | 6090MB |
| faster-whisper | int8 | 59s | 2926MB |
| faster-whisper(batch_size=8) | int8 | 16s | 4500MB |
CPU 上跑 small 模型
| 实现 | 精度 | 耗时 | 内存 |
|---|---|---|---|
| openai/whisper | fp32 | 6m58s | 2335MB |
| faster-whisper | fp32 | 2m37s | 2257MB |
| faster-whisper | int8 | 1m42s | 1477MB |
| faster-whisper(batch_size=8) | int8 | 51s | 3608MB |
规律很清楚:开 batch_size 换速度,开 int8 换内存,显存/内存够用就两个一起上,GPU 上 13 分钟音频 16 秒跑完。另外对蒸馏模型 distil-large-v3,faster-whisper 批量推理(batch_size=16,fp16)25m50s 完成,WER 13.527,比 transformers 实现(46m12s,WER 14.801)快了近一倍且误差更低。
三步上手:安装、加载、转录
pip install faster-whisperfrom faster_whisper import WhisperModel model = WhisperModel("large-v3", device="cuda", compute_type="float16") segments, info = model.transcribe("audio.mp3", beam_size=5) print(info.language, info.language_probability) for segment in segments: print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")设备与精度的组合关系:
| 场景 | device | compute_type |
|---|---|---|
| GPU(省显存) | cuda | int8_float16 |
| GPU(默认) | cuda | float16 |
| CPU(省内存) | cpu | int8 |
| CPU(默认) | cpu | float32 |
不指定language时会自动检测语言(基于开头 30 秒),返回info.language和置信度;task支持transcribe和translate(非英语音频转成英文)。
常用参数速查
调优基本只动这几个参数:
| 参数 | 作用 | 建议 |
|---|---|---|
beam_size | 解码搜索宽度 | 默认 5(注意:原版 whisper 默认是 1,对比性能时务必对齐) |
batch_size | 批量推理大小 | 显存够就调到 8~16,提速明显 |
word_timestamps | 输出词级时间戳 | 做字幕必开 |
vad_filter | 过滤无人声片段 | 默认 True,长音频建议保留 |
vad_parameters | 调节 VAD 灵敏度 | 如dict(min_silence_duration_ms=500),默认只删 2 秒以上的静音 |
hotwords | 提示词/专有名词 | 识别专业术语、人名时加 |
language | 强制指定语言 | 已知语言时指定,省掉检测开销 |
词级时间戳 + VAD 的典型用法(做字幕时直接抄):
segments, _ = model.transcribe( "audio.mp3", word_timestamps=True, vad_filter=True, vad_parameters=dict(min_silence_duration_ms=500), ) for seg in segments: print([(round(w.start, 2), round(w.end, 2), w.word) for w in seg.words])进阶:批量推理与自定义模型
批量推理:BatchedInferencePipeline是WhisperModel.transcribe的即插即用替代版,默认自带 VAD 过滤:
from faster_whisper import WhisperModel, BatchedInferencePipeline model = WhisperModel("turbo", device="cuda", compute_type="float16") batched = BatchedInferencePipeline(model=model) segments, info = batched.transcribe("audio.mp3", batch_size=16)加载自己微调的模型:装好transformers[torch]>=4.23后,用ct2-transformers-converter把任何兼容 Transformers 的 Whisper 模型(原始官方模型或用户微调模型)转成 CTranslate2 格式,可用--quantization float16或int8_float16指定精度,再用WhisperModel("本地目录")直接加载。
Docker 部署:仓库 docker/ 目录有一个最小示例(Dockerfile 基于nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04镜像,内含 cuBLAS 和 cuDNN 9),适合 GPU 环境不想手动装库的人。
避坑指南
segments是生成器:transcribe返回时并没有真正开始转录,必须遍历(for 循环或list())才会实际运行。这是新手最容易踩的坑。- GPU 环境要求:需要 NVIDIA cuBLAS + cuDNN 9(CUDA 12)。CUDA 11 用户需降级
ctranslate2==3.24.0;CUDA 12 + cuDNN 8 则用4.4.0。 - VAD 依赖
onnxruntime:启用vad_filter前确认已安装。 - 做对比测试要对齐条件:beam_size(5 vs 1)、CPU 线程数(设置
OMP_NUM_THREADS)、以及转录 WER 相近,否则速度数字没有可比性。 - 系统不用装 FFmpeg:解码走 PyAV 自带的 FFmpeg 库,少一项环境依赖。
适合谁,下一步做什么
如果你在做字幕生产线、会议/播客语音转文字、或需要批量处理大量音频,faster-whisper 是目前把"速度、准确率、内存"三者平衡得最好的开源方案。下一步建议:先按上文的三步把最小流程跑通,再阅读 faster_whisper/transcribe.py 里transcribe的完整参数文档,批量部署参考 docker/ 的示例。想拉源码看实现的话,可克隆:git clone https://gitcode.com/GitHub_Trending/fa/faster-whisper🎬
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考