mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
1308 字
4 分钟
Whisper语音转文字

最近在做音频转录项目时,试了市面上几款语音识别服务,要么按时长收费太贵,要么准确率不够理想。后来发现 OpenAI 开源的 Whisper 模型,本地部署后效果惊艳——中英文混合识别准确率能达到 95% 以上,而且完全免费。

今天就把完整的部署流程和踩过的坑分享出来,让你 30 分钟内搞定本地语音转文字服务。

Whisper 是 OpenAI 在 2022 年开源的自动语音识别(ASR)模型,基于 68 万小时的多语言数据训练,支持 99 种语言的转录和翻译。

核心优势:

  • • 多语言支持强大,中英文识别准确率高
  • • 开源免费,可本地部署保护隐私
  • • 模型分级灵活(tiny/base/small/medium/large)
  • • 自动标点、时间戳、说话人识别

适用场景:

  • • 会议录音转文字
  • • 视频字幕生成
  • • 播客内容整理
  • • 语音笔记转录

环境准备#

系统要求#

# 推荐配置
- CPU: 4 核以上
- 内存: 8GB+(large 模型需 16GB+)
- 硬盘: 10GB 可用空间
- 系统: Windows/macOS/Linux

安装 Python 环境#

Whisper 需要 Python 3.8-3.11 版本:

# macOS/Linux
python3 --version
# Windows
python --version

如果没有安装,推荐使用 Anaconda:

# 创建虚拟环境
conda create -n whisper python=3.10
conda activate whisper

安装 FFmpeg#

Whisper 依赖 FFmpeg 处理音频文件:

# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt update && sudo apt install ffmpeg
# Windows
# 下载 https://ffmpeg.org/download.html
# 解压后添加到系统 PATH

验证安装:

ffmpeg -version

安装 Whisper#

方式一:pip 安装(推荐)#

pip install -U openai-whisper

方式二:从源码安装#

pip install git+https://github.com/openai/whisper.git

安装加速库(强烈推荐)#

不管是 Windows/Linux 的 NVIDIA 显卡,还是 Mac 的 Apple Silicon 芯片,开启硬件加速都能大幅提速!

对于 Windows/Linux (NVIDIA 显卡):

# CUDA 11.8
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# CUDA 12.1
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

对于 macOS (Apple M1/M2/M3/M4/M5 芯片):

Mac 自带 MPS(Metal Performance Shaders)硬件加速支持,直接安装即可:

pip install torch torchvision torchaudio

验证硬件加速可用(在命令行中直接运行):

# 验证 CUDA (N卡) 或 MPS (Mac)
python3 -c 'import torch; print("CUDA 可用:", torch.cuda.is_available()); print("MPS 可用:", torch.backends.mps.is_available())'

模型选择#

Whisper 提供 5 种规模的模型,按需选择:

模型参数量显存占用相对速度英文 WER多语言 WER
tiny39M~1GB~32x5.0%12.1%
base74M~1GB~16x3.4%8.4%
small244M~2GB~6x2.3%5.4%
medium769M~5GB~2x1.7%3.8%
large/large-v31550M~10GB1x1.4%3.0%

选择建议:

  • • 快速测试:tiny/base
  • • 日常使用:small(性价比最高)
  • • 专业场景:medium/large(特别是 large-v3,中英混排和口音识别极佳)

💡 Mac 用户特别提示:由于 Apple M 系列芯片采用统一内存架构,只要你的 Mac 内存大于 16GB(如 24GB 内存的 M5),跑起 ~10GB 的 large-v3 模型可谓游刃有余,配合 MPS 加速,强烈建议直接上 large 体验极致准确率!

首次运行会自动下载模型到 ~/.cache/whisper/

基础使用#

命令行转录#

最简单的使用方式:

# 转录音频文件
whisper audio.mp3
# 指定模型
whisper audio.mp3 --model medium
# 指定语言(加速识别)
whisper audio.mp3 --language Chinese
# 输出字幕文件
whisper audio.mp3 --output_format srt
# 翻译成英文
whisper audio.mp3 --task translate

Python 脚本调用#

创建 transcribe.py

import whisper
# 加载模型
model = whisper.load_model("large-v3-turbo")
# 转录音频
result = model.transcribe("../audio.mp3", language="zh")
# 输出结果
print(result["text"])
# 带时间戳的分段结果
for segment in result["segments"]:
print(f"[{segment['start']:.2f}s -> {segment['end']:.2f}s] {segment['text']}")

运行:

