
faster-whisper 语音转文字13 分钟音频压到 59 秒【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper周五下午你面前躺着 20 段会议录音明天要交文字稿先算算机器要跑多久。faster-whisper 是一款开源语音转文字库它基于 CTranslate2 推理引擎重新实现了 OpenAI Whisper官方基准里同精度下比原版快最多 4 倍、占用更少内存。先把它装起来、转出一个文件你就知道适不适合自己的场景。它和别的有什么不一样模型是同一个引擎换了跑在 CTranslate2 上同精度下比 openai/whisper 快最多 4 倍int8 量化还能再砍掉近一半内存。 装好并跑通第一个文件安装就一条命令pip install faster-whisper。它要求 Python 3.9 以上包内通过 PyAV 自带 FFmpeg 解码库不用再单独装 FFmpeg。想翻源码的话git clone https://gitcode.com/GitHub_Trending/fa/faster-whisper核心转录逻辑都在 faster_whisper/ 这个目录里。然后随便找个音频文件把下面代码放在它旁边运行示例里的jfk.flac换成你的本地音频即可克隆的仓库里tests/data/jfk.flac就能直接用from faster_whisper import WhisperModel model WhisperModel(small, deviceauto, compute_typeint8) # auto 自动挑 GPU/CPUint8 省内存 segments, info model.transcribe(jfk.flac) # 这行只是准备真正解码发生在迭代时 print(f检测到语言: {info.language} (概率 {info.language_probability:.2f})) for seg in segments: # 开始迭代模型才开始逐段解码 print(f[{seg.start:6.2f} - {seg.end:6.2f}] {seg.text})有 NVIDIA GPU 的话把devicecuda、compute_typefloat16换上去没有 GPU 时deviceauto会自动落到 CPU。跑对了的标志是先打印一行 检测到语言: en (概率 1.00)随后每行一段[起点 - 终点] 文本比如[ 0.00 - 3.30] And so on。用它做什么把长录音里的静音过滤掉一小时的会议录音里寒暄后的停顿、翻页、卡壳都在白烧算力。faster-whisper 默认开着 VAD内置 Silero VAD 模型可以先扫一遍音频、跳过无人声的部分再解码。想让过滤更激进或更保守用vad_parameters调segments, _ model.transcribe( meeting.mp3, vad_filterTrue, vad_parametersdict(min_silence_duration_ms500), # 超过 500ms 的静音才当作可切分点 )阈值调小跳过的静音更多、速度更快但贴得很紧的两句之间可能被误剪默认值偏保守宁可多算也不漏词。给每个词打上时间戳做字幕或按词高亮光有这句话到几点几分结束不够得知道每个词在什么时刻说的。打开word_timestamps就能拿到segments, _ model.transcribe(audio.mp3, word_timestampsTrue) for seg in segments: for word in seg.words: print(f[{word.start:5.2f} - {word.end:5.2f}] {word.word})它靠交叉注意力模式加动态时间规整来对齐词边界代价是速度略慢但字幕工作流里这一步基本是必需的。用命令行批量处理一批录音faster-whisper 本身是库不带现成的命令行入口但批量处理一个目录很简单。把下面存为batch_transcribe.py再对任意多个文件跑cat batch_transcribe.py EOF import sys from faster_whisper import WhisperModel model WhisperModel(small, deviceauto, compute_typeint8) # 只加载一次复用给多个文件 for path in sys.argv[1:]: segments, _ model.transcribe(path) for seg in segments: print(f{path} [{seg.start:7.2f} - {seg.end:7.2f}] {seg.text}) EOF python batch_transcribe.py meeting_01.mp3 meeting_02.mp3关键是模型在循环外加载一次。如果按文件新建WhisperModel每段音频的时间大头都会花在重新读权重上批量场景下差距能有一倍以上。⚙️ 深入调优如果你遇到GPU 上长音频还是慢换批量解码。BatchedInferencePipeline是WhisperModel.transcribe的直接替代多个音频块并行喂给模型from faster_whisper import WhisperModel, BatchedInferencePipeline model WhisperModel(turbo, devicecuda, compute_typefloat16) batched BatchedInferencePipeline(modelmodel) segments, info batched.transcribe(audio.mp3, batch_size16) # 16 个块并行显存要够 for seg in segments: print(f[{seg.start:6.2f} - {seg.end:6.2f}] {seg.text})下面是官方给出的 13 分钟音频实测large-v2 模型beam_size5NVIDIA RTX 3070 Ti 8GBCUDA 12.4方案精度耗时显存openai/whisperfp162m23s4708 MBfaster-whisperfp161m03s4525 MBfaster-whisperint859s2926 MBfaster-whisperbatch_size8int816s4500 MB如果你遇到CPU 转写慢先看线程数WhisperModel(small, devicecpu, cpu_threads8)注意非零的cpu_threads会覆盖OMP_NUM_THREADS环境变量。同一台测试机Intel i7-12700K8 线程small 模型13 分钟音频的数据是openai/whisper fp32 耗时 6m58sfaster-whisper int8 耗时 1m42s、内存 1477 MB再加batch_size8压到 51s、内存 3608 MB。如果你遇到显存不够把精度降下来GPU 用compute_typeint8_float16CPU 用int8。按上表large-v2 的显存占用从 4525 MB 降到 2926 MB精度基本不变。具体数值取决于你的硬件配置上表仅作参考线。⚠️ 这些坑可以先绕开transcribe()秒返回但打印segments什么都没有——它是生成器迭代才开始解码想提前拿结果就list(segments)收进列表。GPU 环境加载模型报 cuBLAS 或 cuDNN 找不到——新版 ctranslate2 只支持 CUDA 12 加 cuDNN 9环境是 CUDA 11 就pip install --force-reinstall ctranslate23.24.0降级处理。模型下载慢或失败——WhisperModel接受本地目录路径把转换好的模型放进来直接指定目录或用download_root把缓存指到更快的盘。公司名、产品名这类专有名词总被认错——传initial_prompt这段录音会提到 XX、YY或hotwords给模型一个词表提示。如果折腾完还是不行去项目 issues 页用报错原文搜一下常见问题基本都有现成答案。回到周五那 20 段录音先在小机器上用 small 加 int8 跑一遍batch_transcribe.py拿到整批的实际耗时再决定要不要上 GPU 或更大的模型。下一步值得试的是把你们公司的高频术语塞进initial_prompt专有名词的错误率通常会肉眼可见地下降。更多参数看 faster_whisper/transcribe.py 里的WhisperModel和transcribe实现性能脚本在 benchmark/ 目录下。【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考