faster-whisper 使用教程

一段录音在本机转成带时间的文字,再交给 Codex 改成口播稿

本机转写

📖 项目简介

faster-whisper 是 SYSTRAN 用 CTranslate2 重写的 Whisper 语音转写库,MIT 协议。它不带界面:装上之后用几行 Python,就能把录音转成一句一句、带开始和结束时间的文字。

推理走 CTranslate2,同一类模型比原版 Whisper 更快,也更省内存。8-bit 量化在 CPU 和 GPU 上都能用。和原版不一样,它不用另外安装系统里的解码器,音频解码交给 Python 包 PyAV,安装时会带上所需的库。

转写只负责「听见什么」。删掉嗯啊和口误、改同音字和专有名词、按封面 / 效果演示 / 使用方法 / 结尾拆成口播稿,交给 Codex。把你满意的旧稿和这些规矩写进项目里的 AGENTS.md,之后直接说人话就行。

✨ 核心亮点

💻
录音留在本机
转写在自己电脑上跑,音频不会拿去调别人的语音接口
⏱️
每句带时间
输出开始和结束秒数,也能细到每个词
📦
一条 pip 装上
不用再单独装系统解码器,PyAV 会带上库
🎚️
有卡用卡,没卡用 CPU
GPU 用 float16,CPU 用 int8,模型从很小到 large-v3

🧩 它能做什么、输出什么

项目说明
输入常见音频,例如 mp3、wav、m4a、flac。视频要先抽出音轨再转
适用类型语音备忘、直播回放、访谈、播客、课程录音
输出按句的文字,带起止时间;打开词级时间后能对到每个词。静音过滤可去掉没人说话的部分
语言沿用 Whisper 的多语识别。中文建议把 language 设为 zh,不写则自动检测
规格模型名可用 tiny、base、small、medium、large-v3、distil-large-v3、turbo。第一次用某个模型会下载权重

🖥️ 环境要求

环境建议配置
操作系统Windows、Linux、macOS 都可以
运行环境Python 3.9 或更高
硬件NVIDIA 显卡走 GPU 时,需要 CUDA 12 和 cuDNN 9。官方在 RTX 3070 Ti 8GB 上测 large-v2、fp16,显存大约 4525MB
没有独显改用 CPU,compute_type 用 int8。官方在 i7-12700K、8 线程、small 模型上,转 13 分钟音频大约 1 分 42 秒,内存大约 1477MB
关键依赖pip 安装 faster-whisper 即可。解码库随 PyAV 一起装,不用再装系统里的 ffmpeg

🚀 如何使用

💡
先用 CPU 和 small 模型跑通一条短录音。确认有 CUDA 12 和 cuDNN 9 之后,再换成 large-v3 和 GPU。
1

安装

在 GitHub 搜索 SYSTRAN 的 faster-whisper,或直接用下面这一条。装的是 PyPI 上的发行版。

bash pip install faster-whisper
2

最小例子

把 memo.m4a 换成你的录音。segments 是生成器,写进 for 循环才会真正开始转写。只写到 transcribe 那一行,程序会马上结束,一个字都没有。

python from faster_whisper import WhisperModel

model = WhisperModel("small", device="cpu", compute_type="int8")
segments, info = model.transcribe("memo.m4a", beam_size=5, language="zh")
print(info.language, info.language_probability)

for segment in segments:
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

常用参数:

参数作用
模型名tiny / base / small / medium / large-v3 / distil-large-v3 / turbo。要质量用 large-v3,要速度用 distil-large-v3 或 turbo,没显卡先用 small
devicecuda 或 cpu
compute_typeGPU 用 float16;GPU 想再省显存用 int8_float16;CPU 用 int8
beam_size束搜索宽度,这里默认 5。和别的实现比速度时要设成同一个值
language中文写 zh。不写就自动检测语种
word_timestamps设为 True 后,每句里的每个词也带起止时间
vad_filter设为 True 用 Silero 去掉没人说话的部分。默认只去掉长于 2 秒的静音,批量转写默认就开着
3

有显卡时换成 GPU

确认 CUDA 12 和 cuDNN 9 已经装好再改这两处。large-v3 第一次运行会下载权重,体积比 small 大不少。

python model = WhisperModel("large-v3", device="cuda", compute_type="float16")
4

一个文件夹里的录音一起转

开静音过滤,并把每条结果写成同名的 txt。词级时间把 word_timestamps 设为 True,再去读 segment.words。

python from pathlib import Path

out = Path("transcripts")
out.mkdir(exist_ok=True)
for audio in Path("recordings").glob("*.m4a"):
    segments, info = model.transcribe(str(audio), language="zh", vad_filter=True)
    text = "".join(segment.text for segment in segments)
    (out / (audio.stem + ".txt")).write_text(text, encoding="utf-8")

