
whisper 这是由 openai 发布的离线语音识别库。我们可以用 python 调用这个库来实现离线语音识别。具体步骤如下:
Whisper 在处理音频时需要调用 FFmpeg 库
第一步:下载 FFmpeg
- 访问 Gyan.dev (Windows 推荐的下载站)。
- 在 release builds 部分,下载
ffmpeg-release-essentials.zip。 - 解压下载好的压缩包。建议将其文件夹重命名为
ffmpeg,并移动到一个不容易被删除的位置(例如C:\ffmpeg)。
第二步:配置环境变量 (Windows)
Whisper 必须能在命令行直接运行 ffmpeg 才能正常工作:
-
在 Windows 搜索框输入 “控制面板”,选择 “系统”——“高级系统设置”
-
点击 “环境变量” 按钮。
-
在 “系统变量” 栏找到 Path,双击打开。
-
点击 “新建”,将你刚才解压的路径下的
bin文件夹路径添加进去。- 例如:
C:\ffmpeg\bin
- 例如:
-
一路点击 “确定” 保存。
第三步:验证安装
重启你的编辑器(VS Code, PyCharm 等)或命令行窗口,然后输入:ffmpeg -version
如果能显示版本信息,表明安装成功。
下载运行所需的函数库
pip install -U openai-whisper
pip install zhconv
运行代码
import os
import warnings
import whisper
import zhconv
# 忽略FP16警告
warnings.filterwarnings("ignore", message="FP16 is not supported on CPU; using FP32 instead")
def interactive_transcribe():
print("--- Whisper 语音转文字工具 ---")
# 1. 输入音频路径
input_path = input("请输入音频文件路径 (例如 1.wav): ").strip().strip('"')
# strip('"') 是为了处理 Windows 拖入文件时自带的双引号
if not os.path.exists(input_path):
print(f"❌ 错误:找不到文件 '{input_path}',请检查路径是否正确。")
return
# 2. 选择模型
print("\n可用模型版本:1 - tiny, 2 - base, 3 - small, 4 - medium, 5 - large")
# model_size = input("请选择模型级别 (直接回车默认使用 tiny): ").strip() or "tiny"
# 输入选择,直接回车默认选1(tiny)
choice = input("请输入数字选择模型 (默认 1): ").strip() or "1"
# 数字对应模型
model_map = {
"1": "tiny",
"2": "base",
"3": "small",
"4": "medium",
"5": "large"
}
# 获取最终模型大小
model_size = model_map.get(choice, "tiny") # 输错也默认tiny
# 3. 输入输出路径
default_output = os.path.splitext(input_path)[0] + ".txt"
output_path = input(f"请输入输出文件路径 (直接回车默认为 {default_output}): ").strip().strip('"')
if not output_path:
output_path = default_output
# --- 核心改进点 1:增加引导词 ---
# initial_prompt 能有效提示模型输出特定的语言风格和标点习惯
prompt = "以下是普通话的句子,包含逗号、句号和感叹号等标点符号。还可以了,不错!谢谢!今天天气很好。"
# --- 开始处理 ---
try:
print(f"\n正在加载 {model_size} 模型,请稍候...")
model = whisper.load_model(model_size)
print(f"正在识别: {input_path} ...")
# result = model.transcribe(input_path)
result = model.transcribe(input_path, initial_prompt=prompt)
# --- 核心改进点 2:从 segments 中提取并拼接文本 ---
# 这样可以确保预览看到的标点被完整保留
full_text = "".join([segment["text"] for segment in result["segments"]])
# 转换为简体中文
print("正在进行繁简转换...")
# simplified_text = zhconv.convert(result["text"], 'zh-cn')
simplified_text = zhconv.convert(full_text, 'zh-cn')
print("\n" + "=" * 30)
# print(simplified_text)
# 保存文件
with open(output_path, "w", encoding="utf-8") as f:
f.write(simplified_text)
print("\n" + "=" * 30)
print(f"✅ 处理完成!")
print(f"📄 结果已保存至: {output_path}")
print(f"📝 识别内容预览: \n{simplified_text[:100]}..." if len(simplified_text) > 100 else simplified_text)
print("=" * 30)
except Exception as e:
print(f"❌ 运行过程中出错: {e}")
if __name__ == "__main__":
interactive_transcribe()
代码忽略 FP16 警告,可以拖拽音频文件。tiny 模型可能会没有标点。我用 small 模型,标点还算比较好。
综合
总的来说,转换识别比较准确。数据可以完成自控,这点很不错。
测试效果图:

参阅:
openai/whisper: Robust Speech Recognition via Large-Scale Weak Supervision
python离线语音识别库whisper - 吾爱破解 - 52pojie.cn
Tag: #Python #语音识别 #离线
文章评论