使用 Whisper 实现语音转文字
最近遇到这样一个需求:从视频中提取音频并将语音转换成文字。在和 Qwen 进行一些讨论后决定使用 openai-whisper 来实现。
安装 FFmpeg
openai-whisper 依赖 FFmpeg,我们首先需要安装它。又因为我是 Windows 系统,因此从 FFmpeg 下载页 导航到 gyan.dev 下载 ffmpeg-release-essentials.zip,解压到 D:\Program Files 目录,得到 D:\Program Files\ffmpeg-8.0.1-essentials_build,配置环境变量 FFMPEG_HOME=D:\Program Files\ffmpeg-8.0.1-essentials_build,在 Path 变量中加入 %FFMPEG_HOME%\bin,打开命令提示符输入 ffmpeg -version 检查安装是否成功,当前输出为
1 | ffmpeg version 8.0.1-essentials_build-www.gyan.dev Copyright (c) 2000-2025 the FFmpeg developers |
到此为止,安装 FFmpeg 就完成了。
实现脚本
下面是 Vibe Coding 实现的转换脚本 video_transcriber.py,项目使用 uv 进行管理,需要安装依赖 uv add openai-whisper==20250625
1 | import whisper |
下载 Whisper 模型
在执行 whisper.load_model() 这行代码时如果没有找到 name 参数指定的模型,会自动下载模型。这是一个耗时的操作,因此我们提前下载好模型。简单的阅读 whisper 的源码发现模型的下载路径记录在 whisper/__init__.py 文件的 _MODELS 字典中
1 | _MODELS = { |
在 Windows 系统下模型会被下载到 %USERPROFILE%\.cache\whisper 目录中,比如 name="small" 时模型会下载为 %USERPROFILE%.cache\whisper\small.pt 文件。因此我们可以直接复制对应模型的下载路径提前下载好模型。
遇到的问题
缺少 GPU 警告
1 | D:\projects\python\example-video\.venv\Lib\site-packages\whisper\transcribe.py:132: UserWarning: FP16 is not supported on CPU; using FP32 instead |
可以不用管它。
繁体文本问题
模型有的时候会返回繁体文本,需要转换一下。基于 zhconv 实现了 zhcn_convert.py 脚本
1 | import zhconv |