跳转到主要内容
语音转语音

音视频文件翻译-千问

千问3-LiveTranslate-Flash 是音视频翻译模型,支持 18 种语言(包括中文、英文、俄文、法文等)互译,可结合视觉上下文提升翻译准确性,并输出文本与语音。

工作方式

  1. 设置语种:参考支持的语种,在 translation_options 参数中设置源语种 (source_lang) 和目标语种 (target_lang)。
    省略 source_lang将启用自动检测,但指定语种能提升翻译准确率。
  2. 输入待翻译文件:messages 数组中有且仅有一条 role 为 user 的消息,content字段需传入待翻译音频/视频的 URL 或 Base64 数据。
  3. **控制输出模态:**通过 modalities 参数控制输出模态:
    • ["text"]:仅输出文本;
    • ["text","audio"]:输出文本和 Base64 编码的音频。
      若输出音频,需在audio参数中设置音色(voice)。参考支持的音色。
以下为使用 OpenAI Python SDK 的核心代码:
# 导入依赖与创建客户端...
completion = client.chat.completions.create(
    model="qwen3-livetranslate-flash",    # 选择模型
    # messages 仅包含一条 user 消息,content 为待翻译文件
    messages = [
    {
      "role": "user",
      "content": [
        {
          "type": "input_audio",
          "input_audio": {
            "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav",
            "format": "wav"
          }
        }
      ]
    }
  ],
    # translation_options 非 OpenAI 标准参数,需通过 extra_body 传入
    extra_body={"translation_options": {"source_lang": "zh", "target_lang": "en"}},
    # 示例:输出文本和音频
    modalities = ["text","audio"],
    audio={"voice": "Cherry", "format": "wav"},
    stream=True
)
使用限制
  • 单轮翻译:模型专为翻译任务设计,不支持多轮对话。
  • 无 System Message:不支持通过 system 角色设定全局行为。
  • **调用方式:**仅支持兼容 OpenAI 协议的流式输出。
响应解析 chunk为流式响应对象:
  • 文本:读取 chunk.choices[0].delta.content。
  • 音频:读取 chunk.choices[0].delta.audio["data"],模型输出音频的采样率是 24kHz。

支持的模型

模型名称版本上下文长度最大输入最大输出
(Token数)
qwen3-livetranslate-flash
当前能力等同于qwen3-livetranslate-flash-2025-12-01
稳定版53,24849,1524,096
qwen3-livetranslate-flash-2025-12-01快照版

如何使用

qwen3-livetranslate-flash 模型支持音频或视频输入,并输出文本与音频。 请确保已获取与配置 API Key并配置API Key到环境变量。若通过OpenAI SDK调用,需安装SDK。 以下示例使用音频输入。如需输入视频,请取消对应代码的注释。
import os
from openai import OpenAI

client = OpenAI(
    # 若没有配置环境变量,请用千问AI平台API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://maas.qianwenaiapi.com/compatible-mode/v1",
)

# ----------------音频输入 ----------------
messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "input_audio",
                "input_audio": {
                    "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav",
                    "format": "wav",
                },
            }
        ],
    }
]

# ----------------视频输入(需取消注释)----------------
# messages = [
#     {
#         "role": "user",
#         "content": [
#             {
#                 "type": "video_url",
#                 "video_url": {
#                     "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
#                 },
#             }
#         ],
#     },
# ]

completion = client.chat.completions.create(
    model="qwen3-livetranslate-flash",
    messages=messages,
    modalities=["text", "audio"],
    audio={"voice": "Cherry", "format": "wav"},
    stream=True,
    stream_options={"include_usage": True},
    extra_body={"translation_options": {"source_lang": "zh", "target_lang": "en"}},
)

for chunk in completion:
    print(chunk)
此示例使用公网文件 URL。若使用本地文件,请参见输入 Base64 编码的本地文件中的音频与视频部分。

解析 Base64 音频数据

模型以流式 Base64 编码格式输出音频。可采用以下两种方式处理数据:
  • **拼接解码:**拼接所有返回的 Base64 片段,待生成结束后统一解码,保存为音频文件。
  • **实时播放:**实时解码每个 Base64 片段并直接播放。