python transcribe.py

批量处理脚本#

处理多个音频文件:

import whisper
import os
from pathlib import Path
model = whisper.load_model("large-v3-turbo")
# 音频文件夹
audio_dir = Path("./audios")
output_dir = Path("./transcripts")
output_dir.mkdir(exist_ok=True)
# 支持的格式
audio_formats = [".mp3", ".wav", ".m4a", ".flac"]
for audio_file in audio_dir.iterdir():
if audio_file.suffix.lower() in audio_formats:
print(f"正在处理: {audio_file.name}")
result = model.transcribe(str(audio_file), language="zh")
# 保存文本
output_file = output_dir / f"{audio_file.stem}.txt"
with open(output_file, "w", encoding="utf-8") as f:
f.write(result["text"])
print(f"完成: {output_file.name}\n")

进阶技巧#

1. 提升识别准确率#

result = model.transcribe(
"audio.mp3",
language="zh",
initial_prompt="这是一段关于人工智能技术的讨论", # 提供上下文
temperature=0.0, # 降低随机性
beam_size=5, # 增加束搜索宽度
best_of=5, # 多次采样取最佳
fp16=False # CPU 模式下禁用半精度
)

2. 处理长音频#

Whisper 默认处理 30 秒片段,长音频会自动分段:

# 调整分段参数
result = model.transcribe(
"long_audio.mp3",
verbose=True, # 显示进度
condition_on_previous_text=True, # 利用上文提升连贯性
compression_ratio_threshold=2.4, # 过滤低质量片段
logprob_threshold=-1.0 # 置信度阈值
)

3. 生成字幕文件#

import whisper
model = whisper.load_model("large-v3-turbo")
result = model.transcribe("video.mp4", language="zh")
# 生成 SRT 字幕
from whisper.utils import WriteSRT
with open("subtitle.srt", "w", encoding="utf-8") as srt:
WriteSRT(output_dir=".")(result)

4. 实时语音识别#

结合 PyAudio 实现实时转录:

