最近在做音频转录项目时,试了市面上几款语音识别服务,要么按时长收费太贵,要么准确率不够理想。后来发现 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/Linuxpython3 --version
# Windowspython --version如果没有安装,推荐使用 Anaconda:
# 创建虚拟环境conda create -n whisper python=3.10conda activate whisper安装 FFmpeg
Whisper 依赖 FFmpeg 处理音频文件:
# macOSbrew install ffmpeg
# Ubuntu/Debiansudo 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.8pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# CUDA 12.1pip 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 |
|---|---|---|---|---|---|
| tiny | 39M | ~1GB | ~32x | 5.0% | 12.1% |
| base | 74M | ~1GB | ~16x | 3.4% | 8.4% |
| small | 244M | ~2GB | ~6x | 2.3% | 5.4% |
| medium | 769M | ~5GB | ~2x | 1.7% | 3.8% |
| large/large-v3 | 1550M | ~10GB | 1x | 1.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 whisperimport osfrom 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 whisperimport pyaudioimport waveimport tempfile
model = whisper.load_model("large-v3-turbo")
# 录音参数CHUNK = 1024FORMAT = pyaudio.paInt16CHANNELS = 1RATE = 16000RECORD_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 torchimport 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-whisperfrom 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 Poolimport 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 grimport 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 whisperfrom 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 whisperimport osfrom 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. 环境准备:Python 3.8-3.11 + FFmpeg
- 2. 安装 Whisper:
pip install openai-whisper - 3. 选择模型:small 性价比最高,专业场景用 medium/large
- 4. 基础使用:命令行或 Python 脚本调用
- 5. 性能优化:GPU 加速 + faster-whisper 量化
- 6. Web 部署:Gradio 快速搭建界面
实测效果:
- • 中文识别准确率:95%+(medium 模型)
- • 英文识别准确率:98%+
- • 处理速度:small 模型约 1 分钟音频耗时 10 秒(GPU)
相比商业 API,Whisper 本地部署的优势在于:
- • 完全免费,无使用限制
- • 数据隐私,音频不上传
- • 可定制化,支持微调
如果你有大量音频转录需求,Whisper 绝对是最佳选择。
相关资源:
- • Whisper GitHub: https://github.com/openai/whisper
- • faster-whisper: https://github.com/guillaumekln/faster-whisper
- • Whisper 论文: https://arxiv.org/abs/2212.04356
部分信息可能已经过时







