
Whisper 音频要求:支持格式与规格完整指南
Eric King
Author
理解 Whisper 的音频要求对获得最佳转写准确度至关重要。Whisper 很灵活,能处理多种音频格式;遵循最佳规格可发挥其全部性能。
本指南涵盖所有音频要求、支持格式、技术规格,以及为 Whisper 转写准备音频文件的最佳实践。
支持的音频格式
Whisper 通过 FFmpeg 支持广泛的音频与视频格式。完整列表如下:
音频格式
| 格式 | 扩展名 | 说明 |
|---|---|---|
| WAV | .wav | ✅ 首选,无损 |
| MP3 | .mp3 | ✅ 最常见 |
| FLAC | .flac | ✅ 无损,压缩效果好 |
| M4A | .m4a | ✅ Apple 格式,AAC 编解码器 |
| AAC | .aac | ✅ 高压缩质量 |
| OGG | .ogg | ✅ 开源格式 |
| OPUS | .opus | ✅ 低延迟,适合网络 |
| WMA | .wma | ⚠️ 较少见 |
| AMR | .amr | ⚠️ 音质较低,电话录音 |
视频格式(提取音频)
| 格式 | 扩展名 | 说明 |
|---|---|---|
| MP4 | .mp4 | ✅ 最常见视频格式 |
| AVI | .avi | ✅ 较旧但仍支持 |
| MKV | .mkv | ✅ 容器格式 |
| MOV | .mov | ✅ QuickTime |
| WebM | .webm | ✅ 网络视频 |
| FLV | .flv | ⚠️ 旧版 Flash |
重要: Whisper 会自动从视频文件中提取音频,因此可以直接上传视频。
采样率要求
最佳采样率:16 kHz
Whisper 在处理前会将所有音频内部重采样为 16 kHz 单声道。这是语音识别的最佳采样率。
支持的采样率
Whisper 接受任意采样率,但请注意:
| 输入采样率 | Whisper 处理 | 建议 |
|---|---|---|
| 8 kHz | 重采样至 16 kHz | ✅ 电话通话,可接受 |
| 16 kHz | 直接使用 | ✅ 最佳,无需重采样 |
| 22.05 kHz | 重采样至 16 kHz | ✅ 质量良好 |
| 44.1 kHz | 重采样至 16 kHz | ✅ CD 质量,可以 |
| 48 kHz | 重采样至 16 kHz | ✅ 专业音频,可以 |
| 96 kHz | 重采样至 16 kHz | ⚠️ 不必要,文件更大 |
要点: 更高的采样率不会提高 Whisper 的准确度。模型在 16 kHz 音频上训练;提供 16 kHz 输入可避免不必要的重采样和更大文件。
最佳实践
# Convert audio to 16 kHz before processing (optional optimization)
import ffmpeg
def convert_to_16khz(input_file, output_file):
stream = ffmpeg.input(input_file)
stream = ffmpeg.output(
stream,
output_file,
acodec='pcm_s16le',
ac=1, # Mono
ar=16000 # 16 kHz
)
ffmpeg.run(stream, overwrite_output=True)
位深度要求
支持的位深度
| 位深度 | 状态 | 说明 |
|---|---|---|
| 8 位 | ✅ 支持 | 质量较低,不推荐 |
| 16 位 | ✅ 推荐 | 标准,足够 |
| 24 位 | ✅ 支持 | 专业用途,文件更大 |
| 32 位浮点 | ✅ 支持 | 录音室级,多数情况过剩 |
建议: 16 位 PCM 是标准,对语音识别质量已很充足。更高位深度不会提高转写准确度。
声道配置:单声道与立体声
单声道(推荐)
Whisper 在内部以单声道处理音频,因此单声道输入最优。
优点:
- 文件更小
- 处理更快
- 无需混音
- 适合单人内容
适合单声道的场景:
- 单人录音
- 电话
- 单人主持播客
- 大多数转写任务
立体声(支持)
立体声文件会自动转为单声道(取平均或选一轨)。
立体声有用的情况:
- 不同说话人在不同声道(少见)
- 原始为立体声(自动转换)
最佳实践: 若可控,处理前将立体声转为单声道:
import ffmpeg
# Convert stereo to mono
stream = ffmpeg.input('stereo_audio.wav')
stream = ffmpeg.output(
stream,
'mono_audio.wav',
ac=1 # Mono channel
)
ffmpeg.run(stream, overwrite_output=True)
文件大小限制
实际限制
Whisper 没有严格的文件大小上限,但实际中需考虑:
| 文件大小 | 处理时间 | 建议 |
|---|---|---|
| < 10 MB | 秒级 | ✅ 理想 |
| 10–100 MB | 分钟级 | ✅ 良好 |
| 100–500 MB | 10–30 分钟 | ⚠️ 考虑分块 |
| > 500 MB | 30 分钟以上 | ⚠️ 必须分块 |
内存
大文件需要更多 RAM/显存:
- base 模型: 约 1–2 GB VRAM
- small 模型: 约 2–3 GB VRAM
- medium 模型: 约 5–6 GB VRAM
- large 模型: 约 10–12 GB VRAM
最佳实践: 文件超过 100 MB 时应分块(见下文)。
时长限制
建议时长
| 时长 | 状态 | 说明 |
|---|---|---|
| < 30 分钟 | ✅ 最佳 | 直接处理 |
| 30–60 分钟 | ✅ 良好 | 可能需要分块 |
| 1–2 小时 | ⚠️ 建议分块 | 分块往往更准确 |
| > 2 小时 | ⚠️ 必须分块 | 稳定性所需 |
为何要分割长音频?
- 内存限制: 避免内存不足
- 更好准确度: 较短块更易保持上下文
- 更快处理: 可并行
- 容错: 一块失败时其他块仍可能成功
分块策略:
# Split long audio into 30-60 second chunks with 5-10 second overlap
def chunk_audio(audio_path, chunk_length=60, overlap=5):
# Implementation: split audio into segments
# Process each chunk separately
# Merge results with timestamps
pass
音质要求
最低标准
为获得可接受的准确度,音频应满足:
| 因素 | 最低 | 最佳 |
|---|---|---|
| 信噪比 | > 10 dB | > 20 dB |
| 码率(MP3) | ≥ 64 kbps | ≥ 128 kbps |
| 音量 | 可听 | 归一化至 −3 dB |
| 背景噪声 | 尽量少 | 无 |
| 回声/混响 | 尽量少 | 无 |
质量检查清单
转写前请确认:
- ✅ 语音清晰: 说话人清楚可辨
- ✅ 噪声最小: 背景不盖过人声
- ✅ 音量稳定: 无突变
- ✅ 无削波: 无失真或过载
- ✅ 麦克风良好: 录音设备合格
编解码器要求
推荐编解码器
| 编解码器 | 格式 | 质量 | 建议 |
|---|---|---|---|
| PCM | WAV | 无损 | ✅ 准确度最佳 |
| FLAC | FLAC | 无损 | ✅ 优秀,有压缩 |
| AAC | M4A、MP4 | 高 | ✅ 很好 |
| MP3 | MP3 | 有损 | ✅ ≥128 kbps 时良好 |
| OGG Vorbis | OGG | 有损 | ✅ 质量好 |
| OPUS | OPUS | 有损 | ✅ 好,低延迟 |
编解码器实践
追求最高准确度:
- 使用 PCM(WAV) 或 FLAC(无损)
日常使用:
- 使用 AAC 或 MP3 ≥128 kbps(效果很好)
避免:
- 极低码率 MP3(< 64 kbps)
- 高度压缩格式
- 除非必要,避免电话编解码器(AMR、G.711)
预处理建议
转写前
Whisper 会自动处理许多问题;预处理可进一步改善结果:
1. 音量归一化
import numpy as np
from scipy.io import wavfile
def normalize_audio(audio_path, output_path, target_dB=-3.0):
sr, audio = wavfile.read(audio_path)
audio = audio.astype(np.float32)
# Normalize to target dB
max_val = np.max(np.abs(audio))
target_linear = 10 ** (target_dB / 20)
audio = audio * (target_linear / max_val)
# Clip to prevent overflow
audio = np.clip(audio, -1.0, 1.0)
wavfile.write(output_path, sr, (audio * 32767).astype(np.int16))
2. 去除静音
# Remove leading/trailing silence
# Helps with processing time and accuracy
3. 降噪(可选)
噪声较大时:
# Use noise reduction libraries
# librosa, noisereduce, or specialized tools
# Only if background noise is significant
4. 重采样至 16 kHz(可选)
优化文件大小时:
import ffmpeg
stream = ffmpeg.input('input.wav')
stream = ffmpeg.output(
stream,
'output_16k.wav',
ar=16000 # Resample to 16 kHz
)
ffmpeg.run(stream, overwrite_output=True)
常见音频问题与解决
问题 1:采样率很低(8 kHz)
问题: 8 kHz 电话录音可能准确度较低。
解决:
- 使用 Whisper medium 或 large 模型(对低采样率更友好)
- 上采样至 16 kHz(不能恢复音质,但有助于处理)
问题 2:立体声上不同说话人
问题: 两人各占一轨。
解决:
# Extract each channel separately
import torchaudio
audio, sr = torchaudio.load('stereo.wav')
speaker1 = audio[0] # Left channel
speaker2 = audio[1] # Right channel
# Transcribe each separately
result1 = model.transcribe(speaker1)
result2 = model.transcribe(speaker2)
问题 3:可变码率 MP3
问题: VBR 在某些工具中可能出问题。
解决:
- 转为固定码率(CBR)或 WAV
- Whisper 能处理 VBR,但 CBR 更可预期
问题 4:损坏的音频文件
问题: 能播放但 Whisper 失败。
解决:
# Re-encode the file
import ffmpeg
stream = ffmpeg.input('corrupted.mp3')
stream = ffmpeg.output(
stream,
'fixed.wav',
acodec='pcm_s16le'
)
ffmpeg.run(stream, overwrite_output=True)
问题 5:极长音频文件
问题: 内存不足或极慢。
解决:
- 切成 30–60 秒块
- 顺序或并行处理
- 按时间戳合并结果
场景化建议
电话通话
| 参数 | 值 | 原因 |
|---|---|---|
| 采样率 | 8–16 kHz | 电话音质 |
| 格式 | WAV 或 MP3 | 常见 |
| 码率 | ≥ 64 kbps | 编解码质量 |
| 声道 | 单声道 | 通话惯例 |
会议(Zoom、Teams)
| 参数 | 值 | 原因 |
|---|---|---|
| 采样率 | 16–48 kHz | 高质 |
| 格式 | MP4(提取音频) | 视频格式 |
| 码率 | ≥ 128 kbps | 良好质量 |
| 声道 | 单声道或立体声 | 视设置而定 |
播客
| 参数 | 值 | 原因 |
|---|---|---|
| 采样率 | 44.1–48 kHz | 专业质量 |
| 格式 | MP3、WAV 或 M4A | 常见 |
| 码率 | ≥ 128 kbps | 良好 |
| 声道 | 单声道 | 惯例 |
采访
| 参数 | 值 | 原因 |
|---|---|---|
| 采样率 | 16–48 kHz | 高质 |
| 格式 | WAV 或 FLAC | 最高准确度 |
| 码率 | 无损或 ≥ 192 kbps | 专业 |
| 声道 | 单声道 | 惯例 |
Whisper 音频要求摘要
最低要求
- ✅ 格式: FFmpeg 支持的任意格式
- ✅ 采样率: 任意(建议至少 8 kHz)
- ✅ 位深度: 8 位及以上
- ✅ 声道: 单声道或立体声(偏好单声道)
- ✅ 文件大小: 无硬性上限(>100 MB 应分块)
- ✅ 时长: 无硬性上限(>1 小时应分块)
最佳要求
- ✅ 格式: WAV、FLAC 或 MP3(≥128 kbps)
- ✅ 采样率: 16 kHz(最佳,无需重采样)
- ✅ 位深度: 16 位 PCM
- ✅ 声道: 单声道
- ✅ 音质: 语音清晰、噪声少
- ✅ 预处理: 音量归一化、无削波
快速参考:音频准备清单
使用 Whisper 转写前:
- 格式: WAV、MP3、FLAC、M4A 或其他支持格式
- 采样率: 16 kHz(最佳)或其他支持值
- 位深度: 16 位(推荐)
- 声道: 单声道(推荐)或立体声
- 文件大小: < 100 MB(或计划分块)
- 时长: < 1 小时(或计划分块)
- 音质: 语音清晰、背景噪声少
- 音量: 已归一化、无削波
- 编解码器: 无损(WAV/FLAC)或高质有损(MP3 ≥128 kbps)
测试音频
快速测试
import whisper
# Load model
model = whisper.load_model("base")
# Test transcription
result = model.transcribe("your_audio.wav")
# Check if successful
if result["text"]:
print("✅ Audio format is compatible")
print(f"Detected language: {result['language']}")
else:
print("⚠️ Transcription failed - check audio format")
常见错误信息
| 错误 | 原因 | 解决 |
|---|---|---|
| "File not found" | 路径错误 | 检查路径 |
| "Unsupported format" | 不支持格式 | 转为 WAV/MP3 |
| "Out of memory" | 文件过大 | 分块处理 |
| "Empty audio" | 文件损坏 | 重新编码 |
最佳实践摘要
- 尽量使用 16 kHz 采样率(对 Whisper 最优)
- 优先单声道而非立体声(内部按单声道处理)
- 使用无损格式(WAV/FLAC)以获得最高准确度
- 长文件(>1 小时)应分块以提高准确度与稳定性
- 归一化音频至稳定电平
- 尽量减少背景噪声
- 选择合适模型规模(更大模型对差音质更鲁棒)
- 先用 base 模型测试再使用更大模型
结语
Whisper 非常灵活,可处理多种格式与音质;遵循最佳规格可获得最佳转写准确度:
- 格式: WAV、FLAC 或 MP3(≥128 kbps)
- 采样率: 16 kHz(最佳)
- 位深度: 16 位 PCM
- 声道: 单声道
- 音质: 语音清晰、噪声少
请记住:清晰的音频比完美的格式参数更重要。即使技术参数理想,录音质量差仍会拉低准确度。应注重清晰语音、低噪声与良好麦克风摆放。
在生产环境中,SayToWords 等平台会自动处理格式转换、重采样与优化,让您专注于录得清楚,而非纠结技术细节。
需要为 Whisper 准备音频的帮助?请参阅我们关于预处理、分块策略与准确度优化的其他指南。