import whisper
import pyaudio
import wave
import tempfile
model = whisper.load_model("large-v3-turbo")
# 录音参数
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
RECORD_SECONDS = 5
p = pyaudio.PyAudio()
stream = p.open(
format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK
)
print("开始录音...")
while True:
frames = []
for _ in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
# 保存临时文件
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as temp_audio:
wf = wave.open(temp_audio.name, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
# 转录
result = model.transcribe(temp_audio.name, language="zh")
print(f"识别结果: {result['text']}")

性能优化#

硬件加速 (CUDA / Mac MPS)#

不要让你的 CPU 狂转!一定要利用显卡或 Apple Silicon 的硬件加速:

import torch
import whisper
# 自动检测可用硬件加速
if torch.cuda.is_available():
device = "cuda"
print(f"使用 NVIDIA GPU: {torch.cuda.get_device_name(0)}")
elif torch.backends.mps.is_available():
device = "mps"
print("使用 Apple M 系列芯片 MPS 加速")
else:
device = "cpu"
print("未检测到硬件加速,使用 CPU (速度较慢)")
# 加载模型到对应设备
model = whisper.load_model("large-v3-turbo", device=device)

量化加速#

使用 faster-whisper 获得 4 倍速度提升:

pip install faster-whisper
from faster_whisper import WhisperModel
# 使用 int8 量化
model = WhisperModel("large-v3-turbo", device="cuda", compute_type="int8")
segments, info = model.transcribe("audio.mp3", language="zh")
for segment in segments:
print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")

批处理优化#

使用多进程处理大量文件:

from multiprocessing import Pool
import whisper
def transcribe_file(audio_path):
model = whisper.load_model("large-v3-turbo")
result = model.transcribe(audio_path, language="zh")
return audio_path, result["text"]
if __name__ == "__main__":
audio_files = ["audio1.mp3", "audio2.mp3", "audio3.mp3"]
with Pool(processes=4) as pool:
results = pool.map(transcribe_file, audio_files)
for path, text in results:
print(f"{path}: {text[:100]}...")

常见问题#

1. 中文识别不准确#

解决方案:

  • • 明确指定语言:--language Chinese
  • • 使用 medium 或 large 模型
  • • 提供 initial_prompt 上下文
  • • 确保音频质量清晰

2. 内存不足#

解决方案:

  • • 使用更小的模型(tiny/base)
  • • 启用 fp16 半精度:model.transcribe(..., fp16=True)
  • • 分段处理长音频
  • • 使用 faster-whisper 的量化版本

3. 速度太慢#

解决方案:

  • • 确保硬件加速已开启:Windows 安装 CUDA 版 PyTorch,Mac 确保调用了 device="mps"
  • • 使用 faster-whisper 替代
  • • 降低模型规模
  • • 明确指定语言避免自动检测

4. 时间戳不准确#

解决方案:

result = model.transcribe(
"audio.mp3",
word_timestamps=True, # 启用词级时间戳
prepend_punctuations="\"'"¿([{-",
append_punctuations="\"'.。,,!!??::")]}、"
)

Web 界面部署#

使用 Gradio 快速搭建 Web 服务:

pip install gradio

创建 app.py

import gradio as gr
import whisper
model = whisper.load_model("large-v3-turbo")
def transcribe_audio(audio_file, language):
result = model.transcribe(audio_file, language=language)
return result["text"]
demo = gr.Interface(
fn=transcribe_audio,
inputs=[
gr.Audio(type="filepath", label="上传音频"),
gr.Dropdown(["zh", "en", "ja", "ko"], value="zh", label="语言")
],
outputs=gr.Textbox(label="转录结果"),
title="Whisper 语音转文字",
description="上传音频文件,自动转换为文字"
)
demo.launch(server_name="0.0.0.0", server_port=7860)

运行:

python app.py

访问 http://localhost:7860 即可使用。

Docker 部署#

创建 Dockerfile

FROM python:3.10-slim
WORKDIR /app
RUN apt-get update && apt-get install -y ffmpeg git
RUN pip install openai-whisper gradio
COPY app.py .
EXPOSE 7860
CMD ["python", "app.py"]

构建并运行:

docker build -t whisper-app .
docker run -p 7860:7860 whisper-app

实战案例#

案例 1:会议录音转文字#

import whisper
from datetime import datetime
model = whisper.load_model("medium")
# 转录会议录音
result = model.transcribe(
"meeting.m4a",
language="zh",
initial_prompt="这是一场关于产品规划的会议讨论",
temperature=0.0
)
# 生成会议纪要
output = f"""
# 会议纪要
时间:{datetime.now().strftime('%Y-%m-%d %H:%M')}
## 完整记录
{result['text']}
## 分段内容
"""
for i, segment in enumerate(result['segments'], 1):
output += f"\n{i}. [{segment['start']:.0f}s] {segment['text']}"
with open("meeting_notes.md", "w", encoding="utf-8") as f:
f.write(output)

案例 2:视频批量生成字幕#

import whisper
import os
from pathlib import Path
model = whisper.load_model("small")
video_dir = Path("./videos")
for video in video_dir.glob("*.mp4"):
print(f"处理: {video.name}")
result = model.transcribe(
str(video),
language="zh",
task="transcribe"
)
# 生成 SRT 字幕
srt_path = video.with_suffix(".srt")
with open(srt_path, "w", encoding="utf-8") as f:
for i, segment in enumerate(result['segments'], 1):
start = format_timestamp(segment['start'])
end = format_timestamp(segment['end'])
text = segment['text'].strip()
f.write(f"{i}\n")
f.write(f"{start} --> {end}\n")
f.write(f"{text}\n\n")
print(f"字幕已保存: {srt_path.name}\n")
def format_timestamp(seconds):
hours = int(seconds // 3600)
minutes = int((seconds % 3600) // 60)
secs = int(seconds % 60)
millis = int((seconds % 1) * 1000)
return f"{hours:02d}:{minutes:02d}:{secs:02d},{millis:03d}"

总结#

Whisper 本地部署的完整流程:

  1. 1. 环境准备:Python 3.8-3.11 + FFmpeg
  2. 2. 安装 Whisperpip install openai-whisper
  3. 3. 选择模型:small 性价比最高,专业场景用 medium/large
  4. 4. 基础使用:命令行或 Python 脚本调用
  5. 5. 性能优化:GPU 加速 + faster-whisper 量化
  6. 6. Web 部署:Gradio 快速搭建界面

实测效果:

  • • 中文识别准确率:95%+(medium 模型)
  • • 英文识别准确率:98%+
  • • 处理速度:small 模型约 1 分钟音频耗时 10 秒(GPU)

相比商业 API,Whisper 本地部署的优势在于:

  • • 完全免费,无使用限制
  • • 数据隐私,音频不上传
  • • 可定制化,支持微调

如果你有大量音频转录需求,Whisper 绝对是最佳选择。


相关资源:

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00