Faster-Whisper:4 倍速转录实战 + 参数速查
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
昨晚把 4 小时会议录音丢给 openai/whisper 转文字,等了 22 分钟才出结果。换成 faster-whisper 语音转录,同样的音频在 GPU 上大约 5 分钟跑完,精度不变。这就是 faster-whisper:同一套 Whisper 模型,最高 4 倍速。
它到底是什么
faster-whisper 是用 CTranslate2(一个专门加速 Transformer 推理的 C++ 引擎)重新实现的 OpenAI Whisper,接口思路和原版一致,但推理部分完全换掉,只负责转录,不负责训练。
- 同精度下最高比 openai/whisper 快 4 倍:large-v2 模型转 13 分钟音频,原版 2 分 23 秒,它 1 分 03 秒
- INT8 量化(8 位整数压缩权重)后显存从 4708MB 降到 2926MB,CPU 内存从 2335MB 降到 1477MB
3 分钟跑通最小示例
下面这段在 CPU 上用 small 模型 + INT8 量化转录一个本地音频文件:
from faster_whisper import WhisperModel model = WhisperModel("small", device="cpu", compute_type="int8") segments, info = model.transcribe("audio.mp3") for segment in segments: print(f"[{segment.start:.1f}s -> {segment.end:.1f}s] {segment.text}")跑完你会看到逐段的转录文本和时间戳,比如[0.00s -> 4.53s] I don't really care to be old...]。
核心参数怎么选
| 参数 | 推荐值 | 一句话解释 |
|---|---|---|
device | "auto" | 自动探测 GPU,没有就回落到 CPU |
compute_type | GPU 用int8_float16,CPU 用int8 | 精度换内存和速度,INT8 慢不了多少但省一半显存 |
beam_size | 5(默认) | 就是"同时走 5 条解码路、挑最顺的那条",降到 1 更快但精度略降 |
vad_filter | True(默认开) | 先用 Silero VAD 剪掉静音段,只转有人声的部分 |
cpu_threads | 物理核心数,如8 | CPU 跑时的线程数,不设置默认 4,核多不用白不用 |
轻量 CPU(8GB 内存笔记本,追求快糙猛):
model = WhisperModel("base", device="cpu", compute_type="int8", cpu_threads=8) segments, _ = model.transcribe("audio.mp3", beam_size=1, vad_filter=True)有 GPU(8GB 显存起步,精度和速度兼顾):
model = WhisperModel("large-v3", device="cuda", compute_type="int8_float16") segments, _ = model.transcribe("audio.mp3", beam_size=5, batch_size=8)大规模生产(批量文件跑批,用内置的批处理流水线):
from faster_whisper import WhisperModel, BatchedInferencePipeline model = WhisperModel("large-v3", device="cuda", compute_type="int8_float16") batched = BatchedInferencePipeline(model=model) segments, _ = batched.transcribe("audio.mp3", batch_size=16)三种配置的取舍逻辑:模型越大越准(tiny 到 large-v3),量化级别越高越省内存,batch 越大吞吐越高但越吃显存。GPU 跑 large-v3 配batch_size=8时,13 分钟音频只需 16 秒(官方基准,RTX 3070 Ti)。
进阶功能按需取用
词级时间戳:给字幕和逐字稿用
类比:段落时间戳知道"这段话在 30 秒",词级时间戳知道"每个词落在 30.2 秒",精度靠交叉注意力模式 + 动态时间规整算出来。
segments, _ = model.transcribe("audio.mp3", word_timestamps=True) for seg in segments: for word in seg.words: print(f"{word.start:.2f}s {word.word}")VAD 过滤:静音段不浪费算力
类比:VAD 像个场记,先标出"这里有人说话",模型只处理标记内的片段,长音频提速明显。默认只剪超过 2 秒的静音,可以用vad_parameters调激进度。
segments, _ = model.transcribe( "audio.mp3", vad_filter=True, vad_parameters=dict(min_silence_duration_ms=500), )语言检测(前 30 秒自动判定)、翻译任务(task="translate")、模型转换(ct2-transformers-converter转 HF 权重)等其余能力见官方文档 README.md。
踩坑记录
现象:
model.transcribe()调用后没有任何输出,程序卡住。原因:segments是生成器(generator),不调用它就不开始转录。解法:遍历它,或segments = list(segments)强制跑完。现象:GPU 加载模型报 cuBLAS/cuDNN 找不到的错误。原因:新版 ctranslate2 只支持 CUDA 12 + cuDNN 9,环境里是旧版。解法:装 CUDA 12 的 cuBLAS/cuDNN 9;或锁定
ctranslate2==3.24.0兼容 CUDA 11。现象:转录文本陷入死循环,同一句话反复输出。原因:
condition_on_previous_text默认开启,上一窗输出作为下一窗提示,失败后滚雪球。解法:加参数condition_on_previous_text=False。现象:CPU 上比预期慢,怀疑量化没生效。原因:线程数没配对,
cpu_threads不传时默认只开 4 个。解法:传cpu_threads等于物理核心数,或设置OMP_NUM_THREADS。现象:语言识别错了,英文音频被当西班牙语转。原因:自动检测只看前 30 秒,开头是音乐/静音时容易翻车。解法:明确传
language="en"跳过检测。
适合谁、不适合谁
| 适合 | 不适合 |
|---|---|
| 日处理几百上千段音频的离线批处理,显存有限还要跑 large-v3 | 需要逐字实时上屏、端到端延迟低于 200ms 的直播字幕 |
| 8GB 显存 GPU 或 16GB 内存 CPU 机器,想用 INT8 塞下大模型 | 要训练/微调模型本身(它只做推理,转换权重可以,训练不行) |
| 需要词级时间戳生成字幕,或长音频靠 VAD 剪静音省时间 | 深度依赖 PyTorch 生态、要和训练代码混在一个工程里的场景 |
一句话总结
faster-whisper 把 Whisper 的推理搬进 CTranslate2 引擎:精度不变,最高 4 倍速,显存省一半,选对compute_type和beam_size就能直接上生产。完整参数说明见仓库 README.md。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考