如何使用Python实现音频转文本(ASR语音识别)

前言

音频转文本,业内一般称为ASR(Automatic Speech Recognition,自动语音识别)。日常场景非常多:会议录音转写、采访笔录、短视频字幕提取、电话录音归档、播客文字稿生成。

Python生态有大量成熟库,不用从零训练语音模型,几行代码就能完成音频转文字。本文从环境准备、本地轻量模型、调用大模型API、批量处理,还有踩坑要点,一次性讲清楚。

提示:本文代码均可直接复制运行,适合开发、数据分析、内容从业者快速上手。

一、技术方案选型

Python做音频转写主要两条路线,按需选择:

  1. 本地离线ASR(推荐Whisper):OpenAI开源Whisper,支持中英双语、多语种,不需要一直联网,支持wav/mp3,对电脑有一定算力要求。适合隐私敏感数据,录音文件不想上传第三方。
  2. 在线API调用:阿里云、百度、OpenAI Audio接口。优点:本地不吃算力,低配电脑也能用;缺点:音频需要上传,有费用,有网络依赖。

本文重点使用 Whisper,是目前Python语音转文字最主流的方案。

二、环境安装

基础依赖

bash 复制代码
# 安装whisper本体
pip install openai-whisper
# ffmpeg用来解析各类音频(mp3,wav,m4a)
# Windows:下载ffmpeg并配置环境变量;Linux: apt install ffmpeg;Mac: brew install ffmpeg

注意:ffmpeg是核心,缺少会直接报错无法读取音频。

Whisper内置多个模型,大小不同,按需选择:

  • tiny:最小,速度最快,精度一般,适合测试
  • base:轻量,日常测试首选
  • small:平衡速度和准确度,中文推荐
  • medium:高精度,中文效果很好,需要显存/内存更高
  • large:最强多语种,资源消耗大

三、最简示例:单音频转文本

python 复制代码
import whisper

# 加载模型,第一次运行会自动下载模型文件
model = whisper.load_model("base")

# 识别音频,audio可以是mp3/wav/m4a文件路径
result = model.transcribe("meeting.mp3", language="zh")

# 输出全部文本
print(result["text"])

# 输出分段带时间戳的结果(做字幕必备)
for seg in result["segments"]:
    print(f"【{seg['start']:.2f} - {seg['end']:.2f}】 {seg['text']}")

运行之后,不仅拿到完整文字,还附带每一句话的开始、结束时间,直接用来生成srt字幕文件。

四、进阶案例:批量音频转写

如果文件夹里一堆录音,批量处理代码:

python 复制代码
import os
import whisper

model = whisper.load_model("base")
audio_dir = "./audio/"
output_dir = "./output/"
os.makedirs(output_dir, exist_ok=True)

for filename in os.listdir(audio_dir):
    if filename.endswith((".mp3", ".wav", ".m4a")):
        audio_path = os.path.join(audio_dir, filename)
        print(f"正在处理:{filename}")
        res = model.transcribe(audio_path, language="zh")
        
        # 保存文本到文件
        out_name = os.path.splitext(filename)[0] + ".txt"
        with open(os.path.join(output_dir, out_name), "w", encoding="utf-8") as f:
            f.write(res["text"])
print("全部转写完成!")

五、方案2:调用在线API(以OpenAI Audio为例)

不想占用本地电脑算力,可以直接调用云端接口,适合短音频:

python 复制代码
from openai import OpenAI

client = OpenAI(api_key="你的key")

audio_file = open("meeting.mp3", "rb")
transcript = client.audio.transcriptions.create(
    model="whisper-1",
    file=audio_file,
    language="zh"
)
print(transcript.text)

优点:不用下载大模型,低配置机器也能用;缺点:音频文件上传外网,有成本,不适合涉密录音。

六、常见坑与优化技巧

  1. 音频质量影响巨大
    噪音大、远距离收音、多人重叠说话,识别率会暴跌。优先使用降噪后的wav音频,采样率16000Hz最佳。
  2. 内存不足问题
    medium/large模型对内存要求高,8G内存电脑尽量只用base/small。内存不够会直接OOM崩溃。
  3. 语言指定
    language="zh" 手动指定中文,比自动识别速度更快,准确率更高。
  4. 长音频处理
    Whisper内部会自动切割音频分片;如果几十小时超长录音,可以先使用pydub分割成小段再转写,降低失败风险。
  5. 输出字幕
    segments的时间戳可以直接生成.srt字幕文件,用于剪映、播放器加载字幕。

七、适用场景总结

✅ 会议录音自动转文字

✅ 播客、音频节目生成文稿

✅ 短视频批量提取字幕

✅ 电话客服录音内容归档

✅ 采访音频整理

结语

借助Python+Whisper,我们可以低成本搭建私有化音频转文本工具,不用依赖付费网页工具。离线本地部署还能保证数据不外流,结合后续NLP还可以继续做关键词提取、情感分析、摘要总结,把语音信息变成结构化文本数据。

如果你有需求,还可以继续扩展:音频降噪、语音区分说话人(声纹分割)、自动摘要、导出word字幕文件。

相关推荐
海绵宝宝转agent18 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭18 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
小小龙学IT18 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
2601_9620715719 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
卷无止境20 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
Java后端的Ai之路20 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
计算机毕业编程指导师20 小时前
计算机毕设选题推荐:基于Hadoop与Spark的Steam游戏数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·steam游戏
计算机毕业编程指导师20 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的白鹿抖音评论大数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·抖音评论
Zootopia62620 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
Y38153266220 小时前
搜索 API 延迟优化:并发数、超时与超时的真实代价
python·搜索引擎