跳转到主要内容
翻译

音视频文件翻译

支持18种语言翻译

模型信息

模型版本上下文窗口最大输入最大输出
qwen3-livetranslate-flash稳定版53,248 tokens49,152 tokens4,096 tokens
qwen3-livetranslate-flash-2025-12-01快照版53,248 tokens49,152 tokens4,096 tokens
qwen3-livetranslate-flash 当前与 qwen3-livetranslate-flash-2025-12-01 的能力一致。

快速开始

前提条件

  1. 获取 API Key
  2. 将其设置为环境变量
  3. (可选)如果使用 OpenAI SDK,请安装 SDK
以下示例均使用 OpenAI 兼容的流式 API,通过 translation_options 设置源语言和目标语言。默认输入为音频。如需翻译视频文件,取消注释各示例中的视频输入代码块即可。
指定 source_lang 可提升翻译准确率。省略该参数则自动检测语言。
  • Python
  • Node.js
  • curl
import os
from openai import OpenAI

client = OpenAI(
  api_key=os.getenv("DASHSCOPE_API_KEY"),
  base_url="https://dashscope.aliyuncs.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},
  # translation_options 不是 OpenAI 标准参数,需通过 extra_body 传递
  extra_body={"translation_options": {"source_lang": "zh", "target_lang": "en"}},
)

for chunk in completion:
  print(chunk)
以上示例使用的是公开文件 URL。

发送 Base64 编码的本地文件

要翻译本地音频文件,需先将文件读取并编码为 Base64。以 data URI 格式传递数据:data:audio/<format>;base64,<base64_data>(例如 data:audio/wav;base64,UklGRiQAAABXQVZFZm10...)。
支持的音频格式:WAV、MP3、FLAC、AAC、OGG、OPUS、M4A、WMA、AMR。采样率:8kHz-48kHz。
  • Python
  • Node.js
  • curl
import os
import base64
from openai import OpenAI

client = OpenAI(
  api_key=os.getenv("DASHSCOPE_API_KEY"),
  base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

# 读取并编码本地音频文件
with open("local_audio.wav", "rb") as f:
  audio_base64 = base64.b64encode(f.read()).decode("utf-8")

completion = client.chat.completions.create(
  model="qwen3-livetranslate-flash",
  messages=[
    {
      "role": "user",
      "content": [
        {
          "type": "input_audio",
          "input_audio": {
            "data": f"data:audio/wav;base64,{audio_base64}",
            "format": "wav",
          },
        }
      ],
    }
  ],
  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)

请求参数

输入

messages 数组只能包含一条 roleuser 的消息。content 字段用于传入待翻译的音频或视频:
  • 音频:将 type 设为 input_audio。在 input_audio.data 中提供文件 URL 或 data URI(例如 data:audio/wav;base64,<base64_data>),在 input_audio.format 中指定格式(例如 wav)。详见发送 Base64 编码的本地文件
  • 视频:将 type 设为 video_url。在 video_url.url 中提供文件 URL。

翻译选项

通过 translation_options 参数指定源语言和目标语言:
"translation_options": {"source_lang": "zh", "target_lang": "en"}
在 Python SDK 中,translation_options 不是 OpenAI 标准参数,需通过 extra_body 传递:
extra_body={"translation_options": {"source_lang": "zh", "target_lang": "en"}}

输出模态

通过 modalities 参数控制输出格式:
modalities输出
["text"]仅翻译文本
["text", "audio"]翻译文本和 Base64 编码的合成音频
输出包含音频时,需通过 audio 参数设置语音。可选语音见支持的语音

使用限制

  • 仅支持单轮:模型每次请求处理一条翻译,不支持多轮对话。
  • 不支持 system 消息:不支持 system 角色。
  • 流式与非流式:支持 stream: truestream: false
  • 输出音频格式:音频输出仅支持 wav 格式。
  • 采样参数默认值:默认采样参数(temperaturetop_ptop_kpresence_penaltyrepetition_penalty)已针对翻译准确率调优,修改可能导致输出质量下降。

解析响应

每个流式 chunk 对象包含:
  • 文本chunk.choices[0].delta.content
  • 音频chunk.choices[0].delta.audio["data"](Base64 编码,24 kHz 采样率)

保存音频到文件

将流中的所有 Base64 音频片段拼接起来,待流结束后解码并保存。
  • Python
  • Node.js
import os
from openai import OpenAI
import base64
import numpy as np
import soundfile as sf

client = OpenAI(
  api_key=os.getenv("DASHSCOPE_API_KEY"),
  base_url="https://dashscope.aliyuncs.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"}},
)

