语音翻译 #
翻译基础 #
什么是语音翻译? #
语音翻译是将一种语言的音频直接转换为另一种语言的文本。Whisper 的翻译功能可以将 99 种语言的音频直接翻译成英文文本。
text
┌─────────────────────────────────────────────────────────────┐
│ 翻译流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 音频输入 → 语言识别 → 翻译推理 → 英文输出 │
│ │
│ 输入: 中文音频 "你好,世界" │
│ 输出: 英文文本 "Hello, world" │
│ │
└─────────────────────────────────────────────────────────────┘
转录 vs 翻译 #
text
转录(Transcribe):
├── 输入: 中文音频
├── 输出: 中文文本
└── 语言: 保持不变
翻译(Translate):
├── 输入: 中文音频
├── 输出: 英文文本
└── 语言: 转换为英文
基本用法 #
python
import whisper
model = whisper.load_model("base")
result = model.translate("chinese_audio.mp3")
print(result["text"])
或使用 transcribe 方法:
python
result = model.transcribe("chinese_audio.mp3", task="translate")
print(result["text"])
命令行翻译 #
基本翻译 #
bash
whisper audio.mp3 --task translate
指定源语言 #
bash
whisper chinese_audio.mp3 --task translate --language Chinese
whisper japanese_audio.mp3 --task translate --language Japanese
whisper french_audio.mp3 --task translate --language French
输出翻译结果 #
bash
whisper audio.mp3 --task translate --output_format srt
whisper audio.mp3 --task translate --output_format txt
支持的源语言 #
语言列表 #
Whisper 支持从以下语言翻译到英文:
python
import whisper
print("支持翻译的语言:")
for code, name in whisper.tokenizer.LANGUAGES.items():
print(f" {code}: {name}")
常用语言示例 #
| 源语言 | 代码 | 示例输入 | 示例输出 |
|---|---|---|---|
| 中文 | zh | 你好,世界 | Hello, world |
| 日语 | ja | こんにちは | Hello |
| 韩语 | ko | 안녕하세요 | Hello |
| 法语 | fr | Bonjour | Hello |
| 德语 | de | Guten Tag | Good day |
| 西班牙语 | es | Hola | Hello |
| 俄语 | ru | Привет | Hello |
| 阿拉伯语 | ar | مرحبا | Hello |
翻译示例 #
示例 1: 基本翻译 #
python
import whisper
model = whisper.load_model("base")
result = model.translate("speech_zh.mp3")
print(f"翻译结果: {result['text']}")
print(f"源语言: {result['language']}")
示例 2: 批量翻译 #
python
import whisper
import os
model = whisper.load_model("base")
audio_files = ["speech1.mp3", "speech2.mp3", "speech3.mp3"]
for audio_file in audio_files:
result = model.translate(audio_file)
print(f"\n{audio_file}:")
print(f"源语言: {result['language']}")
print(f"翻译: {result['text']}")
示例 3: 带时间戳的翻译 #
python
import whisper
model = whisper.load_model("base")
result = model.translate("speech.mp3")
print("带时间戳的翻译:")
for segment in result["segments"]:
print(f"[{segment['start']:.1f}s - {segment['end']:.1f}s] {segment['text']}")
示例 4: 生成双语字幕 #
python
import whisper
model = whisper.load_model("base")
transcribe_result = model.transcribe("audio.mp3", language="zh")
translate_result = model.translate("audio.mp3")
def write_bilingual_srt(segments_zh, segments_en, output_path):
with open(output_path, "w", encoding="utf-8") as f:
for i, (zh, en) in enumerate(zip(segments_zh, segments_en), 1):
start = format_timestamp(zh["start"])
end = format_timestamp(zh["end"])
f.write(f"{i}\n")
f.write(f"{start} --> {end}\n")
f.write(f"{zh['text'].strip()}\n")
f.write(f"{en['text'].strip()}\n\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}"
write_bilingual_srt(
transcribe_result["segments"],
translate_result["segments"],
"bilingual.srt"
)
提高翻译质量 #
使用更大的模型 #
python
import whisper
models = {
"tiny": whisper.load_model("tiny"),
"base": whisper.load_model("base"),
"small": whisper.load_model("small"),
"medium": whisper.load_model("medium"),
}
audio_file = "chinese_speech.mp3"
for name, model in models.items():
result = model.translate(audio_file)
print(f"{name}: {result['text']}")
指定源语言 #
python
import whisper
model = whisper.load_model("base")
result_auto = model.translate("audio.mp3")
print(f"自动检测: {result_auto['text']}")
result_specified = model.translate("audio.mp3", language="zh")
print(f"指定语言: {result_specified['text']}")
使用初始提示 #
python
import whisper
model = whisper.load_model("base")
result = model.translate(
"technical_speech.mp3",
initial_prompt="This is a technical presentation about machine learning and artificial intelligence."
)
print(result["text"])
调整温度参数 #
python
import whisper
model = whisper.load_model("base")
result = model.translate(
"audio.mp3",
temperature=0.0
)
print(f"翻译结果: {result['text']}")
翻译质量评估 #
对比原文和翻译 #
python
import whisper
model = whisper.load_model("base")
transcribe_result = model.transcribe("audio.mp3", language="zh")
translate_result = model.translate("audio.mp3")
print("原文(中文):")
print(transcribe_result["text"])
print("\n翻译(英文):")
print(translate_result["text"])
计算翻译置信度 #
python
import whisper
model = whisper.load_model("base")
result = model.translate("audio.mp3")
for segment in result["segments"]:
avg_logprob = segment["avg_logprob"]
confidence = 2 ** avg_logprob
print(f"文本: {segment['text']}")
print(f"置信度: {confidence:.2%}\n")
翻译限制 #
只能翻译到英文 #
text
限制:
├── 只能将其他语言翻译到英文
├── 不能将英文翻译到其他语言
├── 不能进行非英语语言之间的翻译
└── 这是 Whisper 的设计限制
替代方案:
├── 先转录,再用翻译模型翻译
├── 使用其他翻译服务
└── 结合机器翻译 API
解决方案:多步骤翻译 #
python
import whisper
from transformers import MarianMTModel, MarianTokenizer
whisper_model = whisper.load_model("base")
def translate_audio_to_target(audio_path, target_lang="fr"):
result = whisper_model.translate(audio_path)
english_text = result["text"]
model_name = f"Helsinki-NLP/opus-mt-en-{target_lang}"
tokenizer = MarianTokenizer.from_pretrained(model_name)
mt_model = MarianMTModel.from_pretrained(model_name)
inputs = tokenizer(english_text, return_tensors="pt", padding=True)
translated = mt_model.generate(**inputs)
target_text = tokenizer.decode(translated[0], skip_special_tokens=True)
return {
"original_language": result["language"],
"english_translation": english_text,
"target_language": target_lang,
"target_translation": target_text
}
result = translate_audio_to_target("chinese_audio.mp3", "fr")
print(f"源语言: {result['original_language']}")
print(f"英文翻译: {result['english_translation']}")
print(f"法语翻译: {result['target_translation']}")
实用场景 #
场景 1: 外语视频字幕 #
python
import whisper
model = whisper.load_model("base")
result = model.translate("foreign_video.mp3")
def write_srt(segments, output_path):
with open(output_path, "w", encoding="utf-8") as f:
for i, segment in enumerate(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")
write_srt(result["segments"], "english_subtitles.srt")
场景 2: 跨语言会议记录 #
python
import whisper
model = whisper.load_model("medium")
audio_files = {
"chinese_speaker.mp3": "zh",
"japanese_speaker.mp3": "ja",
"french_speaker.mp3": "fr"
}
meeting_minutes = []
for audio_file, expected_lang in audio_files.items():
result = model.translate(audio_file)
meeting_minutes.append({
"file": audio_file,
"language": result["language"],
"translation": result["text"]
})
print("会议纪要(英文):")
for item in meeting_minutes:
print(f"\n[{item['language'].upper()}] {item['file']}")
print(item['translation'])
场景 3: 多语言内容分析 #
python
import whisper
model = whisper.load_model("base")
def analyze_multilingual_content(audio_path):
result = model.translate(audio_path)
return {
"detected_language": result["language"],
"english_translation": result["text"],
"duration": result["segments"][-1]["end"] if result["segments"] else 0,
"segment_count": len(result["segments"])
}
analysis = analyze_multilingual_content("podcast.mp3")
print(f"检测语言: {analysis['detected_language']}")
print(f"时长: {analysis['duration']:.1f}秒")
print(f"翻译: {analysis['english_translation']}")
翻译 vs 转录对比 #
准确性对比 #
python
import whisper
model = whisper.load_model("base")
audio = "chinese_audio.mp3"
transcribe_result = model.transcribe(audio, language="zh")
translate_result = model.translate(audio)
print("转录(中文):")
for seg in transcribe_result["segments"]:
print(f" [{seg['avg_logprob']:.2f}] {seg['text']}")
print("\n翻译(英文):")
for seg in translate_result["segments"]:
print(f" [{seg['avg_logprob']:.2f}] {seg['text']}")
性能对比 #
python
import whisper
import time
model = whisper.load_model("base")
audio = "audio.mp3"
start = time.time()
transcribe_result = model.transcribe(audio)
transcribe_time = time.time() - start
start = time.time()
translate_result = model.translate(audio)
translate_time = time.time() - start
print(f"转录时间: {transcribe_time:.2f}s")
print(f"翻译时间: {translate_time:.2f}s")
最佳实践 #
1. 选择合适的模型 #
text
场景推荐:
├── 快速翻译预览: tiny 或 base
├── 一般翻译需求: small
├── 高质量翻译: medium 或 large
└── 专业领域翻译: large + 初始提示
2. 预处理音频 #
python
import whisper
def preprocess_and_translate(audio_path):
audio = whisper.load_audio(audio_path)
audio = whisper.pad_or_trim(audio)
mel = whisper.log_mel_spectrogram(audio).to(model.device)
options = whisper.DecodingOptions(task="translate")
result = whisper.decode(model, mel, options)
return result.text
3. 处理长音频 #
python
import whisper
model = whisper.load_model("base")
result = model.translate(
"long_audio.mp3",
verbose=True
)
print(f"处理了 {len(result['segments'])} 个片段")
下一步 #
掌握了语音翻译功能后,继续学习 模型详解 了解不同模型的特点和选择策略!
最后更新:2026-04-05