Todos os produtos
Search
Central de documentação

Alibaba Cloud Model Studio:Audio and Video File Translation – Qwen

Última atualização: Aug 26, 2026

O qwen3-livetranslate-flash traduz arquivos de áudio e vídeo em 18 idiomas. Ele aceita entrada de áudio ou vídeo e retorna texto traduzido, áudio sintetizado ou ambos por meio de uma API de streaming. Para entradas de vídeo, o contexto visual melhora a precisão da tradução (por exemplo, distingue "máscara cirúrgica" de "máscara de baile" com base nos quadros do vídeo).

Antes de começar

  1. Crie uma chave de API.
  2. Configure a chave de API como variável de ambiente.
  3. (Opcional) Caso utilize o SDK da OpenAI, instale o SDK.

Início rápido

Todos os exemplos usam a API de streaming compatível com a OpenAI. Defina os idiomas de origem e destino por meio de translation_options. A entrada padrão é áudio; descomente o bloco de entrada de vídeo em cada exemplo para traduzir arquivos de vídeo.

Especifique source_lang aumenta a precisão. Omita esse parâmetro para ativar a detecção automática de idioma.

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

# --- Audio input ---
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",
                },
            }
        ],
    }
]

# --- Video input (uncomment to use) ---
# 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 is not a standard OpenAI parameter; pass it through extra_body
    extra_body={"translation_options": {"source_lang": "zh", "target_lang": "en"}},
)

for chunk in completion:
    print(chunk)
import OpenAI from "openai";

const client = new OpenAI({
    apiKey: process.env.DASHSCOPE_API_KEY,
    // The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
});

// --- Audio input ---
const 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",
                },
            },
        ],
    },
];

// --- Video input (uncomment to use) ---
// const 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",
//                 },
//             },
//         ],
//     },
// ];

async function main() {
    const completion = await 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: { source_lang: "zh", target_lang: "en" },
    });

    for await (const chunk of completion) {
        console.log(JSON.stringify(chunk));
    }
}

main();
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3-livetranslate-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",
                        "format": "wav"
                    }
                }
            ]
        }
    ],
    "modalities": ["text", "audio"],
    "audio": {
        "voice": "Cherry",
        "format": "wav"
    },
    "stream": true,
    "stream_options": {
        "include_usage": true
    },
    "translation_options": {
        "source_lang": "zh",
        "target_lang": "en"
    }
}'

Estes exemplos usam uma URL de arquivo público. Para usar um arquivo local, consulte Inserir um arquivo local codificado em Base64.

Parâmetros da solicitação

Entrada

O array messages deve conter exatamente uma mensagem com role definido como user. O campo content armazena o áudio ou vídeo a traduzir:

  • Áudio: Defina type como input_audio. Forneça a URL do arquivo ou os dados codificados em Base64 em input_audio.data e especifique o formato (por exemplo, wav) em input_audio.format.
  • Vídeo: Configure type como video_url. Informe a URL do arquivo em video_url.url.

Opções de tradução

Especifique os idiomas de origem e destino no parâmetro translation_options:

"translation_options": {"source_lang": "zh", "target_lang": "en"}

No SDK para Python, translation_options não é um parâmetro padrão da OpenAI. Passe-o por meio de extra_body:

extra_body={"translation_options": {"source_lang": "zh", "target_lang": "en"}}

Modalidade de saída

Controle o formato de saída com o parâmetro modalities:

**Valor de modalities**

Saída

["text"]

Apenas texto traduzido

["text", "audio"]

Texto traduzido e áudio sintetizado codificado em Base64

Quando a saída incluir áudio, defina a voz no parâmetro audio. Consulte Vozes compatíveis para ver as opções disponíveis.

Restrições

  • Apenas turno único: O modelo processa uma tradução por solicitação. Não há suporte para conversas com múltiplos turnos.
  • Sem mensagem de sistema: Não há suporte para a função system.
  • Apenas streaming: Somente a saída de streaming compatível com a OpenAI tem suporte.

Analisar a resposta

Cada objeto chunk do streaming contém:

  • Texto: chunk.choices[0].delta.content
  • Áudio: chunk.choices[0].delta.audio["data"] (codificado em Base64, taxa de amostragem de 24 kHz)

Salvar áudio em um arquivo

Concatene todos os fragmentos de áudio em Base64 do fluxo e, após a conclusão do streaming, decodifique e salve o resultado.

Python

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"),
    # The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.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"}},
)

# Concatenate Base64 fragments, then decode after the stream completes
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)

Node.js

import OpenAI from "openai";
import { createWriteStream } from "node:fs";
import { Writer } from "wav";

const client = new OpenAI({
    apiKey: process.env.DASHSCOPE_API_KEY,
    // The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
});

const 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",
                },
            },
        ],
    },
];

const completion = await 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: { source_lang: "zh", target_lang: "en" },
});

// Concatenate Base64 fragments, then decode after the stream completes
let audioString = "";
for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        if (chunk.choices[0].delta.audio?.data) {
            audioString += chunk.choices[0].delta.audio.data;
        }
    } else {
        console.log(chunk.usage);
    }
}

// Save as WAV file
async function saveAudio(base64Data, outputPath) {
    const wavBuffer = Buffer.from(base64Data, "base64");
    const writer = new Writer({
        sampleRate: 24000,
        channels: 1,
        bitDepth: 16,
    });
    const outputStream = createWriteStream(outputPath);
    writer.pipe(outputStream);
    writer.write(wavBuffer);
    writer.end();
    await new Promise((resolve, reject) => {
        outputStream.on("finish", resolve);
        outputStream.on("error", reject);
    });
    console.log(`Audio saved to ${outputPath}`);
}

saveAudio(audioString, "output.wav");

