1. 代码功能简要说明

该代码基于OpenAI的Whisper-1语音识别模型和TTS-1文本转语音模型,实现“中文音频→英文文本→英文音频”的全流程转换:

  • 核心流程1(语音翻译):读取本地郭德纲相声MP3音频文件,通过Whisper-1模型将音频中的中文内容识别并自动翻译成英文文本;
  • 核心流程2(英文配音生成):将翻译后的英文文本,通过TTS-1模型(onyx男性低沉音色)生成英文配音音频文件,保存到本地;
  • 补充说明:注释部分演示了基础用法(李云龙配音音频转中文文字、指定翻译提示词),核心代码完成相声音频的“中译英+英文配音”完整链路。

2. 带逐行详细注释的完整代码

# 导入os库:1.配置网络代理(解决国内访问OpenAI API的网络限制) 2.处理文件路径相关操作
import os
# 从openai库导入OpenAI类:创建API客户端,同时调用Whisper-1(语音识别)和TTS-1(文本转语音)接口
from openai import OpenAI

# 设置HTTP代理:127.0.0.1:7890是代理工具的本地端口,确保API请求能访问OpenAI服务器
os.environ['http_proxy'] = '127.0.0.1:7890'
# 设置HTTPS代理:OpenAI API基于HTTPS协议,需配置该代理确保语音识别/生成请求正常
os.environ['https_proxy'] = '127.0.0.1:7890'

# 初始化OpenAI客户端实例(前提:需配置OPENAI_API_KEY环境变量,否则会认证失败)
# 配置方式:Linux/Mac→终端执行export OPENAI_API_KEY="sk-你的密钥";Windows→终端执行set OPENAI_API_KEY="sk-你的密钥"
client = OpenAI()

# ===================== 注释部分:基础语音转录(李云龙配音转中文文字) =====================
# 把李云龙的配音变成文字(转录):以二进制只读模式(rb)打开本地音频文件(test1.mp3)
# audio_file = open('./audio/test1.mp3', 'rb')
#
# # 调用Whisper-1模型进行语音转录(音频→同语言文字,这里是中文音频转中文文字)
# transcription = client.audio.transcriptions.create(
#     model='whisper-1',  # 指定语音识别模型(仅支持whisper-1,OpenAI唯一的语音识别模型)
#     file=audio_file     # 传入打开的音频文件对象(必须是rb模式打开的二进制文件)
# )
#
# # 打印转录后的文字内容(transcription.text是固定取值路径)
# print(transcription.text)

# ===================== 注释部分:语音转录+翻译(中文音频→英文文字) =====================
# 转录 + 翻译(翻译成英文)
# translation = client.audio.translations.create(
#     model='whisper-1',  # 语音翻译仍使用whisper-1模型
#     file=audio_file,    # 传入李云龙配音的音频文件对象
#     prompt='Translate into English'  # 翻译提示词(可选,指定翻译为英文,whisper-1默认翻译为英文)
# )
#
# # 打印翻译后的英文文本
# print(translation.text)

# ===================== 核心代码:郭德纲相声→英文文本→英文音频 =====================
# 1. 打开郭德纲相声的本地音频文件(gdg.mp3),二进制只读模式(rb),用于后续翻译
gdg_audio_file = open('./audio/gdg.mp3', 'rb')
# 定义生成的英文配音音频文件保存路径(WAV/MP3格式均可,这里用MP3)
english_gdg_audio_file = './audio/gdg_english.mp3'

# 2. 调用Whisper-1模型进行语音翻译(中文音频→英文文字)
translation = client.audio.translations.create(
    model='whisper-1',  # 必选参数:语音翻译唯一模型whisper-1
    file=gdg_audio_file,  # 必选参数:传入打开的相声音频文件对象
    # 无需指定prompt:whisper-1默认将任意语言音频翻译为英文
)

# 3. 提取翻译后的英文文本(translation.text是固定取值路径)
english_txt = translation.text
# 优化print:添加说明文字,清晰展示翻译后的英文文本
print('=== 郭德纲相声音频翻译结果(中文→英文) ===')
print(f'英文文本:\n{english_txt}')
# 关闭音频文件对象:释放系统资源(open()打开的文件需手动关闭,避免资源泄漏)
gdg_audio_file.close()

# 4. 将翻译后的英文文本生成英文配音音频(复用TTS-1文本转语音功能)
# with语句:流式响应上下文管理器,实时生成并保存音频,节省内存
with client.audio.speech.with_streaming_response.create(
    model='tts-1',      # 指定文本转语音模型(tts-1=标准音质,tts-1-hd=高清)
    voice='onyx',       # 指定语音音色(onyx=男性低沉音色,适配相声旁白风格)
    input=english_txt   # 传入翻译后的英文文本,作为配音的内容
) as resp:
    # 将流式生成的英文音频数据保存到指定路径(gdg_english.mp3)
    resp.stream_to_file(english_gdg_audio_file)

# 优化print:添加配音生成成功的提示,告知保存路径
print('\n=== 英文配音生成成功 ===')
print(f'保存路径:{english_gdg_audio_file}')
print(f'配音参数:\n- 模型:tts-1\n- 音色:onyx(男性低沉)\n- 内容:郭德纲相声英文翻译文本')

3. 无任何注释的代码版本

import os
from openai import OpenAI

os.environ['http_proxy'] = '127.0.0.1:7890'
os.environ['https_proxy'] = '127.0.0.1:7890'

client = OpenAI()

gdg_audio_file = open('./audio/gdg.mp3', 'rb')
english_gdg_audio_file = './audio/gdg_english.mp3'

translation = client.audio.translations.create(
    model='whisper-1',
    file=gdg_audio_file,
)

