17秒转写13分钟音频:faster-whisper语音识别加速实现
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
faster-whisper 是基于 CTranslate2 推理引擎的语音识别实现,用于把 OpenAI Whisper 模型转写的音频转成文字。它在保持同等准确率的前提下最高可提速 4 倍,并降低内存占用,适合需要在产品里集成离线语音转文字的开发者和要批量处理会议、播客录音的使用者。
理解项目:CTranslate2 重写版 Whisper 在做什么
faster-whisper 用 CTranslate2 引擎重写了 Whisper 的推理流程,模型权重与原版一致,准确率不受影响。它和 openai/whisper、whisper.cpp 的差异可以从几组数据看出来:
- GPU 上用 large-v2 模型转写 13 分钟音频,fp16 下耗时 1 分 03 秒,openai/whisper 同精度为 2 分 23 秒;
- 切到 int8 量化后耗时降到 59 秒,显存占用 2926MB,低于 openai/whisper 的 4708MB;
- CPU 上 small 模型 int8 量化耗时 1 分 42 秒,openai/whisper fp32 为 6 分 58 秒。
另外两点工程上的省事:系统无需安装 FFmpeg,音频解码由 pip 包自带的 PyAV 完成;内置 Silero VAD,可以在转写前过滤掉纯静音片段,减少无意义的计算。
环境检查:Python 版本与 CUDA 依赖清单
安装前逐项确认:
- Python 3.9 及以上(当前发布版本为 1.2.1)
- 无需系统级 FFmpeg
- 核心依赖由 pip 自动解析:ctranslate2(4.x)、onnxruntime、av、tokenizers
- GPU 运行(可选):NVIDIA 显卡 + CUDA 12 + cuBLAS + cuDNN 9
- 如果你还在用 CUDA 11 或 cuDNN 8:需将 ctranslate2 降到
ctranslate2==4.4.0(更老环境用 3.24.0)
没有 GPU 也能跑通,CPU 配 int8 量化即可覆盖多数离线场景。
安装 faster-whisper 并验证版本
安装只需一条命令:pip install faster-whisper,依赖会自动处理。装完后执行python -c "import faster_whisper; print(faster_whisper.__version__)",终端打印出版本号(如 1.2.1)即代表安装成功。
首次运行:用 small 模型拿到带时间戳的分段结果
下面这段代码在 CPU 上用 int8 量化加载 small 模型,转写仓库测试目录里的 JFK 音频,并逐段打印起止时间和文本:
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}")首次运行会先下载一次模型权重,之后你会看到形如[0.00s -> 2.44s] And so my fellow Americans...的带时间戳输出。
调优选项:常用参数取值与适用场景
| 选项 | 常用取值 | 适用场景 |
|---|---|---|
| device | cpu / cuda | 有 GPU 选 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 调整 |
| word_timestamps | True | 需要词级时间戳(字幕对齐、热词定位) |
| language | en / zh 等 | 已知语种时跳过自动检测,速度更稳 |
完整参数说明可以直接看 faster_whisper/transcribe.py 中 transcribe 方法的签名和注释。
典型场景:批量转写与静音过滤
如果你需要批量处理大量长录音并吃满 GPU,可以换用批处理推理管线,它是对常规 transcribe 的即插即用替换:
from faster_whisper import WhisperModel, BatchedInferencePipeline model = WhisperModel("turbo", device="cuda", compute_type="float16") pipeline = BatchedInferencePipeline(model) segments, info = pipeline.transcribe("audio.mp3", batch_size=16)同样在 GPU 上跑 large-v2,batch_size=8 时转写 13 分钟音频的耗时从 1 分 03 秒降到 17 秒。
如果你需要自动跳过会议录音里的长段沉默,给 transcribe 传vad_filter=True即可,默认只移除超过 2 秒的静音,也可以用vad_parameters=dict(min_silence_duration_ms=500)这类方式调整判定阈值。如果你要做字幕级的词级对齐,传word_timestamps=True,然后从每个 segment 的 words 字段读取每个词的起止时间。
排障:GPU、内存与无输出的常见报错
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 加载 GPU 时报 CUDA 相关错误 | 缺 cuBLAS/cuDNN,或 CUDA 11 环境配了新版 ctranslate2 | 按 CUDA 12 安装 cuBLAS 和 cuDNN 9,或降级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 跑一遍,对比耗时、内存和识别差异,再决定线上用哪套配置。想看更多参数组合可以读 faster_whisper/transcribe.py,想复现前文数据可以运行 benchmark/ 目录下的基准脚本。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考