faster-whisper:语音转写提速至多 4 倍
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
把几小时的音频一口气转写成文字时,原版 OpenAI Whisper 实现的速度常常是瓶颈。faster-whisper 是一个语音识别加速库,用 CTranslate2 重新实现了同样的 Whisper 模型,在准确率不变的前提下至多提速 4 倍,峰值内存还能下降约三分之一。适合需要批量部署语音转写的开发者。
它解决什么问题
faster-whisper 把 OpenAI 的 Whisper 模型搬到 CTranslate2 这个专为 Transformer 优化的推理引擎上。模型权重、识别结果和接口风格都与原版保持一致,区别只在推理层:支持 fp16、int8 和混合精度计算。因此从 openai/whisper 迁移过来基本是替换式的,不需要重写业务逻辑。它的价值集中在两点:同样的转写任务耗时更短,峰值内存占用更低,让大模型能在资源有限的机器上跑起来。
适合谁:正在用原版 whisper 包、或准备把转写服务投入生产的团队。
实测快多少:13 分钟音频基准
下表来自项目 README 的基准测试:GPU 环境为 NVIDIA RTX 3070 Ti 8GB(CUDA 12.4),CPU 环境为 Intel Core i7-12700K(8 线程),对比对象包括 openai/whisper、whisper.cpp 和 transformers 等实现。
large-v2 模型,GPU(beam_size=5)
| 实现 | 精度 | 耗时 | 显存 |
|---|---|---|---|
| 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 |
small 模型,CPU(beam_size=5)
| 实现 | 精度 | 耗时 | 内存 |
|---|---|---|---|
| openai/whisper | fp32 | 6m58s | 2335MB |
| faster-whisper | fp32 | 2m37s | 2257MB |
| faster-whisper | int8 | 1m42s | 1477MB |
| faster-whisper,batch_size=8 | int8 | 51s | 3608MB |
读法:不开批次的 int8 配置下,large-v2 显存从 4708MB 降到 2926MB,降幅约四成,耗时与 fp16 基本持平;CPU 上 small 模型 int8 约为原版 fp32 的 4 倍速(1m42s 对 6m58s)。批量推理还能再快一个数量级,代价是内存占用上升。数字基于单条样例和特定硬件,实际比例会随音频内容与机器浮动。
什么时候用:给批量任务做容量规划前,先拿这张表乘以你的音频总量来估算资源。
安装与首次转录
要求 Python 3.9 及以上。系统不需要预装 FFmpeg,包内的 PyAV 已经捆绑了音频解码库,这是它比原版省的一步部署工作。
pip install faster-whisper下面的例子在 GPU 上转录一个 mp3 文件,打印语言检测结果和带时间戳的片段:
from faster_whisper import WhisperModel model = WhisperModel("large-v3", device="cuda", compute_type="float16") segments, info = model.transcribe("audio.mp3", beam_size=5) print(f"Detected language: {info.language} ({info.language_probability:.2f})") for segment in segments: print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")注意segments是生成器,迭代它之前转写实际没有开始;想一次拿到全部结果,先list(segments)。按模型名加载时,对应的 CTranslate2 权重会自动从 Hugging Face 下载,首次运行无需手动准备模型文件。
适合谁:有一块可用 GPU 的话,十行代码就能跑通完整流程。
核心能力
词级时间戳
transcribe传入word_timestamps=True,每个片段会返回逐词的开始、结束时间和概率。字幕对齐、关键词定位直接基于这份数据。
VAD 静音过滤
库内置 Silero VAD 模型,vad_filter=True可跳过纯静音区间再做识别。默认策略保守,只过滤超过 2 秒的静音;长录音里空白多的时候提速明显,批量推理模式下默认开启。
批量推理
BatchedInferencePipeline是WhisperModel.transcribe的直接替代品,把多个片段合并成一批送进模型。基准里 GPU 上 large-v2 因此从 59 秒降到 16 秒(int8),显存则从 2926MB 升到 4500MB。
语言检测与多语言支持
不指定语言时模型自动检测并给出置信度,支持的语言集合与 Whisper 多语言模型一致,可用model.supported_languages()查询。纯英文音频改用.en系列模型还能更快。
微调模型转换
官方提供ct2-transformers-converter命令,把 OpenAI 原版或自己微调过的模型转成 CTranslate2 格式,之后从本地目录直接加载。
五项能力里,时间戳和 VAD 是日常最常用到的两项;批量推理只在大批量处理时才需要动。
不同硬件怎么选模型和参数
- 显存充足的 GPU:
device="cuda", compute_type="float16",精度损失最小。 - 显存紧张的 GPU:换
compute_type="int8_float16",速度基本保住,显存降约三分之一。 - 纯 CPU:用
compute_type="int8",长音频建议换 small 或 base;CPU 线程数可用环境变量OMP_NUM_THREADS控制,做对比测试时先固定它。 - 批量高吞吐:套上
BatchedInferencePipeline并调大batch_size,内存随批次线性增长,动手前先确认余量。 - 模型选择:多语言场景选
large-v3;只要英文,large-v3-turbo或.en系列更快;精度和速度折中可看distil-large-v3;资源很紧张就用small、base。 - 对比测试注意:本库默认
beam_size为 5,原版 whisper 默认 1,先对齐参数再比速度,否则结果不可信。
这几组搭配覆盖绝大多数部署场景;拿不准时从 GPU float16、CPU int8 两个默认起点开始。
适合用与不适合用
- 适合:离线批量转写、字幕生成、会议录音归档、多语言音频处理。
- 不适合:实时流式转写。库的定位是离线模型,实时场景要配合 Whisper-Streaming、WhisperLive 这类社区项目。
- GPU 依赖不为零:需要安装 cuBLAS 与 cuDNN 9(CUDA 12);老 CUDA 11 环境得降级到
ctranslate2==3.24.0。 - 准确率不高于原版:它的价值在速度和内存,识别效果与同型号原版 Whisper 一致,解决不了 Whisper 自身在长静音处的重复幻觉问题。
- 说话人分离等能力需要额外组件,社区有 whisper-diarize 等现成方案。
一句话:离线批量加资源受限,放心用;实时交互场景,先去看流式实现。
结语
如果你手上正好有转写任务要优化,先把现有脚本的compute_type改成 int8 就能看到差距。完整的参数说明、VAD 默认值和基准脚本都在仓库里:README.md 与 benchmark/。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考