# Installation instructions for pyaudio:
# APPLE Mac OS X
#   brew install portaudio
#   pip install pyaudio
# Debian/Ubuntu
#   sudo apt-get install python-pyaudio python3-pyaudio
#   or
#   pip install pyaudio
# CentOS
#   sudo yum install -y portaudio portaudio-devel && pip install pyaudio
# Microsoft Windows
#   python -m pip install pyaudio

import os
from openai import OpenAI
import base64
import numpy as np
import soundfile as sf

# 初始化OpenAI客户端
client = OpenAI(
    # 若没有配置环境变量,请用千问AI平台API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://maas.qianwenaiapi.com/compatible-mode/v1",
)
messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "input_audio",
                "input_audio": {
                    "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav",
                    "format": "wav",
                },
            }
        ],
    }
]
completion = client.chat.completions.create(
    model="qwen3-livetranslate-flash",
    messages=messages,
    modalities=["text", "audio"],
    audio={"voice": "Cherry", "format": "wav"},
    stream=True,
    stream_options={"include_usage": True},
    extra_body={"translation_options": {"source_lang": "zh", "target_lang": "en"}},
)

# 方式1: 待生成结束后再进行解码
audio_string = ""
for chunk in completion:
    if chunk.choices:
        if hasattr(chunk.choices[0].delta, "audio"):
            try:
                audio_string += chunk.choices[0].delta.audio["data"]
            except Exception as e:
                print(chunk.choices[0].delta.audio["transcript"])
    else:
        print(chunk.usage)

wav_bytes = base64.b64decode(audio_string)
audio_np = np.frombuffer(wav_bytes, dtype=np.int16)
sf.write("audio_assistant_py.wav", audio_np, samplerate=24000)

# 方式2: 边生成边解码(使用方式2请将方式1的代码进行注释)
# # 初始化 PyAudio
# import pyaudio
# import time
# p = pyaudio.PyAudio()
# # 创建音频流
# stream = p.open(format=pyaudio.paInt16,
#                 channels=1,
#                 rate=24000,
#                 output=True)

# for chunk in completion:
#     if chunk.choices:
#         if hasattr(chunk.choices[0].delta, "audio"):
#             try:
#                 audio_string = chunk.choices[0].delta.audio["data"]
#                 wav_bytes = base64.b64decode(audio_string)
#                 audio_np = np.frombuffer(wav_bytes, dtype=np.int16)
#                 # 直接播放音频数据
#                 stream.write(audio_np.tobytes())
#             except Exception as e:
#                 print(chunk.choices[0].delta.audio["transcript"])

# time.sleep(0.8)
# # 清理资源
# stream.stop_stream()
# stream.close()
# p.terminate()

计费说明

  • 音频
  • 视频
输入或输出每秒音频均消耗 12.5 Token。
Token 费用请参见选择模型。

API 参考

qwen3-livetranslate-flash 模型的输入输出参数请参见音视频翻译-通义千问。

支持的语种

下表中的语种代码可用于指定源语种与目标语种。
部分目标语种仅支持输出文本,不支持输出音频。
语种代码语种支持的输出模态
en英语音频、文本
zh中文音频、文本
ru俄语音频、文本
fr法语音频、文本
de德语音频、文本
pt葡萄牙语音频、文本
es西班牙语音频、文本
it意大利语音频、文本
id印尼语文本
ko韩语音频、文本
ja日语音频、文本
vi越南语文本
th泰语文本
ar阿拉伯语文本
yue粤语音频、文本
hi印地语文本
el希腊语文本
tr土耳其语文本

支持的音色

音色名voice参数音色效果描述支持的语种
芊悦Cherry阳光积极、亲切自然小姐姐。中文、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语
不吃鱼Nofish不会翘舌音的设计师。中文、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语
上海-阿珍Jada风风火火的沪上阿姐。中文
北京-晓东Dylan北京胡同里长大的少年。中文
四川-晴儿Sunny甜到你心里的川妹子。中文
天津-李彼得Peter天津相声,专业捧人。中文
粤语-阿清Kiki甜美的港妹闺蜜。粤语
四川-程川Eric一个跳脱市井的四川成都男子。中文

常见问题

Q:传入视频文件时,翻译的是什么内容?

A:翻译视频中的音频内容,视觉信息用于辅助上下文理解,以提升准确率。 示例: 当音频内容为This is a mask时:
  • 若画面显示口罩,会翻译为“这是一个口罩”;
  • 若画面显示面具,会翻译为“这是一个面具”。