faster-whisper 语音转文字:本地离线跑通,比原版快 4 倍
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
会议录音一个多小时、外语视频没有字幕,你总不能逐字听吧?faster-whisper 用 CTranslate2 引擎重写了 OpenAI Whisper,在准确率基本不变的前提下,把转写速度提到原版的约 4 倍,还能离线跑、内存占用更低。
🚀 三步跑通第一次转写,拿到你的第一份文字
先别管配置,把最小闭环走通。它要求 Python 3.9+,音频解码由 PyAV 自带,不需要你另外装 FFmpeg;只有在用 NVIDIA 显卡时才需要额外的 cuBLAS 和 cuDNN。
# 安装主包(要求 Python 3.9+) pip install faster-whisper装完直接跑下面这段。WhisperModel按名字加载模型,首次会自动从 Hugging Face 下载并缓存到本地,第二次就快了。
from faster_whisper import WhisperModel # 没有 NVIDIA 显卡:用 CPU + int8 量化,内存更省 model = WhisperModel("base", device="cpu", compute_type="int8") segments, info = model.transcribe("audio.mp3", beam_size=5) print("语言:", info.language, "置信度:", round(info.language_probability, 2)) for seg in segments: # segments 是生成器,开始遍历才真正启动转写 print(f"[{seg.start:.2f}s -> {seg.end:.2f}s] {seg.text}")跑通这一步,你就有了带时间戳的文字稿。所有可调参数都集中在WhisperModel.transcribe里,完整签名可以在 faster_whisper/transcribe.py 里对照。
适用场景:会议录音、访谈、语音笔记等任意音频文件的快速出稿。
⚙️ 选对模型与计算类型,把速度榨出来
模型档位和计算类型(compute_type)决定了"多快、占多少内存"。官方基准是在同一硬件上测得的可验证数字:
GPU(NVIDIA RTX 3070 Ti,large-v2 模型,13 分钟音频):
| 实现 | 精度 | 耗时 | 显存占用 |
|---|---|---|---|
| openai/whisper | fp16 | 2m23s | 4708MB |
| faster-whisper | fp16 | 1m03s | 4525MB |
| faster-whisper(batch_size=8) | fp16 | 17s | 6090MB |
| faster-whisper(int8) | int8 | 59s | 2926MB |
CPU(Intel i7-12700K,small 模型,13 分钟音频):
| 实现 | 精度 | 耗时 | 内存占用 |
|---|---|---|---|
| openai/whisper | fp32 | 6m58s | 2335MB |
| faster-whisper(int8) | int8 | 1m42s | 1477MB |
结论很直接:GPU 上加batch_size冲吞吐,CPU 上优先int8省内存。按你的硬件和精度要求挑档位:
| 档位 | 精度取向 | 推荐计算类型 | 适配硬件 | 典型用途 |
|---|---|---|---|---|
| tiny / base | 快、省 | CPUint8 | 普通笔记本 | 试错、实时、长音频粗转 |
| small | 平衡 | CPUint8/ GPUfloat16 | 入门独显 | 日常会议、播客 |
| medium | 较准 | GPUfloat16 | 中端独显 | 精度要求更高 |
| large-v3 | 最高 | GPUfloat16/int8_float16 | 大显存 | 正式交付、多语言 |
| turbo | 大模型速度 | GPUfloat16 | 独显 | 大批量、追吞吐 |
[!TIP]
segments是生成器,不会在transcribe那一刻就开始算。想一次性跑完就list(segments);追求速度时在 GPU 上把batch_size调大(如 8、16),实测能把 13 分钟音频从 1 分钟压到十几秒。
适用场景:确定你的硬件和精度底线后,用这张表锁定model_size和compute_type。
🔤 解锁词级时间戳、翻译与静音过滤
基础出稿之外,三个参数值得单独记住,它们覆盖绝大多数进阶需求。
# 词级时间戳 + 翻译 + 静音过滤,一次配齐 segments, _ = model.transcribe( "audio.mp3", language="zh", # 显式指定中文,避免自动误判 task="translate", # 需要译成英文时填 "translate" word_timestamps=True, # 逐词时间戳,做字幕的刚需 vad_filter=True, # 用内置 Silero VAD 跳过静音段 vad_parameters=dict(min_silence_duration_ms=500), # 停顿超 500ms 才断开 ) for seg in segments: for word in seg.words: # 每个词都有 start / end / word print(f"{word.start:.2f}s {word.word}")几个关键点:
word_timestamps=True:把时间戳精确到每个词,做字幕、逐词分析都靠它。task="translate":把源语言转写成英文文本,配合language指定源语言即可跨语言。vad_filter=True:内置 Silero VAD 过滤无语音片段,默认只会去掉超过 2 秒的静音,参数默认值见 faster_whisper/vad.py。
[!WARNING] 如果结果出现重复、时间戳错乱或陷入循环,多半是解码卡进了失败循环。把它设成
condition_on_previous_text=False,用上一段输出做提示的机制会关闭,稳定性明显提升。
适用场景:视频字幕制作、外语内容转译、长访谈里大段停顿的录音整理。
⚠️ 绕开五个最常见的坑
| 现象 | 更可能的原因 | 处理方式 |
|---|---|---|
| 首次运行卡很久 | 正在自动下载模型 | 下载完会缓存本地,第二次直接复用 |
| CUDA 报错 / 找不到库 | 缺 cuBLAS、cuDNN,或 CUDA 版本不符 | 装 CUDA 12 的 cuBLAS 与 cuDNN 9;没有卡就直接用 CPU |
| 中文识别不准 | 语言被自动误判 | transcribe里显式写language="zh" |
| 输出重复、乱码循环 | 解码陷入失败循环 | 设condition_on_previous_text=False |
| 显存不足(OOM) | 模型太大或精度太高 | 换更小模型,或compute_type="int8" |
语言支持可查 faster_whisper/tokenizer.py 里的_LANGUAGE_CODES,内置代码覆盖了 100 种语言,中文(zh)也在其中。完整基准与换算模型的命令都在 README.md,需要复现对比时以它为准。
适用场景:第一次跑不顺、或跨语言/中文效果不达预期时,按这张表逐项排查。
🧭 按你的角色,把下一步做对
不同人拿到这套工具后的落点不一样,对号入座:
- 学生 / 研究者:先
base试错,讲课录音、访谈素材批量出稿,再用词级时间戳整理引用位置。 - 职场 / 会议:日常用
small+vad_filter,长会议开batch_size,把纪要整理时间省下来。 - 字幕 / 内容创作:
word_timestamps=True直接导出逐词时间轴,配task="translate"做多语言字幕。 - 开发者 / 批量:GPU 上
turbo或large-v3+batch_size拉吞吐,把转写嵌进自动化管道。
最后,用这四步把它真正用起来:
pip install faster-whisper,确认 Python 版本达标;- 跑通上面的最小示例,拿到第一份带时间戳的文字;
- 按你的硬件选对
model_size与compute_type,需要快就加batch_size、省内存就int8; - 按场景叠加
word_timestamps、translate、vad_filter,把出稿变成能直接交付的结果。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考