Faster-Whisper:把 13 分钟音频转写成文字的离线语音转录方案
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
要把 10 小时的会议录音转成文字,原版 Whisper 得跑好几个小时,显存占用还经常让台式机风扇狂转。faster-whisper 用 CTranslate2 重写了 OpenAI Whisper 的推理管线:作为离线语音转录工具,它在准确率不变的前提下最快达到 4 倍加速,内存占用更少。
为什么比原版 Whisper 快
核心差异在于推理引擎的替换。openai/whisper 直接用 PyTorch 跑模型,faster-whisper 则把 Whisper 模型转成 CTranslate2 格式,交给这个专为 Transformer 设计的推理引擎执行(首次使用可以从 Hugging Face Hub 自动转换并缓存)。引擎带来两个关键能力:批量推理和量化。GPU 上可以选 fp16 或 int8_float16 精度,CPU 上跑 int8,量化能显著压掉显存和内存带宽的压力。还有一个容易忽略的细节:你不需要在系统里装 FFmpeg,音频解码由随包提供的 PyAV 库完成,它自带 FFmpeg 运行时。
实测数据:13 分钟音频
以下数字来自项目官方对一段 13 分钟音频的测试。
- GPU(NVIDIA RTX 3070 Ti,CUDA 12.4,large-v2 模型,beam_size=5):原版 openai/whisper fp16 耗时 2 分 23 秒、显存 4708MB;faster-whisper fp16 为 1 分 03 秒、4525MB;int8 精度 59 秒、2926MB;加上 batch_size=8 后,int8 只需 16 秒。
- CPU(Intel Core i7-12700K,8 线程,small 模型):原版 fp32 耗时 6 分 58 秒、内存 2335MB;faster-whisper int8 为 1 分 42 秒、1477MB;batch 8 的 int8 配置 51 秒完成。
- 准确率没有牺牲:YT Commons 测试集上,distil-large-v3 模型在 faster-whisper 下的 WER 为 13.53,transformers 实现为 14.80,反而略优。
🚀 从零跑通:三分钟拿到第一条转录
纯 CPU 场景,一条命令搞定:
pip install faster-whisperGPU 场景需要系统装有 NVIDIA 的 cuBLAS 和 cuDNN 9(对应 CUDA 12),Linux 上可以直接用 pip 安装:
pip install nvidia-cublas-cu12 "nvidia-cudnn-cu12==9.*"安装后记得在启动 Python 前设置好 LD_LIBRARY_PATH。然后是能跑通的最少代码:
from faster_whisper import WhisperModel model = WhisperModel("large-v3", device="cuda", compute_type="float16") segments, info = model.transcribe("audio.mp3", beam_size=5) for seg in segments: print(f"[{seg.start:.2f}s -> {seg.end:.2f}s] {seg.text}")模型尺寸一句话选型:日常转写 small 就够,追求精度上限再上 large-v3 或 turbo,纯英文且在意速度可以试试 distil-large-v3。
⚙️ 三个真正好用的进阶开关
词级时间戳
需要把字幕逐词对齐、做关键词高亮时打开。
segments, _ = model.transcribe("audio.mp3", word_timestamps=True) for seg in segments: for w in seg.words: print(f"[{w.start:.2f}s -> {w.end:.2f}s] {w.word}")注意:英文的词级时间戳相当准,中文的粒度实际更接近短语级,别指望精确到每个汉字。
VAD 过滤:别让模型听沉默
长录音里有大段静音或环境底噪时,开启 VAD(内置 Silero VAD,实现在faster_whisper/vad.py)可以跳过无声片段,省下的不只是时间,还有模型在噪声上的胡言乱语。
segments, _ = model.transcribe( "audio.mp3", vad_filter=True, vad_parameters=dict(min_silence_duration_ms=500), )默认行为偏保守,只剔除超过 2 秒的静音;如果语速快、停顿短,默认阈值容易误删,这时把 min_silence_duration_ms 调小试试。
批量推理:一行换速度
GPU 上处理一批音频时,把模型包进 BatchedInferencePipeline 就行,它和 transcribe 的调用方式一致,是直接的替换。
from faster_whisper import WhisperModel, BatchedInferencePipeline model = WhisperModel("large-v3", device="cuda", compute_type="float16") pipeline = BatchedInferencePipeline(model) segments, _ = pipeline.transcribe("audio.mp3", batch_size=16)批量模式下 VAD 默认开启。batch_size 越大显存吃得越狠,上面实测 batch 16 时显存超过 6GB,不够就往下调。
⚠️ 避坑与常见问题
- 现象:创建模型时直接报错,提示找不到 cuDNN 或 cuBLAS。原因:最新版 ctranslate2 只认 CUDA 12 + cuDNN 9 的组合,老环境版本不匹配。解决:cuDNN 8 的环境执行
pip install --force-reinstall ctranslate2==4.4.0,CUDA 11 则降到 3.24.0。 - 现象:调用 transcribe 后程序"秒结束",却一行字都没输出。原因:segments 是生成器,你不遍历它,推理压根没开始。解决:后续还要用的话,先
list(segments)兜住。 - 现象:CI 流水线今天能跑明天挂。原因:从 master 分支装的是滚动版本,上游一变就断。解决:生产环境固定 PyPI 发行版,真需要新特性就从特定 commit 安装,别用 master。
生态与延伸
围绕它已经长出几个成熟集成:faster-whisper-server 把它封装成 OpenAI 兼容的 API 服务;WhisperX 在词级时间戳之上补了说话人分离;whisper-ctranslate2 提供命令行客户端,适合脚本里快速调用。项目采用 MIT 协议发布,商用没有障碍。本地转写字幕、会议纪要或清洗标注数据,它基本是首选;如果你只是要调云端 ASR 接口、想要零代码开箱的界面,那可以再看看别的方案。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考