15 分钟上手 faster-whisper:4 倍速语音转文字完整指南
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
如果你要把会议录音、课程音频批量转成带时间戳的文字,faster-whisper 值得看一眼:它用 CTranslate2 引擎重写了 OpenAI Whisper,在相同准确率下速度最高快 4 倍,还支持 99 种语言自动识别。
它凭什么值得你花几分钟
- 速度快,且快得有数据:官方基准里,GPU 上 13 分钟音频用 large-v2 模型,faster-whisper 跑 1 分 03 秒,openai/whisper 要 2 分 23 秒;再开
batch_size=8批处理只要 17 秒。CPU 上 int8 量化后,small 模型 13 分钟音频 51 秒跑完。 - 省内存:同样 GPU 场景,int8 量化把显存占用从 4525MB 压到 2926MB,小显存卡也能跑大模型。
- 免装 FFmpeg:和 openai/whisper 不同,它用 PyAV 解码音频,FFmpeg 的库直接打包在 pip 依赖里,装好就能读 mp3、m4a、wav 等各种格式。
装好它:一条命令跑通
环境要求:
- Python 3.9 或更高
- 纯 CPU 即可运行;有 NVIDIA GPU 则需 CUDA 12 + cuBLAS + cuDNN 9
- 不需要单独安装 FFmpeg
安装只需一条命令:
# 一条命令安装 faster-whisper,会自动带上 CTranslate2、PyAV 等依赖 pip install faster-whisper首次按模型名(如"large-v3")加载时会自动从 Hugging Face 下载对应的 CTranslate2 模型,之后就有本地缓存了。
挑对参数:使用场景 → 推荐配置
| 使用场景 | 模型 (model_size) | 设备 (device) | 精度 (compute_type) | 其他建议 |
|---|---|---|---|---|
| 快速出稿、实时性优先 | tiny / small | cpu | int8 | 准确率换速度,适合草稿 |
| 日常通用转录 | small / medium | cuda | float16 | 平衡之选 |
| 最高精度、长音频 | large-v3 | cuda | float16 | 显存吃紧时换 int8_float16 |
| 小显存 GPU(≤8GB) | large-v3 | cuda | int8_float16 | 显存约为 fp16 的 2/3 |
| 追求更快的高精度 | turbo(即 large-v3-turbo) | cuda | float16 | 专为该库优化,见下文批处理 |
| 批量处理多个长音频 | turbo | cuda | float16 | 用 BatchedInferencePipeline + batch_size |
另外两个高频开关,比换模型见效更快:
vad_filter=True:启用内置的 Silero VAD,自动裁掉超过 2 秒的静音段,长音频转录明显提速,还能减少静默处的幻觉文字。word_timestamps=True:输出词级时间戳,做字幕、高亮定位时要用。
最常用的调用方式长这样:
from faster_whisper import WhisperModel # 在 GPU 上用 FP16 加载 large-v3 模型 model = WhisperModel("large-v3", device="cuda", compute_type="float16") # 转录音频,开启 VAD 静音过滤,返回带时间戳的分段结果 segments, info = model.transcribe("meeting.mp3", beam_size=5, vad_filter=True) print(f"检测到的语言:{info.language}(概率 {info.language_probability:.2f})") for seg in segments: # 注意:segments 是生成器,必须遍历才会真正开始转录 print(f"[{seg.start:.2f}s -> {seg.end:.2f}s] {seg.text}")注意segments是生成器,不调用for或list()它不会开始干活,这是新手最容易卡住的一点。
把它用进你的工作流
周一上午,一场 1 小时的产品评审会。会后录音直接丢给脚本,用 small 模型加vad_filter=True,几分钟后拿到带时间戳的逐段文字,语言自动检测成中文,把时间戳去掉标点整理一下就是会议纪要的底稿。
周三下午,处理一整个学期的课程录音。十几门课、每门几小时,单条跑太慢。用BatchedInferencePipeline包一层WhisperModel,设batch_size=16,GPU 上吞吐量能拉开一个量级,跑完把结果写成 SRT 或 LRC 字幕文件,直接挂到视频上。
周五晚上,给播客加双语字幕。开启word_timestamps=True,拿到每个词的起止时间,按词做卡拉 OK 式逐词高亮字幕;遇到专业术语识别不准,就在initial_prompt里塞一段含这些词的文本来引导。
踩坑先读我
| 现象 | 原因 | 解法 |
|---|---|---|
| GPU 上加载报 cuBLAS/cuDNN 相关错误 | 最新版 ctranslate2 只支持 CUDA 12 + cuDNN 9 | 老环境降级:CUDA 11 装ctranslate2==3.24.0,CUDA 12 + cuDNN 8 装ctranslate2==4.4.0 |
| 显存不足 / OOM | FP16 大模型显存占用高 | 换int8_float16或 CPU 的int8,或换 small/medium 模型 |
| 转录速度上不去(CPU 或低配卡) | 单条逐段推理利用率低 | 长音频用BatchedInferencePipeline+batch_size;CPU 上可设OMP_NUM_THREADS控制线程数 |
| 静默段出现重复、无意义的幻觉文字 | 模型在没声音处"硬编"内容 | 开启vad_filter=True,必要时调vad_parameters里的min_silence_duration_ms |
| 调用 transcribe 后像没反应 | 返回的 segments 是生成器 | 遍历或list(segments)才会真正执行转录 |
| 想对比速度但结果不一致 | 各家默认 beam_size 不同(这里默认是 5) | 对比时固定 beam_size、线程数、WER 相近的配置再比时间 |
再往前一步
参数不够用时,直接看WhisperModel.transcribe的完整签名,hotwords、temperature、condition_on_previous_text等选项都在里面,faster_whisper/transcribe.py 是最全的参考。调静音过滤行为可以看 faster_whisper/vad.py;想确认支持哪些语言代码,faster_whisper/tokenizer.py 里的语言表是最准的。此外仓库还自带 benchmark/ 下的 WER 与速度基准脚本,以及把自有 Whisper 权重(包括微调过的)转成 CTranslate2 格式的转换入口,做领域定制模型时会用到。
收尾
现在就装好它,拿一段手头最烦的录音试跑一次,比读十篇评测都有数。源码入口在 faster_whisper/,测试用例参考 tests/,更多细节以官方文档为准。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考