用 faster-whisper 离线转写 1 小时音频:CPU 与 GPU 实操备忘
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
周五下午 4 点,你手里有一段 47 分钟的访谈录音,周一早会前要交文字稿。逐字听打,一整个下午都未必完稿;交给在线服务,又要权衡录音内容的保密性。faster-whisper 是基于 CTranslate2 重写 OpenAI Whisper 的 Python 库,在本地把音频转写为文本,官方 README 给出的结论是:相同准确率下比 openai/whisper 快至 4 倍,且更省内存,8 位量化还能进一步压缩开销。
一张表看清能力边界与资源开销
| 维度 | 表现 | 依据 |
|---|---|---|
| 速度 | 相同准确率下较 openai/whisper 快至 4 倍(README 原文"up to 4 times") | 官方 README |
| GPU 资源 | large-v2:int8 占显存 2926MB,fp16 占 4525MB | README 基准(RTX 3070 Ti) |
| CPU 资源 | small 模型 int8 内存占用 1477MB | README 基准(i7-12700K) |
| 精度 | distil-large-v3 的 WER 为 13.527,对照 transformers 同环境 14.801 | README 基准(YT Commons) |
| 语言覆盖 | 多语言支持,默认按前 30 秒音频自动检测语言,也可显式指定 | 源码transcribe.py |
| 部署方式 | 支持 / 部分支持 / 不支持:离线转写支持,批量推理支持,说话人分离不支持,GUI 不支持 | README 与社区清单 |
适合需要离线批量处理录音、且手里有 GPU 或高性能 CPU 的团队;不适合想零代码点鼠标出结果、或指望它直接做说话人分离的使用者。
按使用强度选模型档位与计算类型
先判断自己属于哪种强度,再定档位,而不是上来就装最大的模型:
- 轻量试用(每月几条录音,CPU 即可)
- 模型:
base或small,compute_type="int8" - 硬件门槛:4 核以上 CPU、8GB 内存(small int8 占用 1477MB,README 基准)
- 预期耗时:13 分钟音频在 i7-12700K 上 int8 用时 1m42s,折算 1 小时录音约 8 分钟(按 README 数字推算)
- 模型:
- 日常生产(每日会议、字幕批量转写,推荐 GPU)
- 模型:
large-v3或turbo,compute_type="float16";显存紧张改int8_float16 - 硬件门槛:8GB 显存的 NVIDIA GPU(large-v2 fp16 4525MB、int8 2926MB,README 基准)
- 预期耗时:
batch_size=8时 13 分钟音频 17 秒,折算 1 小时约 80 秒(按 README 数字推算)
- 模型:
- 高并发服务(给团队开批量转写任务)
- 模型:GPU +
BatchedInferencePipeline,README 基准中 distil-large-v3 用了batch_size=16 - 硬件门槛:
batch_size=8需 6090MB 显存(README 基准),更大批次建议 16GB 显存 - 部署:仓库
docker/目录提供示例 Dockerfile 与infer.py,可作为容器化起点
- 模型:GPU +
15 行跑通基础转写
pip install faster-whisperfrom faster_whisper import WhisperModel model = WhisperModel("large-v3", device="cuda", compute_type="float16") segments, info = model.transcribe("interview.mp3", beam_size=5) print("语言:", info.language, "概率:", info.language_probability) for segment in segments: # 注意:遍历前不会真正开始转写 print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")适用边界:单文件、单机、一次性产出文字稿的场景够用;需要说话人分离或流式字幕时,要再套一层外部项目(README 的社区集成清单里有现成方案)。
常用参数速查(默认值来自 1.2.1 版本transcribe签名):
| 参数 | 默认值 | 什么时候调 |
|---|---|---|
vad_filter | True | 内置 Silero VAD 默认只过滤超过 2 秒的静音,可用vad_parameters收紧 |
word_timestamps | False | 做字幕时必须开,输出词级起止时间 |
language | 自动检测 | 中文等语种显式传language="zh"更稳 |
task | transcribe | 设为translate输出目标语言译文 |
hotwords | None | 固定人名、产品名、术语的识别 |
condition_on_previous_text | True | 长音频出现滚雪球式误识别时置False |
batch_size | 8 | 仅批量推理管线生效,越大越快、显存越高 |
两个可直接照搬的工作流
一:CPU 上把 1 小时访谈压进 10 分钟
工具链:faster-whisper + 内置 Silero VAD + 笔记软件。
- 录音导出为 mp3(库加载时经 PyAV 解码,无需系统安装 FFmpeg,自动重采样为 16kHz 单声道,见源码
faster_whisper/audio.py); transcribe(path, vad_filter=True),默认滤掉超过 2 秒的静音段;- 遍历 segments 落盘为纯文本,粘进笔记软件校对专有名词。
可量化收益:small 模型 int8 下 13 分钟音频用时 1m42s(README 基准,i7-12700K 八线程),1 小时录音约 8 分钟出初稿。
二:GPU 上批量生成词级字幕
工具链:BatchedInferencePipeline+ct2-transformers-converter+ SRT 导出脚本。
- 模型权重首次运行自动从 Hugging Face Hub 下载,也可用转换器把自有微调模型转为 CTranslate2 格式;
batched_model.transcribe(path, batch_size=8, word_timestamps=True);- 从
segment.words逐词导出 SRT; - 导入剪辑软件对齐校对。
可量化收益:large-v2 在 RTX 3070 Ti 上 fp16、batch_size=8时 13 分钟音频仅需 17 秒(README 基准),2 小时长片推理约 2.5 分钟。
对照根因表排查高频故障
| 现象 | 根因 | 处理动作 |
|---|---|---|
| 初始化报 cuBLAS/cuDNN 缺失 | 新版 ctranslate2 仅支持 CUDA 12 + cuDNN 9 | 装 CUDA 12 的 cuBLAS/cuDNN;CUDA 11 环境按 README 降级 ctranslate2 到 3.24.0 |
| 首次运行卡在模型下载 | 权重默认从 Hugging Face Hub 拉取 | 手动下载 Systran 模型放到本地,WhisperModel直接传本地目录 |
| CPU 转写明显慢于预期 | 未量化、线程数未受控 | 换compute_type="int8";用OMP_NUM_THREADS固定线程数再对比 |
| 长音频同一句反复滚雪球式误识别 | condition_on_previous_text让错误累积 | 置False,或改用 distil-large-v3(README 示例即如此) |
| 拿到 segments 却打印不出任何内容 | transcribe返回生成器,遍历前不执行 | list(segments)或放进 for 循环(README 明确警告) |
| GPU 显存不足 | 大模型用了 fp16 | 改compute_type="int8_float16",large-v2 显存从 4525MB 降到 2926MB(README) |
已知能力边界:本项目暂不支持原生说话人分离,也不提供真正的实时流式推理接口与任何图形界面——流式字幕和分离需要外挂社区项目(README 社区清单列有 Whisper-Streaming、whisper-diarize 等);它也不是训练框架,微调得到的 checkpoint 需先用ct2-transformers-converter转成 CTranslate2 格式才能加载。
三周从试用走到稳定生产
第 1 周(跑通):确认 Python ≥ 3.9,装库后用base+ int8 在自己 2~3 段真实录音上跑通transcribe,人工抽查准确率;同时确认机器走 CPU 还是 GPU 路线(GPU 需核对 cuBLAS/cuDNN 版本)。
第 2 周(调参):跑通 benchmark/ 下的脚本在自己机器上测出实时比基准;打开word_timestamps、hotwords,解决专有名词与字幕对齐问题;有 GPU 时切到large-v3/turbo+ fp16 复测耗时。
第 3 周(固化):把转写封装为批处理脚本或 Docker 服务,输出 SRT/Markdown 归档;对识别不稳的领域,微调模型后转换为 CTranslate2 格式接入。参数细节随时查 faster_whisper/transcribe.py 的transcribe签名,那里有全部选项的默认值与说明。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考