faster-whisper 语音转文字指南:比原版 Whisper 快 4 倍,从零跑通只要 3 步
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
faster-whisper 是一个用 CTranslate2 推理引擎重写的 Whisper 语音转文字(speech to text)库,把音频文件转成带时间戳的文本,也支持把外语语音翻译成英文。适合手里有一堆会议录音、课程音频、播客,想批量出字幕但嫌 openai/whisper 跑得太慢的开发者。全文按"先装环境、再解决 GPU 报错、最后出结果"的顺序写,每一步都给了可直接粘贴的命令。
🧭 为什么换成 faster-whisper
先说结论:同样的模型、同样的精度,它的速度最高能到 openai/whisper 的 4 倍,显存占用还更低,开启 int8 量化后优势更大。这不是口头宣传,仓库 README 里有一组实测数据——用 13 分钟音频跑 large-v2 模型,RTX 3070 Ti + CUDA 12.4:
| 实现 | 精度 | 耗时 | 显存 |
|---|---|---|---|
| openai/whisper | fp16 | 2m23s | 4708MB |
| faster-whisper | fp16 | 1m03s | 4525MB |
| faster-whisper(batch_size=8) | fp16 | 17s | 6090MB |
| faster-whisper | int8 | 59s | 2926MB |
CPU 上跑 small 模型也有对比:int8 + batch_size=8 时 51s 出结果,而原版 fp32 要 6m58s。两个工程细节值得记住:
- 不用装 FFmpeg。原版 whisper 强依赖系统里的 FFmpeg,装不满是新手最常见的坑之一;faster-whisper 改用 PyAV 解码音频,FFmpeg 库直接打包在依赖里,pip 装完就能用。
- GPU 支持有版本约束(后面单独讲)。ctranslate2 最新版只认 CUDA 12 + cuDNN 9,老环境需要钉版本。
- 模型按名字加载时(比如
"large-v3"),对应的 CTranslate2 权重会自动从 Hugging Face Hub 下载;自己微调过的模型可以用官方转换器转成 CTranslate2 格式再加载。
📦 faster-whisper 怎么装
环境要求 Python 3.9 及以上。装稳定版:
pip install faster-whisper如果要用 master 分支,可以先 clone 再本地安装:
git clone https://gitcode.com/GitHub_Trending/fa/faster-whisper cd faster-whisper pip install -e .开发环境额外装 dev 依赖(black、flake8、isort、pytest 等版本已锁好):
pip install -e ".[dev]"🎮 GPU 跑不起来?大概率是 CUDA / cuDNN 版本没对上
这是社区里被问得最多的问题。GPU 推理依赖两个 NVIDIA 库:CUDA 12 的 cuBLAS 和 CUDA 12 的 cuDNN 9。Linux 上可以直接用 pip 装,但注意要先设置好LD_LIBRARY_PATH再启动 Python:
pip install nvidia-cublas-cu12 nvidia-cudnn-cu12==9.* export LD_LIBRARY_PATH=`python3 -c 'import os; import nvidia.cublas.lib; import nvidia.cudnn.lib; print(os.path.dirname(nvidia.cublas.lib.__file__) + ":" + os.path.dirname(nvidia.cudnn.lib.__file__))'`其他安装路子(官方推荐 NVIDIA 文档的方式之外):
- Docker:镜像
nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04里已经带好了这两个库。 - Windows / Linux 通用:社区维护的 whisper-standalone-win 项目把所需 NVIDIA 库打成了一个压缩包,解压后把目录加进
PATH即可。
报错排查对照表,按你的实际环境对号入座:
| 你的环境 | 解法 |
|---|---|
| CUDA 12 + cuDNN 9 | 直接装最新版 ctranslate2,无需处理 |
| CUDA 12 + cuDNN 8 | 降级:pip install --force-reinstall ctranslate2==4.4.0 |
| CUDA 11 + cuDNN 8 | 降级:pip install --force-reinstall ctranslate2==3.24.0,且 cuBLAS/cuDNN 也要装对应 CUDA 11 的版本 |
另外两个容易忽略的点:
- Windows 下 pip 装 NVIDIA 库这条路不通,走 Docker 或压缩包方案。
- 用
compute_type="float16"时确认 GPU 支持 FP16,否则换成int8_float16。
⚡ 3 步出结果:最小可运行示例
第一步,实例化模型。compute_type控制精度:CPU 常用int8,GPU 用float16或int8_float16:
from faster_whisper import WhisperModel # CPU + int8 model = WhisperModel("large-v3", device="cpu", compute_type="int8") # GPU + fp16(显存充裕时用) # model = WhisperModel("large-v3", device="cuda", compute_type="float16")第二步,调用转录。transcribe返回的是(segments, info)二元组,info里带自动检测的语言和置信度:
segments, info = model.transcribe("audio.mp3", beam_size=5) print("Detected language '%s' with probability %f" % (info.language, info.language_probability))第三步,遍历输出。注意一个反直觉的坑:segments是生成器,不遍历就等于没开始转录,所以 for 循环才是真正干活的地方:
for segment in segments: print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))音频比较长、想要吞吐就上批量推理。BatchedInferencePipeline.transcribe是WhisperModel.transcribe的直接替代品,签名兼容,加个batch_size参数就行:
from faster_whisper import WhisperModel, BatchedInferencePipeline model = WhisperModel("turbo", device="cuda", compute_type="float16") batched_model = BatchedInferencePipeline(model=model) segments, info = batched_model.transcribe("audio.mp3", batch_size=16)批量模式下 VAD 是默认开启的(见下节)。更多可调参数直接看 WhisperModel 的实现。
🛠️ 四个高频参数:VAD、词级时间戳、线程数、批量
VAD 过滤:内置 Silero VAD 会把没有语音的段落直接跳过,省时间还减少"幻听"文本。默认策略偏保守,只剔除超过 2 秒的静音:
segments, _ = model.transcribe("audio.mp3", vad_filter=True) # 自定义:静音超过 0.5 秒就算停顿 segments, _ = model.transcribe( "audio.mp3", vad_filter=True, vad_parameters=dict(min_silence_duration_ms=500), )各参数的默认值在 VAD 模块源码 里都能查到。
词级时间戳:做卡拉 OK 字幕或逐词高亮时,把word_timestamps=True打开,每个 segment 下就有words列表:
segments, _ = model.transcribe("audio.mp3", word_timestamps=True) for segment in segments: for word in segment.words: print("[%.2fs -> %.2fs] %s" % (word.start, word.end, word.word))CPU 线程数:很多框架会读OMP_NUM_THREADS环境变量,跑脚本前设一下,对比性能时也要保证两边线程数一致:
OMP_NUM_THREADS=4 python3 my_script.py和别的实现比性能前,先确认两边 beam size 相同——openai/whisper 的transcribe默认 beam_size=1,而这里默认是 5,不拉齐就没可比性;同时 WER 差异也会影响转录长度,从而影响耗时。
📌 收尾:许可证与版本
faster-whisper 采用 MIT 许可(见 LICENSE),商用没问题。当前仓库版本为 1.2.1,贡献流程写在 CONTRIBUTING.md 里。音频解码链路在 audio 模块,特征提取在 feature_extractor,需要追进底层时可以从这几个文件入手。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考