17秒转写13分钟音频:faster-whisper 快速上手指南
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
faster-whisper 是基于 CTranslate2 推理引擎重写的 Whisper 语音识别实现,同等准确率下最高比原版快 4 倍且更省内存。如果你要在产品里集成离线语音转文字,或批量处理会议、播客录音,看这篇即可跑起来并调好参数。
速度与内存一张表:faster-whisper 对比 openai/whisper
官方基准(13 分钟英文音频,beam_size=5)给出的数据如下。GPU 数据为 large-v2 模型(NVIDIA RTX 3070 Ti,CUDA 12.4);"部署成本"指是否依赖系统级 FFmpeg:
| 实现 | 速度(转写 13 分钟音频) | 显存/内存 | 部署成本 |
|---|---|---|---|
| openai/whisper(fp16) | 2m23s | 4708MB | 需系统安装 FFmpeg |
| whisper.cpp(fp16,Flash Attention) | 1m05s | 4127MB | 需自行部署二进制 |
| faster-whisper(fp16) | 1m03s | 4525MB | 无需 FFmpeg(PyAV 自带解码) |
| faster-whisper(int8) | 59s | 2926MB | 无需 FFmpeg |
| faster-whisper(fp16,batch_size=8) | 17s | 6090MB | 无需 FFmpeg |
CPU 侧差距同样明显:small 模型上,openai/whisper(fp32)要 6m58s,faster-whisper int8 只要 1m42s 且内存 1477MB;加 batch_size=8 可进一步压到 51s。完整测试脚本在仓库 benchmark/ 目录。
三步装好并验证:pip install 到第一条转写结果
前置条件确认:
- Python 3.9 及以上(当前发布版本 1.2.1)
- 无需安装 FFmpeg,音频解码由依赖库 PyAV 完成
- 核心依赖 pip 自动装好:ctranslate2(4.x)、onnxruntime、av、tokenizers
- 仅 GPU 需要:NVIDIA 显卡 + CUDA 12 + cuBLAS + cuDNN 9;若停留在 CUDA 11 / cuDNN 8,需降级
ctranslate2==4.4.0
第一步,一条命令安装(依赖自动解析):
pip install faster-whisper第二步,验证版本:
python -c "import faster_whisper; print(faster_whisper.__version__)"终端打印出1.2.1即安装成功。
第三步,最小可运行代码,CPU + int8 量化转写仓库自带的测试音频:
from faster_whisper import WhisperModel model = WhisperModel("small", device="cpu", compute_type="int8") segments, info = model.transcribe("tests/data/jfk.flac", beam_size=5) for segment in segments: print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")首次运行会先从 Hugging Face 下载一次 small 模型权重,之后你会看到逐行带起止时间的输出,形如[0.00s -> 2.44s] And so my fellow Americans...。
参数速查:转写时最常改的 7 个开关
完整签名和注释见 faster_whisper/transcribe.py 中的transcribe方法,常用参数如下:
| 参数 | 常用取值 | 何时使用 |
|---|---|---|
| device | cpu / cuda | 有 NVIDIA 显卡选 cuda,否则 cpu |
| compute_type | float16 / int8_float16 / int8 | GPU 首选 float16;显存紧张用 int8_float16;CPU 用 int8 |
| beam_size | 1–5,默认 5 | 值越小解码越快,越大结果越稳定 |
| batch_size | 8 / 16 | 长音频批量转写,需配合 BatchedInferencePipeline |
| vad_filter | True(默认开启) | 转写前过滤静音段,阈值经 vad_parameters 调整,默认只移除超过 2 秒的静音 |
| word_timestamps | True | 需要词级时间戳(字幕对齐、热词定位) |
| language | en / zh 等 | 已知语种时跳过自动检测,速度更稳 |
实战两个场景:批量推理与 VAD 静音过滤 ⚡
场景一:长录音批量转写,吃满 GPU。用BatchedInferencePipeline替代常规 transcribe,它是即插即用的 drop-in 替换:
from faster_whisper import WhisperModel, BatchedInferencePipeline model = WhisperModel("turbo", device="cuda", compute_type="float16") pipeline = BatchedInferencePipeline(model=model) segments, info = pipeline.transcribe("audio.mp3", batch_size=16)效果:README 基准显示同一 GPU 上 large-v2 模型转写 13 分钟音频,从 1m03s 降到 17s(fp16,batch_size=8;int8 下为 16s)。
场景二:会议录音里大量沉默,直接跳过。给 transcribe 传vad_filter=True(其实默认已开启),并用vad_parameters收紧判定阈值:
segments, _ = model.transcribe( "meeting.mp3", vad_filter=True, vad_parameters=dict(min_silence_duration_ms=500), )效果:超过 500ms 的静音都会被切掉,不再浪费算力在无语音片段上;若还要逐词定位,加word_timestamps=True后从每个 segment 的words字段读取。
避坑表:5 个常见报错的对应修法
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 加载 GPU 报 CUDA 相关错误 | 缺 cuBLAS/cuDNN,或 CUDA 11 环境配了新版 ctranslate2 | 按 CUDA 12 装 cuBLAS 和 cuDNN 9;旧环境降级pip install --force-reinstall ctranslate2==4.4.0 |
| GPU 显存不足(OOM) | 模型过大或 fp16 占用偏高 | compute_type 改用 int8_float16,或换更小模型 |
| 转写速度远低于预期 | CPU 上跑大模型,或 beam_size 偏高 | 换小模型 + int8,或换 GPU;长音频走 batched 推理 |
| 调用 transcribe 后一直没有输出 | segments 是生成器,遍历前不会真正开始转写 | 用 for 循环遍历,或list(segments)强制执行 |
| 首次运行特别慢 | 首次会从 Hugging Face 下载模型权重 | 等一次即可,之后走本地缓存;也可转换模型目录后直接加载 |
下一步:拿真实录音对比量化方案
faster-whisper 解决的是 Whisper 推理慢、占内存高的问题,int8 量化和批量推理在内存与吞吐上还有余量。建议下一步拿一段真实录音,分别用 float16 和 int8 各跑一遍,对比耗时、内存和识别差异,再决定线上配置;想复现本文基准数据,可直接运行 benchmark/ 目录下的速度脚本,想细看全部参数就翻 faster_whisper/transcribe.py。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考