english_txt = translation.text
print('=== 郭德纲相声音频翻译结果(中文→英文) ===')
print(f'英文文本:\n{english_txt}')
gdg_audio_file.close()

with client.audio.speech.with_streaming_response.create(
    model='tts-1',
    voice='onyx',
    input=english_txt
) as resp:
    resp.stream_to_file(english_gdg_audio_file)

print('\n=== 英文配音生成成功 ===')
print(f'保存路径:{english_gdg_audio_file}')
print(f'配音参数:\n- 模型:tts-1\n- 音色:onyx(男性低沉)\n- 内容:郭德纲相声英文翻译文本')

4. 核心知识点详解(系统梳理+表格)

4.1 核心概念梳理
概念 通俗解释 关键说明
Whisper-1 OpenAI推出的多语言语音识别/翻译模型 1. 核心能力:
- 转录(Transcriptions):将任意语言音频转为同语言文字(如中文音频→中文文字)
- 翻译(Translations):将任意语言音频转为英文文字(默认行为,无需额外配置)
2. 支持音频格式:mp3、wav、mp4、m4a等(几乎覆盖所有常见格式)
3. 计费方式:按音频时长计费(单位:分钟),支持最长4小时的音频
语音转录(Transcriptions) 音频→同语言文字(“听出音频里说的话”) 1. 调用方式:client.audio.transcriptions.create()
2. 核心参数:model(固定whisper-1)、file(音频文件对象)
3. 适用场景:语音转文字、字幕生成、会议记录
语音翻译(Translations) 任意语言音频→英文文字(“听懂外语并翻译成英文”) 1. 调用方式:client.audio.translations.create()
2. 核心参数:model(固定whisper-1)、file(音频文件对象)、prompt(可选,指定翻译要求)
3. 特点:Whisper-1默认将所有语言翻译为英文,无需指定目标语言
音频文件操作(rb模式) 以二进制只读模式打开音频文件 1. 必须用rb模式:音频是二进制文件,r模式(文本模式)打开会导致文件损坏/识别失败
2. 资源释放:open()打开的文件需用close()关闭,或用with语句自动关闭(推荐)
3. 路径注意:需确保音频文件路径正确(如./audio/gdg.mp3表示代码同级的audio文件夹下的gdg.mp3)
TTS-1复用(文本转语音) 将翻译后的英文文本生成英文音频 1. 核心逻辑:语音翻译的输出(英文文本)作为TTS-1的输入(文本),实现“音频→文字→音频”转换
2. 音色选择:onyx(男性低沉)适配相声/解说风格,nova(女性清亮)适配新闻风格
4.2 Whisper-1 API核心参数对照表
功能 方法 必选参数 可选参数 核心返回值
语音转录(同语言) client.audio.transcriptions.create() model(whisper-1)、file(音频文件) language(指定音频语言,如zh)、response_format(返回格式) transcription.text(转录文本)
语音翻译(→英文) client.audio.translations.create() model(whisper-1)、file(音频文件) prompt(翻译提示词)、temperature(随机性) translation.text(翻译文本)
4.3 关键参数补充说明
参数名 取值示例 作用 适用场景
language(转录可选) ‘zh’ / ‘en’ / ‘ja’ 指定音频的原始语言,提升转录准确率 音频语言不明确时(如混合中英文)
response_format(转录可选) ‘text’ / ‘json’ / ‘srt’ 指定返回格式,srt为字幕文件格式 生成字幕文件时(如视频字幕)
prompt(翻译可选) ‘Translate into English, keep the humor’ 自定义翻译要求(如保留幽默感) 需精准控制翻译风格时(如相声/小说)

5. Print函数优化与输出说明

5.1 优化后的Print代码及输出示例
代码行 输出示例 核心作用
print('=== 郭德纲相声音频翻译结果(中文→英文) ===') (分隔符,标识翻译结果) 明确区分翻译结果和配音结果,提升可读性
print(f'英文文本:\n{english_txt}') 英文文本:
Guo Degang’s cross talk is full of humor, talking about daily life and human feelings…
换行符\n让长文本排版整洁,避免拥挤
print('\n=== 英文配音生成成功 ===') (分隔符,标识配音结果) 告知用户配音生成完成,引导关注保存路径
print(f'保存路径:{english_gdg_audio_file}') 保存路径:./audio/gdg_english.mp3 明确音频文件位置,方便查找/播放
5.2 常见错误输出示例(补充)
=== 语音翻译失败 ===
错误信息:FileNotFoundError: [Errno 2] No such file or directory: './audio/gdg.mp3'
  • 关键解读:./audio/gdg.mp3文件不存在,需检查:
    1. audio文件夹是否创建;
    2. gdg.mp3是否放入audio文件夹;
    3. 文件名称是否拼写正确(如gdg.mp3 vs GDG.mp3,区分大小写)。

总结(关键点回顾)

  1. 核心流程:本代码实现“中文音频→Whisper-1翻译→英文文本→TTS-1生成→英文音频”的完整链路,核心依赖Whisper-1的翻译能力和TTS-1的配音能力;
  2. Whisper-1关键
    • 转录(Transcriptions)是“音频→同语言文字”,翻译(Translations)是“音频→英文文字”;
    • 音频文件必须用rb模式打开,否则会识别失败;
  3. 实用技巧
    • 长音频(>1小时)建议分段处理,避免API超时;
    • 转录中文音频时,添加language='zh'参数可提升准确率;
    • 打开的音频文件需手动close()或用with语句自动关闭,避免资源泄漏;
  4. TTS-1适配:翻译后的英文文本生成音频时,音色选择需匹配内容风格(相声选onyx,新闻选nova)。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