Whisper 语音识别实战:3 条命令把本地音频转成文字
朋友想把一段会议录音转成文字和字幕,又不想搭后端、申请 ASR 接口,我试了 Whisper 语音识别这套方案。纯本地运行,pip 装完就能用,没有网络依赖,转出来的文本格式随你挑。
语音转文字能做什么
先说它能干什么,免得你拿错工具:
- 多语言语音识别:98 种语言直接转写,不指定语言时会基于前 30 秒自动检测。适合做播客、访谈、课程录音的转文字。
- 语音翻译成英文:
--task translate把任意语种音频直接翻成英文文本,转写和翻译一个模型搞定。适合整理多语言素材。 - 多任务统一:语言识别、时间戳对齐都内建,一个序列到序列模型替掉了传统语音处理流水线里的多个环节。
5 分钟跑通环境
第 1 步,装 ffmpeg。Whisper 靠它解码音频,缺了会在跑的时候直接报错:
# Ubuntu / Debian
sudo apt update && sudo apt install ffmpeg
# macOS
brew install ffmpeg
第 2 步,安装 Whisper:
git clone https://gitcode.com/GitHub_Trending/whisp/whisper
cd whisper
pip install -r requirements.txt
装完敲 whisper --help 能看到一长串参数,说明 CLI 就绪。
第 3 步,首次调用。仓库自带测试音频 tests/jfk.flac:
whisper jfk.flac
首次运行会自动下载模型并缓存到 ~/.cache/whisper。跑完这步你应该在当前目录看到同名的 .txt、.srt、.vtt、.json 等文件,控制台还会打印检测到的语言。
第 4 步,换 Python API 验证:
import whisper
model = whisper.load_model("turbo", device="cpu")
result = model.transcribe("jfk.flac")
print(result["text"])
控制台打出 JFK 那段英文演讲的转写,就算全部跑通。
影响体验最大的 4 个配置项
| 配置项 | 推荐值 | 为什么这么设 |
|---|---|---|
--model | turbo(默认) | 速度约 8 倍、精度接近 large;没 GPU 就换 small |
--language | 知道就说,如 Chinese | 不指定会基于前 30 秒自动检测,中英混杂时手动指定更稳 |
--task | transcribe / translate | 要翻译必须显式指定,且 turbo 不支持翻译任务 |
--output_format | srt / json | 默认输出 6 种格式,做字幕挑 srt,程序消费挑 json |
实际跑下来会踩的坑
一、报 FileNotFoundError: ffmpeg。 系统没装 ffmpeg,Whisper 用它解码所有输入音频。按上面第 1 步装好重跑即可。
二、用 turbo 翻译日语,出来的还是日语原文。 turbo 是 large-v3 的加速裁剪版,根本没训过翻译任务,--task translate 对它不生效。想翻译就把模型换成 medium 或 large。
三、音频里的长静音被转写出一堆重复文本(幻觉)。 弱监督训练的模型遇到无语音片段会"脑补"内容。把 --no_speech_threshold 调低,或直接用 --clip_timestamps 跳过静音段。
💡 还有一个隐性坑:没有 CUDA 时 Python API 的 load_model 会默认选 GPU 设备,得显式传 device="cpu",CLI 则会自动回退。
接下来可以试试
- 加
--word_timestamps True开词级时间戳,字幕可以精确到每个字; - 用
--initial_prompt喂一段领域词汇,专有名词识别错误率肉眼可见地下降; - 想深入底层,notebooks/LibriSpeech.ipynb 里有
detect_language()和decode()的完整调用流程,照着改就行。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




