Whisper 模型实战:多语言语音识别与翻译

FreeGuideOnline 最新 2026-06-19

什么是 Whisper

Whisper 是 OpenAI 开源的多语言语音识别与翻译模型,基于大规模弱监督训练。它能够将语音转录为文本,并支持近百种语言。除了识别,Whisper 还能直接将非英语语音翻译成英语文本,适用于会议记录、内容创作、无障碍工具等场景。

本教程将带你快速上手 Whisper,完成多语言语音识别以及翻译任务。


环境准备

在开始之前,确保你的系统安装了 Python 3.8 或更高版本,并且已经配置好 pip。推荐使用虚拟环境避免依赖冲突。

安装依赖

pip install openai-whisper

如果使用 GPU 加速,请确保已安装 CUDA 和 cuDNN,并安装支持 GPU 的 PyTorch 版本。你可以通过以下命令验证:

python -c "import torch; print(torch.cuda.is_available())"

此外,Whisper 需要 ffmpeg 处理多种音频格式。安装方式:

  • macOS: brew install ffmpeg
  • Ubuntu/Debian: sudo apt update && sudo apt install ffmpeg
  • Windows: 从 ffmpeg.org 下载后添加到系统路径。

快速开始:加载模型

Whisper 提供多种模型尺寸,在准确度和速度之间取得平衡:

模型 参数量 显存占用(约) 相对速度 适用场景
tiny 39M ~1 GB 最快 低资源设备、实时预览
base 74M ~1 GB 较快 一般精度需求
small 244M ~2 GB 中等 平衡速度与准确度
medium 769M ~5 GB 较慢 高质量转录
large 1550M ~10 GB 最慢 最高精度、多语言翻译

加载模型只需一行代码:

import whisper

model = whisper.load_model("base")  # 可替换为 tiny, small, medium, large

模型会在第一次使用时自动下载。


语音识别(转录)

使用 transcribe() 方法将音频转换为文本。最基本用法:

result = model.transcribe("audio.mp3")
print(result["text"])

返回结果结构

result 是一个字典,包含:

  • text:完整转录文本。
  • segments:带时间戳的片段列表,每个片段有 startendtext
  • language:检测到的语言代码(如 zhen)。

示例:打印带时间戳的片段。

for segment in result["segments"]:
    print(f"[{segment['start']:.2f}s -> {segment['end']:.2f}s] {segment['text']}")

多语言语音识别

Whisper 能自动检测语言并进行转录。你无需事先指定语言,但也可以强制设置语言以提升准确率:

# 自动检测语言
result = model.transcribe("french_audio.wav")
print(f"检测语言: {result['language']}")
print(result["text"])

# 强制指定法语(fr)
result = model.transcribe("french_audio.wav", language="fr")

支持的语言代码可在官方文档查找,常见如:

  • 中文:zh
  • 英文:en
  • 日文:ja
  • 韩文:ko
  • 法文:fr
  • 德文:de

将非英语语音翻译为英语

Whisper 可以将任何语言的语音直接翻译成英文文本。使用 task="translate" 参数:

result = model.transcribe("spanish_speech.mp3", task="translate")
print(result["text"])  # 输出英文翻译

翻译任务会自动忽略 language 参数(始终输出英文),且不能与转录任务同时执行。适用场景:快速生成英文摘要、跨语言会议记录。


高级选项与性能优化

音频预处理

确保音频为单声道、16kHz 采样率,可获得最佳效果。可使用 ffmpeg 转换:

ffmpeg -i input.wav -ar 16000 -ac 1 output.wav

分段与上下文

默认情况下,Whisper 以 30 秒为窗口处理音频,并使用 VAD(语音活动检测)分割。对于长音频,通过 word_timestampscondition_on_previous_text 可提升连贯性:

result = model.transcribe(
    "lecture.mp3",
    word_timestamps=True,
    condition_on_previous_text=True,
)

调整静音修剪

vad_filter 参数开启静音修剪,vad_parameters 可微调:

result = model.transcribe(
    "interview.wav",
    vad_filter=True,
    vad_parameters=dict(min_silence_duration_ms=500),
)

提升非英语转录精度

  • 使用 large-v3 模型。
  • 明确指定 language
  • 设置 temperature=0 降低随机性,产生更确定的结果。
  • 使用 initial_prompt 提供上下文词汇(如专有名词)。
result = model.transcribe(
    "tech_talk.wav",
    language="zh",
    temperature=0.0,
    initial_prompt="专业词汇:机器学习, 神经网络, 大模型"
)

常见问题

如何处理 GPU 显存不足?

  • 使用较小的模型(如 basesmall)。
  • 调用 model.transcribe(..., fp16=False) 在 CPU 上运行(速度较慢)。
  • 分批处理长音频。

识别结果出现重复短语怎么办?

这是 Whisper 偶尔会出现的幻觉问题。尝试:

  • 降低 temperature(如 0.0)。
  • 关闭 condition_on_previous_text(设为 False)。
  • 使用 no_speech_threshold 过滤静音区域。
result = model.transcribe("audio.wav", condition_on_previous_text=False, temperature=0.0)

音频包含多个人说话怎么办?

Whisper 本身不分说话人。可用第三方工具(如 PyAnnote)结合的 WhisperX 项目实现说话人分离。


总结

通过本教程,你已掌握:

  • 环境配置与模型加载。
  • 基础语音识别与带时间戳的结果处理。
  • 多语言识别与强制语言指定。
  • 语音到英文的直接翻译。
  • 适用于长音频和高精度场景的高级选项。

Whisper 开箱即用,适合嵌入到各类应用中。你可以进一步探索 WhisperX 获取文字对齐和说话人分割能力,或结合 FFmpeg 构建完整的语音处理流水线。