同一条很长的音频想再加快,可以用官方的批量推理。它和普通 transcribe 的用法一样,多一个 batch_size。批量转写默认会开静音过滤。

python from faster_whisper import WhisperModel, BatchedInferencePipeline

model = WhisperModel("turbo", device="cuda", compute_type="float16")
batched = BatchedInferencePipeline(model=model)
segments, info = batched.transcribe("memo.m4a", batch_size=16)
for segment in segments:
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
5

结合 Codex 改成口播稿

转写稿还不是口播稿。把一两篇你满意的旧稿发给 Codex,让它把格式写进 AGENTS.md,至少写清这几条:

markdown 口播稿只保留口播。按封面、效果演示、使用方法、结尾分场。
每场标题写上估好的秒数,超了就删句子,不要硬凑。
删掉嗯、啊、重复句和说错又改口的部分。
专有名词以旧稿为准。写 skills,不要写成技能。
✅
之后直接说:把这个文件夹里的录音都改成口播稿,每条一分钟以内,专有名词照旧稿来。

🎯 典型应用场景

🎤
语音备忘
随手录的一段话,转成文字再拆成四场口播稿
📺
直播回放
先出带时间的逐字稿,再挑值得写进稿子的句子
🎙️
访谈和播客
按句对齐,后面改稿时能回听某一句
📚
课程录音
整段听写下来,专有名词再按课件改
📄
已经写好的长文
长文不用转写。直接让 Codex 按同一份规矩拆成口播稿
💬
字幕底稿
打开词级时间,给后面烧字幕用。改错别字仍交给稿子对照

📈 性能表现

下面是官方 README 里的实测,不是宣传口径。同一段 13 分钟音频,large-v2 模型,beam size 都是 5。GPU 测试用 CUDA 12.4、RTX 3070 Ti 8GB。

跑法时间显存 / 内存
faster-whisper,GPU,fp161 分 03 秒4525MB
faster-whisper,GPU,fp16,batch_size=817 秒6090MB
faster-whisper,GPU,int859 秒2926MB
openai/whisper,GPU,fp162 分 23 秒4708MB

CPU 用的是 small 模型、8 线程、Intel i7-12700K,转的仍是这 13 分钟。

跑法时间内存
faster-whisper,int81 分 42 秒1477MB
faster-whisper,int8,batch_size=851 秒3608MB
openai/whisper,fp326 分 58 秒2335MB
🧠
它快,是因为 Transformer 推理换成了 CTranslate2,再用 8-bit 量化把内存降下来。比速度时 beam size、线程数要和对方设成一样,否则数字没有意义。

❓ 常见问题

Q: 和原版 Whisper 有什么差别?

模型一类,推理引擎换成了 CTranslate2。官方同一段 13 分钟音频、large-v2、GPU fp16:faster-whisper 1 分 03 秒,原版 2 分 23 秒。

Q: 还要安装 ffmpeg 吗?

不用。原版 Whisper 要系统里有 ffmpeg,这个库用 PyAV 解码,安装包里已经带了库。

Q: 没有 NVIDIA 显卡能跑吗?

能。device 用 cpu,compute_type 用 int8,模型先选 small。核显和苹果芯片也走这条 CPU 路径。

Q: 报错找不到 cublas 或 cudnn 怎么办?

GPU 路径需要 CUDA 12 和 cuDNN 9。CUDA 11 要把 ctranslate2 降到 3.24.0;CUDA 12 但 cuDNN 还是 8,降到 4.4.0。Linux 可以用 pip 装 nvidia-cublas-cu12 和 nvidia-cudnn-cu12,并设置库路径。Windows 按 NVIDIA 的文档安装,或把社区整理好的库放进 PATH。暂时搞不定就改回 CPU。

Q: 第一次运行停很久?

多半在下载模型权重。large-v3 比 small 大很多。想先看结果,把模型名改成 small。已经下过的模型可以传本地目录,不必每次都下。

Q: 中文同音字、专有名词不对?

转写负责听写,不负责改稿。同音字和专有名词交给 Codex,拿你的旧口播稿对照着改。这一步不要指望转写模型自己改对。

Q: 模型怎么选?

要听写质量用 large-v3。要更快用 distil-large-v3 或 turbo。没有独显用 small 加 int8。英文材料可以试 distil-large-v3,并把 language 设为 en。

Q: 程序结束了,但是没有文字?

segments 是生成器。transcribe 返回之后转写还没开始,要放进 for 循环,或者用 list(segments) 收齐,才会真正跑。

Q: 怎么和 Codex 一起用?

让 Codex 执行 pip install faster-whisper。再把旧稿和分场规矩写进 AGENTS.md。之后说:把这个文件夹里的录音都改成口播稿,每条一分钟以内,专有名词照旧稿来。

Q: 可以商用吗?

MIT 协议。可以放进商业项目,也可以再分发。分发时保留版权声明和许可声明。