十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用Python和Whisper实现本地语音识别转文字完整指南

用Python和Whisper实现本地语音识别转文字完整指南 简介一套基于Python实现声音识别转文字的实战资源面向正在学习语音识别、希望快速上手speech_recognition库的Python开发者。压缩包共3个文件包含2个WAV音频样本和1个Python脚本整体大小仅594KB轻量易用。已有5819人学习下载是入门语音转文字的高热度参考。示例代码演示了如何创建Recognizer实例、读取WAV音频、调用Google Web Speech API识别中文语音并将识别结果写入TXT文件两个音频样本可分别测试不同语音内容替换文件路径即可迁移到自己的音频。资源还涵盖语言参数设置如zh-CN、异常处理等关键知识点并提示了网络依赖与备选识别服务适合作为课堂练习或小型自动化工具的基础模板。 你手头是不是也有不少录音、会议纪要、网课或者受访视频想转成文字却懒得手动敲其实这套活儿用 Python 就能在本地跑通而且效果比我预想的好很多。这篇文章就从环境准备到最终出字幕一步步把“声音识别转文字”这条链路拆开讲清楚照着做基本都能跑起来顺手还能解决几个容易踩的坑。1. 整体思路与方案选型1.1 核心需求解析在动手写代码之前先想清楚我们到底要解决什么问题。原始需求就一句话给一段音频或视频让程序自动把里面的人声转成文本。这个需求背后其实藏着几个需要确认的细节音频来源是什么是干净的录音文件还是带背景音的视频这决定了要不要做前期处理。语言是什么中文、英文还是中英混杂这直接关系到模型选型。输出形式是什么一段纯文本还是带时间轴的逐句字幕如果要剪辑字幕时间戳必不可少。数据隐私有没有要求录音内容可能是内部会议或访谈材料能否上传云端API很关键。这些问题看着琐碎但直接影响最终方案设计。我之前最开始做语音转写时图省事直接用在线API结果传了几十段访谈录音上去虽然方便但想想其实有泄露风险。后来改成完全本地部署的开源方案既满足隐私要求又省去了按分钟计费的费用这也是为什么这篇文章的主角不是那些云服务而是一个能跑在自己机器上的开源模型。1.2 为什么选择 Whisper 这套方案如果你搜过 Python 语音识别大概率会碰到 SpeechRecognition、Vosk、Whisper、FunASR 这些库。我实际对比使用之后目前最推荐的是 OpenAI 开源的 Whisper 模型以及它的 Python 包openai-whisper。原因有几点识别准确率高尤其是对中文的支持比老牌的 SpeechRecognition Google Web Speech API 好出一个量级本地运行音频文件不需要上传到第三方服务器隐私可控自带语音检测和语言识别长音频也能处理还能直接输出带时间戳的 JSON、SRT 字幕格式安装和使用链路简单一条 pip 命令加十几行代码就能跑通第一版。当然Whisper 也不是没有短板。它比较吃资源尤其是大模型在 CPU 上跑长音频会有点慢另外如果音频里有明显背景音乐或多人重叠说话效果会打折扣。这些后续都会讲到应对办法。如果你只是想转个三五分钟的短视频用默认的base或small模型完全够用速度也快。2. 环境准备从 Python 安装到依赖补齐2.1 Python 环境怎么选想跑这套代码电脑上得先有 Python 环境。现在 Python 最新版本可能已经出到 3.13但这里我建议用 3.9 ~ 3.11 之间的稳定版本因为部分深度学习依赖对最新版 Python 的适配会有滞后。如果你机器上已经装了 Python可以在终端里输入以下命令确认版本python --version如果提示找不到命令或者版本太低就先去 Python 官网下载对应系统的安装包。安装时有一个容易被忽略的细节一定要勾选“Add Python to PATH”不然之后在终端里执行pip命令会各种报错。另外不建议直接在全局环境装包最好给这个项目单独建一个虚拟环境否则不同项目的依赖互相打架能把人搞疯。python -m venv speech-env source speech-env/bin/activate # Linux / macOS speech-env\Scripts\activate # Windows激活后命令行前面会出现(speech-env)字样这就说明你已经在虚拟环境里了。后续所有依赖都装在这个环境里删了也不影响其他项目极度推荐养成这个习惯。2.2 安装核心依赖与 ffmpeg依赖方面核心就两个openai-whisper和它背后的 PyTorch。安装命令如下pip install openai-whisper这个包会把基础依赖拉下来但 PyTorch 需要单独根据你的硬件确认。如果你有 NVIDIA 显卡并且想用 GPU 加速建议先去 PyTorch 官网用配置器生成对应的安装命令一般长这样pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121如果没显卡直接用 CPU 版本也行就是慢一点后面会说怎么在模型大小上做权衡。还有一个很容易被忽略的组件ffmpeg。Whisper 本身不做音视频解码它依赖 ffmpeg 把 mp4、m4a、wav 等格式统一转成内部能处理的格式没有它你会直接碰到FileNotFoundError: [Errno 2] No such file or directory: ffmpeg这类报错。Windows 用户可以去 ffmpeg 官网下载编译好的二进制解压后把bin目录加到系统 PATHmacOS 用户直接brew install ffmpegLinux 用apt install ffmpeg或yum install ffmpeg就行。装完之后验证一下whisper --help ffmpeg -version两个命令都能正常输出环境就算准备好了。3. 核心实操从音频文件到文字3.1 最小可运行版本环境就绪后我们先写一个最简单的转写脚本目标是让一段音频成功变成文本。新建一个transcribe.py内容如下import whisper model whisper.load_model(base) result model.transcribe(meeting_audio.mp3) print(result[text])就这么几行。第一行加载模型第二行把音频传进去第三行打印识别结果。运行方式python transcribe.py如果一切顺利你会看到终端里先是加载模型然后开始逐段识别最终打印出整段文字。这里result[text]是纯文本result[segments]里则包含每句话的时间戳和置信度信息后面生成字幕就是靠它。我第一次跑的时候以为输出结果会直接生成一个看着像会议纪要这样的完整文本但实际打印出来后发现它其实还挺尊重原始停顿的会自然分成多行。如果后续想整理成更顺畅的文字稿可以再稍微做一下后处理。3.2 模型大小的取舍与参数解读Whisper 按大小分为tiny、base、small、medium、large几个档位。直观理解模型越大识别越准但需要的显存/内存越多、耗时越长。适配我自己的实际场景的参考建议是模型大小显存需求大约CPU 上转写 10 分钟音频耗时识别效果tiny约 1 GB2~4 分钟勉强能看适合快速测试base约 1 GB3~6 分钟流畅语音还行嘈杂环境错误多small约 2 GB8~12 分钟中文可用性大幅提升推荐日常用medium约 5 GB15~25 分钟准确率高适合访谈/课程精转large约 10 GB30 分钟以上最强效果但资源要求也最高如果你的电脑没有独立显卡建议日常就用small关键内容再用medium重新跑一遍有 8 GB 以上显存的显卡直接用medium体验会好很多。加载模型时还可以加一个参数提升效率model whisper.load_model(small, devicecuda) # 显式指定用 GPUtranscribe方法里也有几个常用参数值得说result model.transcribe( audio.mp3, languagezh, # 指定语言避免自动识别失误 tasktranscribe, # 转写任务translate 可以翻译成英文 fp16False # CPU 上必须设 False避免精度报错 )指定languagezh能显著提升中文识别稳定性尤其是在音频开头有一些静音或音乐的时候不指定容易触发错误的语言预判。fp16这个参数在 GPU 上默认是 True以加速如果是 CPU 运行必须设成 False否则可能报错或出现乱码。3.3 批量处理与字幕导出单文件能转接下来就可以考虑一次处理一批文件了。比如你有一个文件夹里面全是访谈录音想一次性全部转出文本和字幕可以这样写import whisper from pathlib import Path audio_dir Path(./recordings) output_dir Path(./output) output_dir.mkdir(exist_okTrue) model whisper.load_model(small) for audio_path in audio_dir.glob(*.mp3): print(f正在处理: {audio_path.name}) result model.transcribe(str(audio_path), languagezh, fp16False) output_path output_dir / f{audio_path.stem}.txt with open(output_path, w, encodingutf-8) as f: f.write(result[text]) # 同时导出 SRT 字幕文件 srt_path output_dir / f{audio_path.stem}.srt with open(srt_path, w, encodingutf-8) as f: for i, segment in enumerate(result[segments], start1): start format_timestamp(segment[start]) end format_timestamp(segment[end]) f.write(f{i}\n{start} -- {end}\n{segment[text].strip()}\n\n) print(f完成: {audio_path.name})这里面需要自己定义一个时间戳格式化函数把秒数转成 SRT 要求的HH:MM:SS,mmm格式def format_timestamp(seconds): milliseconds int(round(seconds * 1000)) hours, remainder divmod(milliseconds, 3600000) minutes, remainder divmod(remainder, 60000) secs, millis divmod(remainder, 1000) return f{hours:02}:{minutes:02}:{secs:02},{millis:03}跑完之后每个音频文件都会得到配套的 txt 文本和 srt 字幕。srt 文件可以直接拖进剪映、Pr 这类剪辑软件也可以上传到视频平台作为自动字幕非常方便。4. 常见问题与排查技巧实录4.1 安装或解码时报错问题一ModuleNotFoundError: No module named whisper大概率是你装包和运行脚本不在同一个 Python 环境里。先在终端里执行which python和which pip确认路径前缀一致。如果前缀不一致说明虚拟环境没有激活或者你用了 IDE 自带的解释器。问题二FileNotFoundError: [Errno 2] No such file or directory: ffmpeg这就是前面说的 ffmpeg 没有安装或者没有加入 PATH。有个快速验证方法ffmpeg -version如果命令不存在回去把 ffmpeg 装上。这一步跑不通的话后面的转写一步也走不了所以先把这个基础组件搞定。问题三音频文件后缀是 .m4a / .mp4 / .wma 等等转写报错Whisper 底层调用 ffmpeg 做解码如果解码失败大概率是该格式的编解码器缺失。最简单的办法是先用 ffmpeg 统一转成 wav 或 flacffmpeg -i input.m4a -ar 16000 -ac 1 output.wav-ar 16000是采样率-ac 1是单声道。Whisper 对 16kHz 单声道的 wav 支持最好。做这一步能解决大部分解码相关的不明报错实测非常有用。4.2 中文识别准确率不够怎么调优识别不准的原因很多最典型的几个没有显式指定languagezh模型开头被音乐或环境音带偏音频本身音量太低或者人声离麦克风远可以先做归一化ffmpeg -i input.wav -af loudnormI-16:TP-1.5:LRA11 output_norm.wav背景有持续噪声。先用 ffmpeg 做一次降噪或者用noisereduce这个库做预清理再进 Whisper模型太小。如果base效果不理想同样是这段音频用medium跑一轮识别率常常有明显的改善。从我个人经验来看大部分“识别结果像在胡言乱语”的情况都不是模型问题而是音频质量太差。以访谈场景为例如果人声清晰、背景单纯small模型已经能把绝大多数内容识别对只有当音频是从现场嘈杂环境录的才需要考虑降噪和大模型组合优化。4.3 速度太慢或显存溢出如果是 CPU 在跑速度慢是正常的。有几个立竿见影的优化换小模型base换small会明显变快但准确率有所下降把音频切块并行转写。Whisper 本身支持长音频但一个 1 小时的会议录音在 CPU 上可能要跑 20 多分钟如果切成长度大约 10 分钟的小块用多进程并行整段时间能压缩一半多显存溢出时可以在transcribe里设fp16False虽然慢一点但更省显存或者把模型换成medium而不是large很多时候 medium 和 large 的效果差距没你想象的大。另外注意如果你的显卡比较老显存不够但还想用大模型可以考虑用faster-whisper这个第三方实现它对显存占用做了优化速度也更快。不过新手阶段不建议上来就换框架先用openai-whisper跑通流程更重要。4.4 字幕时间轴对不齐或者文本里有重复内容字幕时间轴对不齐多半是原始音频经过了剪辑或者前后有比较长的静音。可以把静音部分用 ffmpeg 先去掉能小幅提升时间戳精度。如果文本里出现同一句话重复两遍一般是模型在断句边界产生了重复可以通过 post-processing 过滤掉置信度较低或文本完全相同的句段。5. 一些个人经验和下一步扩展整套流程我自己陆陆续续用了大概大半年最大的感受是脚本只是工具真正的功夫在于音频预处理和模型选型的匹配。一个好用的准则是——先拿 30 秒的音频快速跑通流程确认环境没问题再处理完整文件等批量处理的时候先跑一个小样本验证输出效果再全量运行能省下很多反复折腾的时间。另外如果你发现自己经常有语音转文字的需求可以考虑把这套逻辑封装成一个小工具留出输入目录和输出目录两个参数下次直接扔文件进去就完事。进阶一点还可以配合whisperx做说话人分离区分不同发言人或者接一个 LLM 做会议纪要自动总结。不过这些都属于“后续扩展”的范围先把基础链路跑通后续想加什么功能都顺理成章。写到这里这套基于 Python 和 Whisper 的本地语音识别转文字方案就算完整落地了。环境上优先保证 Python 版本和 ffmpeg 没问题实操上先用小模型跑通再逐步加大遇到准确率问题先查音频质量再换模型这套方法论基本能覆盖绝大多数实际场景。按这个路子走一遍以后手里的录音和视频素材都能变成干净的文字稿和字幕文件。本文还有配套的精品资源点击获取
返回列表