OpenAI Whisper 语音识别
bash python --version
### 2.2 安装 Whisper
推荐使用 `pip` 安装 OpenAI 官方发行版:
```bash
pip install openai-whisper
💡 提示:如果你希望使用更快的 GPU 加速,可提前安装对应版本的 PyTorch,然后 Whisper 会自动检测 GPU。
2.3 安装 FFmpeg
Whisper 依赖 FFmpeg 读取各种格式的音频文件。请按系统类型安装:
- macOS(使用 Homebrew):
brew install ffmpeg - Ubuntu / Debian:
sudo apt update && sudo apt install ffmpeg - Windows:
从 ffmpeg.org 下载编译好的二进制文件,并将
bin目录加入系统环境变量PATH。
安装完成后,在终端输入 ffmpeg -version 验证是否成功。
3. 快速上手
3.1 命令行直接使用
Whisper 提供了最简单的命令行接口。只需一条命令即可完成语音转录:
whisper audio.mp3 --model base
audio.mp3:替换为你自己的音频文件。--model base:使用base模型(初次运行会自动下载)。
常用输出文件会保存在当前目录,包括 .txt、.srt(字幕)、.vtt 和 .json 等。
3.2 Python 代码调用
在代码中调用 Whiper 同样十分简单:
import whisper
model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])
如果想直接获取带时间戳的段落:
for segment in result["segments"]:
print(f"[{segment['start']:.2f}s -> {segment['end']:.2f}s] {segment['text']}")
4. 模型选择与性能对比
Whisper 提供了五种不同大小的模型,越大的模型精度越高,但速度越慢、占用内存越多。
| 模型名 | 参数量 | 所需显存 | 相对速度 | 英文识别准确率 |
|---|---|---|---|---|
| tiny | 39 M | ~1 GB | 快 | 较好 |
| base | 74 M | ~1 GB | 快 | 好 |
| small | 244 M | ~2 GB | 中等 | 很好 |
| medium | 769 M | ~5 GB | 慢 | 极好 |
| large | 1550 M | ~10 GB | 很慢 | 最佳 |
建议:
- 测试原型或低配置设备上可以使用
tiny或base。 - 生产环境推荐
small或medium,平衡速度与精度。 - 极致精度需求(如专业字幕制作)请使用
large。
使用命令行指定模型:
whisper audio.wav --model small
Python 中同样传参:
model = whisper.load_model("medium")
5. 高级功能
5.1 语言指定与翻译
Whisper 会自动检测语言,但你可以手动指定源语言以提高效率或强制转录语言。使用 --language 参数:
whisper audio.wav --language Japanese
若需要将非英语语音直接翻译为英语,使用 --task translate:
whisper japanese_speech.wav --task translate
Python 中对应参数:
result = model.transcribe("audio.wav", language="ja", task="translate")
5.2 控制输出格式
命令行可通过 --output_format 指定输出文件类型,例如只生成带时间戳的 JSON:
whisper audio.wav --output_format json
可用格式:txt, vtt, srt, tsv, json, all(默认全部输出)。
5.3 获取词级时间戳
在 Python 中,你可以获取每个单词的精确时间戳。注意此功能部分模型支持有限,最好使用 medium 或 large 并设置 word_timestamps=True:
result = model.transcribe("audio.wav", word_timestamps=True)
for segment in result["segments"]:
for word in segment["words"]:
print(f"{word['word']} : {word['start']} - {word['end']}")
5.4 调整解码策略
通过 temperature、beam_size 等参数可控制解码行为。默认已调整至较优状态,通常无需修改。示例:
result = model.transcribe("audio.wav", temperature=0.0, beam_size=5)
temperature=0.0会使输出确定化,适合对一致性要求高的场景。beam_size增大可能提升质量,但会增加计算时间。
6. 处理长音频与大文件
Whisper 内部会自动将长音频分段并处理相邻段的重叠部分,以避免分词断裂。你也可以自定义分段参数:
result = model.transcribe(
"long_audio.mp3",
verbose=False,
# 每段最长 30 秒,段间重叠 2 秒
max_segment_length=30,
stride=(2, 2)
)
对于非常大的文件,建议先用 ffmpeg 转换为 16kHz 单声道 WAV,以减少解码负担:
ffmpeg -i input.mp3 -ac 1 -ar 16000 output.wav
7. 常见问题与优化
7.1 内存不足怎么办?
- 使用更小的模型(如
base)。 - 用
fp16=False以 float32 运行,可减少显存占用但速度略降:model = whisper.load_model("small") model.transcribe("audio.wav", fp16=False)