Reprodução em tempo real

Decodifique cada fragmento Base64 ao recebê-lo e reproduza-o diretamente. Essa abordagem requer bibliotecas de áudio específicas para cada plataforma.

Python

Instale pyaudio primeiro:

Plataforma

Instalação

macOS

brew install portaudio && pip install pyaudio

Ubuntu / Debian

sudo apt-get install python-pyaudio python3-pyaudio ou pip install pyaudio

CentOS

sudo yum install -y portaudio portaudio-devel && pip install pyaudio

Windows

python -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"),
    # The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.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"}},
)

# Initialize PyAudio for real-time playback
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()

Node.js

Instale as dependências primeiro:

Plataforma

Instalação

macOS

brew install portaudio && npm install speaker

Ubuntu / Debian

sudo apt-get install libasound2-dev && npm install speaker

Windows

npm install speaker

import OpenAI from "openai";
import Speaker from "speaker";

const client = new OpenAI({
    apiKey: process.env.DASHSCOPE_API_KEY,
    // The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
});

const 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",
                },
            },
        ],
    },
];

const completion = await 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: { source_lang: "zh", target_lang: "en" },
});

// Stream audio to speaker in real time
const speaker = new Speaker({
    sampleRate: 24000,
    channels: 1,
    bitDepth: 16,
    signed: true,
});

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        if (chunk.choices[0].delta.audio?.data) {
            const pcmBuffer = Buffer.from(chunk.choices[0].delta.audio.data, "base64");
            speaker.write(pcmBuffer);
        }
    } else {
        console.log(chunk.usage);
    }
}

speaker.on("finish", () => console.log("Playback complete"));
speaker.end();

Faturamento

Áudio

Cada segundo de áudio de entrada ou saída consome 12,5 tokens. Áudios com duração inferior a 1 segundo são cobrados como 1 segundo.

Vídeo

O consumo de tokens de vídeo possui dois componentes:

  • Tokens de áudio: 12,5 tokens por segundo de áudio. Áudios com duração inferior a 1 segundo são cobrados como 1 segundo.
  • Tokens de vídeo: Calculados com base na contagem de quadros e na resolução. A fórmula é:
  video_tokens = ceil(frame_count / 2) x (height / 32) x (width / 32) + 2

Onde:

  • Os quadros são amostrados a 2 FPS, limitados ao intervalo [4, 128].
  • Altura e largura são ajustadas para múltiplos de 32 pixels e redimensionadas dinamicamente para caber no limite total de pixels.

Script em Python para calcular tokens de vídeo

Para preços de tokens, consulte Lista de modelos.

Detalhes do modelo

Modelo

Versão

Janela de contexto

Entrada máxima

Saída máxima

qwen3-livetranslate-flash

Estável

53.248 tokens

49.152 tokens

4.096 tokens

qwen3-livetranslate-flash-2025-12-01

Snapshot

53.248 tokens

49.152 tokens

4.096 tokens

Atualmente, o qwen3-livetranslate-flash tem as mesmas capacidades do qwen3-livetranslate-flash-2025-12-01.

Idiomas compatíveis

Use estes códigos de idioma para source_lang e target_lang. Alguns idiomas de destino aceitam apenas saída de texto.

Código do idioma

Idioma

Saída compatível

en

Inglês

Áudio, texto

zh

Chinês

Áudio, texto

ru

Russo

Áudio, texto

fr

Francês

Áudio, texto

de

Alemão

Áudio, texto

pt

Português

Áudio, texto

es

Espanhol

Áudio, texto

it

Italiano

Áudio, texto

id

Indonésio

Texto

ko

Coreano

Áudio, texto

ja

Japonês

Áudio, texto

vi

Vietnamita

Texto

th

Tailandês

Texto

ar

Árabe

Texto

yue

Cantonês

Áudio, texto

hi

Hindi

Texto

el

Grego

Texto

tr

Turco

Texto

Vozes compatíveis

Defina o parâmetro voice em audio quando a saída incluir áudio sintetizado.

Nome da voz

**Parâmetro voice**

Descrição

Idiomas compatíveis

Cherry

Cherry

Uma jovem alegre, amigável e autêntica.

Chinês, inglês, francês, alemão, russo, italiano, espanhol, português, japonês, coreano

Nofish

Nofish

Um designer que tem dificuldade em pronunciar consoantes retroflexas.

Chinês, inglês, francês, alemão, russo, italiano, espanhol, português, japonês, coreano

Shanghai-Jada

Jada

Uma senhora de Xangai agitada e enérgica.

Chinês

Beijing-Dylan

Dylan

Um jovem que cresceu nos hutongs de Pequim.

Chinês

Sichuan-Sunny

Sunny

Uma doce garota de Sichuan.

Chinês

Tianjin-Peter

Peter

Uma voz no estilo de um artista de crosstalk de Tianjin (o papel coadjuvante).

Chinês

Cantonese-Kiki

Kiki

Uma doce melhor amiga de Hong Kong.

Cantonês

Sichuan-Eric

Eric

Um homem de Chengdu, Sichuan, não convencional e que se destaca da multidão.

Chinês

Perguntas frequentes

Quando insiro um arquivo de vídeo, qual conteúdo é traduzido?

O modelo traduz a faixa de áudio do vídeo. As informações visuais melhoram a precisão da tradução.

Por exemplo, se o áudio disser "Isso é uma máscara":

  • Se o vídeo mostrar uma máscara cirúrgica, o modelo traduzirá como "Isso é uma máscara cirúrgica".
  • Caso o vídeo exiba uma máscara de baile, a tradução será "Isso é uma máscara de baile".

Referência da API

Para obter detalhes completos sobre os parâmetros de entrada e saída, consulte Tradução de áudio e vídeo - Qwen.