OpenAI Whisper 语音识别

FreeGuideOnline 18阅读 2026-07-10

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 很慢 最佳

建议

  • 测试原型或低配置设备上可以使用 tinybase
  • 生产环境推荐 smallmedium,平衡速度与精度。
  • 极致精度需求(如专业字幕制作)请使用 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 中,你可以获取每个单词的精确时间戳。注意此功能部分模型支持有限,最好使用 mediumlarge 并设置 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 调整解码策略

通过 temperaturebeam_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)