尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

15分钟跑通faster-whisper:不装FFmpeg也能3倍速转写音频

15分钟跑通faster-whisper:不装FFmpeg也能3倍速转写音频 15分钟跑通faster-whisper不装FFmpeg也能3倍速转写音频【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisperfaster-whisper 用 CTranslate2 重写了 OpenAI Whisper 的推理同样 13 分钟音频官方实现要 2 分 23 秒它只要 63 秒内存还省 40%。这篇文章只解决一个问题——半小时内让你自己的音频产出带时间戳的转写文本不需要 NVIDIA 显卡CPU 就能跑完整流程。先跑起来环境要求只有一条Python 3.9 以上。不用装 FFmpeg依赖里的 avPyAV库自带音频解码。下面这条命令装上核心包当前版本 1.2.1会连带装好 ctranslate2 4.x、av11、onnxruntimepip install faster-whisper写一个最小脚本demo.py。如果你手上有本项目的源码tests/data/jfk.flac是现成的测试音频直接拿来跑没有就放任意一个 .mp3 在同目录from faster_whisper import WhisperModel model WhisperModel(base, devicecpu, compute_typeint8) segments, info model.transcribe(jfk.flac, vad_filterTrue) print(f语言: {info.language} (置信度 {info.language_probability:.2f})) for seg in segments: # 推理发生在遍历这一步 print(f[{seg.start:6.2f} - {seg.end:6.2f}] {seg.text})运行python demo.py第一次会自动从 Hugging Face 下载 base 模型约 145MB7400 万参数之后走本地缓存。预期输出语言: en (置信度 0.99) [ 0.00 - 14.50] And so my fellow Americans, ask not what your country can do for you...能打印出带时间戳的文字就说明整条链路通了。下面按实际场景往上调。换到 GPU两行代码切 float16有 NVIDIA 卡时把设备参数改掉就行。GPU 侧只依赖两个库CUDA 12 cuDNN 9最新版本ctranslate2 4.x只认这个组合# 显存 6GB 的卡用 float16 model WhisperModel(large-v3, devicecuda, compute_typefloat16) # 显存 6GB 的卡用 int8 量化 # model WhisperModel(large-v3, devicecuda, compute_typeint8_float16)显存参考large-v2 模型13 分钟音频float16 占 4525MBint8_float16 占 2926MB。你的卡是 RTX 3070 Ti 8GB 这类 8GB 卡large-v3 的 float16 也能放下。如果你的环境不是 CUDA 12 cuDNN 9按这个图选 ctranslate2 版本完全没有 CUDA 的 Linux 服务器也可以pip install nvidia-cublas-cu12 nvidia-cudnn-cu129.*后用脚本设置LD_LIBRARY_PATH解决不装系统级驱动。批量处理本地文件夹一个循环出全部文本把一批音频丢进audio/目录这个脚本逐条转写并各生成一个同名 .txt模型只加载一次后面每条只花转写本身的时间import os from faster_whisper import WhisperModel model WhisperModel(base, devicecpu, compute_typeint8) os.makedirs(out, exist_okTrue) for name in sorted(os.listdir(audio)): if not name.endswith((.mp3, .wav, .flac, .m4a)): continue segments, _ model.transcribe( os.path.join(audio, name), languagezh, # 语言已知时直接指定省掉前 30 秒检测 vad_filterTrue, ) with open(fout/{os.path.splitext(name)[0]}.txt, w, encodingutf-8) as f: for seg in segments: f.write(f[{seg.start:.2f} - {seg.end:.2f}] {seg.text}\n) print(done:, name)预期输出每个文件一行done: meeting_01.mp3 done: meeting_02.mp3长音频提速VAD 去静音 批量推理两个开关按需各取一个。第一个是 VAD。vad_filterTrue会先用 Silero VAD 模型把无语音片段切掉再推理默认比较保守只去掉超过 2 秒的静音。背景音乐多、开头静音长的录音可以更激进segments, _ model.transcribe( long_audio.mp3, vad_filterTrue, vad_parametersdict(min_silence_duration_ms500), # 500ms 以上的静音就切 )第二个是批量推理。BatchedInferencePipeline是WhisperModel的替换用法把音频切块后并行推理且默认自带 VAD。官方实测13 分钟音频small 模型i7-12700K 8 线程 CPUint8 单跑 1 分 42 秒batch_size8后 51 秒GPU 上 large-v2 从 63 秒压到 16 秒。from faster_whisper import WhisperModel, BatchedInferencePipeline model WhisperModel(small, devicecpu, compute_typeint8) pipeline BatchedInferencePipeline(model) segments, _ pipeline.transcribe(long_audio.mp3, batch_size8, languagezh) for seg in segments: print(f[{seg.start:6.2f} - {seg.end:6.2f}] {seg.text})代价是内存CPU 上 13 分钟音频从 1477MB 涨到 3608MB机器内存 8GB 以下时 batch_size 用 4 更稳。中文识别不准三个参数调准按顺序试这三项每项解决一类问题segments, _ model.transcribe( audio.mp3, languagezh, # 1. 语言检测错中文被识别成英文→ 直接指定 hotwords大模型 语音识别 张一鸣, # 2. 专有名词、人名总听错 → 给提示词 initial_prompt这是一段中文科技播客的对话。, # 3. 整体风格不对 → 给上下文示例 word_timestampsTrue, # 需要逐字时间戳做卡拉OK/字幕对齐时打开 )hotwords对反复出现且总被听错的名词最有效塞 10 个以内、和上下文无关的短句效果最好。word_timestampsTrue后每个 segment 会多一个words列表可以逐词打印for seg in segments: for word in seg.words: print(f[{word.start:.2f} - {word.end:.2f}] {word.word})模型档位按场景选参数和速度参考13 分钟音频实测模型参数量CPU 实测small 为参照适用场景tiny / base39M / 74M秒级响应快速草稿、内容预览small244Mint8 单跑 1 分 42 秒CPU 主力档通用场景medium769M约为 small 的 3 倍耗时有一定准确率要求large-v3 / turbo1550M / 809M需 GPU生产级精度turbo 速度快但无翻译任务避坑速查高频报错一行修复症状根因一条解法加载 cuda 模型报 cuDNN 相关错误ctranslate2 4.x 只支持 CUDA 12 cuDNN 9CUDA 11 环境执行pip install --force-reinstall ctranslate23.24.0CUDA 12 cuDNN 8 用ctranslate24.4.0CUDA out of memoryfloat16 模型超出显存compute_type改int8_float16large-v2 显存从 4525MB 降到 2926MB调完 transcribe() 没输出、进度条不动segments 是生成器遍历才开始推理用segments list(segments)或 for 循环消费后再用中文音频被检测成英文自动检测只看前 30 秒传languagezh识别文本疯狂重复、时间戳错乱模型陷入失败循环传condition_on_previous_textFalse首跑卡在模型下载模型从 Hugging Face 拉取WhisperModel(base, download_rootD:/models)指定缓存目录或直接传本地模型目录路径收尾你现在的位置一条 pip 命令、十几行脚本任何一段音频都能出带时间戳的文本CPU 可跑、GPU 提速。下一步打开源码faster_whisper/transcribe.py对着TranscriptionOptions把每个参数过一遍VAD 的默认值都在faster_whisper/vad.py里改之前先看一眼。【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表