# 拼接 Base64 片段,流结束后解码
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("output.wav", audio_np, samplerate=24000)

实时播放

逐个解码收到的 Base64 音频片段并直接播放。此方式需要依赖特定平台的音频库。
  • Python
  • Node.js
先安装 pyaudio
平台安装命令
macOSbrew install portaudio && pip install pyaudio
Ubuntu / Debiansudo apt-get install python-pyaudio python3-pyaudiopip install pyaudio
CentOSsudo yum install -y portaudio portaudio-devel && pip install pyaudio
Windowspython -m pip install pyaudio
import os
from openai import OpenAI
import base64
import numpy as np
import pyaudio
import time

client = OpenAI(
  api_key=os.getenv("DASHSCOPE_API_KEY"),
  base_url="https://dashscope.aliyuncs.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"}},
)

# 初始化 PyAudio 实现实时播放
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_data = chunk.choices[0].delta.audio["data"]
        wav_bytes = base64.b64decode(audio_data)
        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()

计费

  • 音频
  • 视频
音频 Token 消耗取决于音频特征(如采样率)。如需查看实际 Token 用量,将 stream_options.include_usage 设为 true,然后查看响应中的 usage 字段。
不足 1 秒的音频按 1 秒计费。
Token 定价详见选择模型

支持的语言

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

支持的语音

输出包含合成音频时,需设置 voice 参数。
语音名称voice 参数描述支持的语言
CherryCherry开朗、友好、真诚的年轻女性。中文、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语
EthanEthan标准普通话,略带北方口音。阳光、温暖、充满活力。中文、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语
NofishNofish一位平翘舌不分的设计师。中文、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语
Shanghai-JadaJada风风火火的上海女人。中文
Beijing-DylanDylan在北京胡同里长大的小伙子。中文
Sichuan-SunnySunny来自四川的甜美女孩。中文
Tianjin-PeterPeter天津相声演员风格(捧哏)。中文
Cantonese-KikiKiki来自香港的甜美闺蜜。粤语
Sichuan-EricEric来自四川成都、特立独行的男性。中文

替代方案:使用 Qwen-Omni

也可以使用 Qwen-Omniqwen3-omni-flash)配合翻译提示词来翻译音视频文件。
import os
from openai import OpenAI

client = OpenAI(
  api_key=os.getenv("DASHSCOPE_API_KEY"),
  base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
  model="qwen3-omni-flash",
  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"}},
        {"type": "text", "text": "Translate this audio from English to Chinese."},
      ],
    }
  ],
  modalities=["text"],
  stream=True,
)

for chunk in completion:
  if chunk.choices and chunk.choices[0].delta.content:
    print(chunk.choices[0].delta.content, end="")
Qwen-Omni 的完整能力(包括多模态对话)详见音视频文件理解

常见问题

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

模型翻译的是视频中的音频轨道。视觉信息作为上下文参考,用于提升翻译准确率。 例如,音频内容为「This is a mask」时:
  • 如果视频画面是医用口罩,模型会翻译为「这是一个医用口罩」。
  • 如果视频画面是化装舞会面具,模型会翻译为「这是一个化装舞会面具」。

API 参考

完整的输入输出参数说明,请参见音视频翻译 API 参考