O modelo de imagem para vídeo Wan gera um vídeo fluido a partir de uma imagem do primeiro quadro e de um prompt de texto .
Documentos relacionados: Guia do usuário
ObservaçãoO Wan 2.7 - imagem para vídeo oferece suporte a conversão do primeiro quadro para vídeo, do primeiro e último quadros para vídeo e continuação de vídeo. Recomendamos esta versão.
O recurso de imagem para vídeo (baseado no primeiro quadro) para modelos Wan 2,6 e anteriores suporta apenas a conversão do primeiro quadro para vídeo.
Disponibilidade
O modelo, a URL do endpoint e a chave de API devem estar na mesma região. Chamadas entre regiões falham.
- Selecione um modelo: Confirme a região onde o modelo está disponível.
- Selecione uma URL: Escolha a URL do endpoint correspondente à região. Há suporte para URLs HTTP e do DashScope SDK.
- Configure uma chave de API: Obtenha uma chave de API para a região e, em seguida, configure a chave de API nas variáveis de ambiente.
- Instale o SDK: Para fazer chamadas com o SDK, instale o DashScope SDK.
ObservaçãoO código de exemplo neste tópico destina-se à região de Singapura.
ImportanteO Model Studio lançou domínios específicos por workspace para as regiões China (Pequim) e Singapura. Os novos domínios dedicados oferecem desempenho superior e maior estabilidade para solicitações de inferência. Recomendamos a migração para os novos domínios:
- China (Pequim): de
https://dashscope.aliyuncs.comparahttps://{WorkspaceId}.cn-beijing.maas.aliyuncs.com - Singapura: de
https://dashscope-intl.aliyuncs.comparahttps://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com
O {WorkspaceId} é o ID do seu workspace, disponível na página Workspace Details no console do Model Studio. O domínio existente permanece totalmente funcional.
Chamada HTTP
As tarefas de imagem para vídeo usam invocação assíncrona (geralmente de 1 a 5 minutos): criar tarefa -> consultar resultados.
Etapa 1: Criar uma tarefa
Pequim
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis
Singapura
POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis
Substitua WorkspaceId pelo seu ID do Workspace real.
Virgínia
POST https://dashscope-us.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis
Frankfurt
POST https://{WorkspaceId}.eu-central-1.maas.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis
Substitua WorkspaceId pelo seu ID do Workspace.
Singapura
POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis
Substitua WorkspaceId pelo seu ID do Workspace real.
Virgínia
POST https://dashscope-us.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis
Pequim
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis
Frankfurt
POST https://{WorkspaceId}.eu-central-1.maas.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis
Substitua WorkspaceId pelo seu ID do workspace.
Observação
- Após criar a tarefa, use o
task_idretornado para consultar o resultado. Otask_idé válido por 24 horas. Não crie tarefas duplicadas. Em vez disso, use consultas periódicas (polling) para recuperar o resultado. - Para orientações destinadas a iniciantes, consulte Chamar APIs com Postman ou cURL.
Parâmetros da solicitação | Narrativa multi-tomadaEste recurso é suportado apenas pelos modelos da série Wan2,6. Você pode ativá-lo definindo Dublagem automáticaEste recurso é suportado apenas pelos modelos das séries Wan2,6 e Wan2,5. Se você não fornecer Áudio personalizadoEste recurso é suportado apenas pelos modelos das séries Wan2,6 e Wan2,5. Para especificar uma música de fundo ou narração para o vídeo, passe a URL do seu arquivo de áudio personalizado no parâmetro Vídeo silenciosoApenas os seguintes modelos suportam a geração de vídeo silencioso:
Prompt negativoUse o parâmetro negative_prompt para impedir que "flores" apareçam no vídeo gerado. |
Cabeçalhos | |
Content-Type O tipo de conteúdo da solicitação. Deve ser | |
Authorization Autentica a solicitação com uma chave de API do Model Studio. Exemplo: Bearer sk-xxxx. | |
X-DashScope-Async Ativa o processamento assíncrono. Solicitações HTTP suportam apenas chamadas assíncronas. Deve ser ImportanteSe este cabeçalho de solicitação estiver ausente, o erro "current user api does not support synchronous calls" será retornado. | |
Corpo da solicitação | |
model Nome do modelo. Modelos disponíveis e preços: preços dos modelos. Exemplo: wan2.6-i2v-flash. | |
input Campos de entrada, incluindo o prompt. | |
parameters Controles para resolução, duração, reescrita inteligente de prompt e marcas d'água. |
Parâmetros de resposta | Resposta bem-sucedidaSalve o Resposta de erroFalha na criação da tarefa. Consulte Códigos de erro. |
output Informações sobre a saída da tarefa. | |
request_id Identificador único da solicitação para rastreamento e solução de problemas. | |
code Código de erro. Retornado apenas para solicitações com falha. Consulte Códigos de erro. | |
message Mensagem de erro detalhada. Retornada apenas para solicitações com falha. Consulte Códigos de erro. |
Etapa 2: Consultar o resultado da tarefa
China (Pequim)
GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}
Singapura
GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id}
Substitua WorkspaceId pelo seu ID do Workspace real.
Virgínia
GET https://dashscope-us.aliyuncs.com/api/v1/tasks/{task_id}
Frankfurt
GET https://{WorkspaceId}.eu-central-1.maas.aliyuncs.com/api/v1/tasks/{task_id}
Substitua WorkspaceId pelo seu ID do Workspace.
Singapura
GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id}
Substitua WorkspaceId pelo seu ID do Workspace real.
Virgínia
GET https://dashscope-us.aliyuncs.com/api/v1/tasks/{task_id}
China (Pequim)
GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}
Frankfurt
GET https://{WorkspaceId}.eu-central-1.maas.aliyuncs.com/api/v1/tasks/{task_id}
Substitua WorkspaceId pelo seu ID do Workspace.
Observação
- Recomendação de polling: A geração de vídeo leva vários minutos. Use um mecanismo de consulta periódica com um intervalo razoável, como 15 segundos.
- Transição de estado da tarefa: PENDING → RUNNING → SUCCEEDED ou FAILED.
- Link do resultado: Após o sucesso da tarefa, uma URL de vídeo válida por 24 horas é retornada. Baixe e salve o vídeo em armazenamento permanente, como o OSS.
- Validade do task_id: 24 horas. Após esse período, as consultas retornam o status da tarefa como
UNKNOWN.
Parâmetros da solicitação | Consultar resultado da tarefaSubstitua |
Cabeçalhos | |
Authorization Autentica a solicitação com uma chave de API do Model Studio. Exemplo: Bearer sk-xxxx. | |
Parâmetros de caminho | |
task_id O ID da tarefa. |
Parâmetros de resposta | Tarefa bem-sucedidaAs URLs de vídeo são válidas apenas por 24 horas e depois são removidas automaticamente. Salve os vídeos gerados prontamente. Tarefa falhouQuando uma tarefa falha, Consulta de tarefa expiradaO |
output Os detalhes de saída da tarefa. | |
usage Estatísticas de uso da tarefa, contabilizadas apenas para tarefas bem-sucedidas. | |
request_id Identificador único da solicitação para rastreamento e solução de problemas. |
Chamadas do DashScope SDK
Os nomes dos parâmetros do SDK são amplamente consistentes com a API HTTP, seguindo as convenções de cada linguagem.
As tarefas de imagem para vídeo geralmente levam de 1 a 5 minutos. O SDK encapsula o processo de chamada HTTP assíncrona e suporta chamadas síncronas e assíncronas.
O tempo de processamento depende da fila de tarefas e do status do serviço.
Python SDK
ImportanteCertifique-se de que sua versão do DashScope Python SDK seja pelo menos 2.0.1 antes de executar o código a seguir.
Versões mais antigas podem acionar erros como "url error, please check url!". Para atualizar, consulte Instalar SDK.
Defina a region de acordo com a região do modelo (passada ao construir o Client; o valor de region varia conforme a região):
Pequim
region="cn-beijing"
Singapura
region="ap-southeast-1"
Substitua WorkspaceId pelo seu ID do Workspace real.
Virgínia
region="us-east-1"
Frankfurt
region="eu-central-1"
Substitua WorkspaceId pelo seu ID do Workspace.
Singapura
region="ap-southeast-1"
Substitua WorkspaceId pelo seu ID do Workspace real.
Virgínia
region="us-east-1"
Pequim
region="cn-beijing"
Frankfurt
region="eu-central-1"
Ao fazer a chamada, substitua WorkspaceId pelo seu ID do Workspace real.
Código de exemplo
Chamada síncrona
Uma chamada síncrona bloqueia até que a geração do vídeo seja concluída. Este exemplo demonstra três métodos de entrada de imagem: URL pública, codificação Base64 e caminho de arquivo local.
Exemplo de solicitação
import base64
import os
import mimetypes
import dashscope
from dashscope.v2 import DashScopeError
# A configuração abaixo refere-se à região Singapura. Substitua {WorkspaceId} pelo ID real do seu workspace. O valor de region varia conforme a região.
# Para os endpoints de cada região, consulte https://www.alibabacloud.com/help/model-studio/image-to-video-api-reference
client = dashscope.Client(
# Se a variável de ambiente não estiver configurada, defina diretamente a sua API Key do Model Studio: api_key="sk-xxx"
# Para obter uma API Key, consulte https://www.alibabacloud.com/help/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
workspace="{WorkspaceId}",
region="ap-southeast-1",
)
# --- Função auxiliar para codificação em Base64 ---
# Formato: data:{MIME_type};base64,{base64_data}
def encode_file(file_path):
mime_type, _ = mimetypes.guess_type(file_path)
if not mime_type or not mime_type.startswith("image/"):
raise ValueError("Formato de imagem não suportado ou não reconhecido")
with open(file_path, "rb") as image_file:
encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
return f"data:{mime_type};base64,{encoded_string}"
"""
Métodos de entrada de imagem:
A seguir são apresentadas três formas de fornecer uma imagem. Escolha uma.
1. URL pública: ideal para imagens já acessíveis publicamente.
2. Arquivo local: adequado para desenvolvimento e testes locais.
3. Codificação Base64: ideal para imagens privadas ou quando os dados devem ser transmitidos de forma segura.
"""
# [Método 1] Usar uma URL de imagem acessível publicamente
# Exemplo: usar uma URL de imagem pública
img_url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/wpimhv/rap.png"
# [Método 2] Usar um arquivo local (suporta caminhos absolutos e relativos)
# Formato: file:// + caminho do arquivo
# Exemplo (caminho absoluto):
# img_url = "file://" + "/path/to/your/img.png" # Linux/macOS
# img_url = "file://" + "C:/path/to/your/img.png" # Windows
# Exemplo (caminho relativo):
# img_url = "file://" + "./img.png" # Relativo ao diretório do script em execução
# [Método 3] Usar uma imagem codificada em Base64
# img_url = encode_file("./img.png")
# Defina a URL do áudio
audio_url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/ozwpvi/rap.mp3"
def sample_call_i2v():
print('please wait...')
# generate é uma chamada de uma etapa (envia a tarefa e aguarda a conclusão) e retorna um Job concluído
# audio_url / negative_prompt são campos da seção input que não fazem parte da assinatura nomeada e são passados via extra_input
try:
job = client.videos.generate(model='wan2.6-i2v-flash',
prompt='A scene of urban fantasy art. A dynamic graffiti art character. A boy made of spray paint comes to life from a concrete wall. He raps an English song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The lighting comes from a single street lamp, creating a cinematic atmosphere full of high energy and amazing detail. The audio of the video consists entirely of his rap, with no other dialogue or noise.',
image_url=img_url,
extra_input={'audio_url': audio_url,
'negative_prompt': ""},
resolution="720P",
duration=10,
prompt_extend=True,
watermark=False,
seed=12345)
print(job)
print("video_url:", job.video_url)
except DashScopeError as e:
print(f"Código de status HTTP: {e.status_code}")
print(f"Código de erro: {e.code}")
print(f"Mensagem de erro: {e.message}")
print("Consulte a documentação: https://www.alibabacloud.com/help/model-studio/developer-reference/error-code")
if __name__ == '__main__':
sample_call_i2v()
Exemplo de resposta
A video_url é válida por 24 horas. Baixe o vídeo antes que expire.
{
"status_code": 200,
"request_id": "2794c7a3-fe8c-4dd4-a1b7-xxxxxx",
"code": null,
"message": "",
"output": {
"task_id": "c15d5b14-07c4-4af5-b862-xxxxxx",
"task_status": "SUCCEEDED",
"video_url": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxx.mp4?Expires=xxx",
"submit_time": "2026-01-22 23:24:46.527",
"scheduled_time": "2026-01-22 23:24:46.565",
"end_time": "2026-01-22 23:25:59.978",
"orig_prompt": "A scene of urban fantasy art. A dynamic graffiti art character. A boy made of spray paint comes to life from a concrete wall. He raps an English song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The lighting comes from a single street lamp, creating a cinematic atmosphere full of high energy and amazing detail. The audio of the video consists entirely of his rap, with no other dialogue or noise."
},
"usage": {
"video_count": 1,
"video_duration": 0,
"video_ratio": "",
"duration": 10,
"input_video_duration": 0,
"output_video_duration": 10,
"audio": true,
"SR": 720
}
}
Chamada assíncrona
Uma chamada assíncrona retorna imediatamente um ID de tarefa. Em seguida, você consulta o resultado periodicamente ou aguarda a conclusão.
Exemplo de solicitação
import os
import dashscope
from dashscope.v2 import DashScopeError
# A configuração abaixo refere-se à região Singapura. Substitua {WorkspaceId} pelo ID real do seu workspace. O valor de region varia conforme a região.
# Para os endpoints de cada região, consulte https://www.alibabacloud.com/help/model-studio/image-to-video-api-reference
client = dashscope.Client(
# Se a variável de ambiente não estiver configurada, defina diretamente a sua API Key do Model Studio: api_key="sk-xxx"
# Para obter uma API Key, consulte https://www.alibabacloud.com/help/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
workspace="{WorkspaceId}",
region="ap-southeast-1",
)
# Use uma URL de imagem acessível publicamente
img_url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/wpimhv/rap.png"
# Defina a URL do áudio
audio_url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/ozwpvi/rap.mp3"
def sample_async_call_i2v():
# Chamada assíncrona, que retorna um task_id
# audio_url / negative_prompt são campos da seção input que não fazem parte da assinatura nomeada e são passados via extra_input
try:
job = client.videos.jobs.create(model='wan2.6-i2v-flash',
prompt='A scene of urban fantasy art. A dynamic graffiti art character. A boy made of spray paint comes to life from a concrete wall. He raps an English song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The lighting comes from a single street lamp, creating a cinematic atmosphere full of high energy and amazing detail. The audio of the video consists entirely of his rap, with no other dialogue or noise.',
image_url=img_url,
extra_input={'audio_url': audio_url,
'negative_prompt': ""},
resolution="720P",
duration=10,
prompt_extend=True,
watermark=False,
seed=12345)
print(job)
print("task_id: %s" % job.task_id)
except DashScopeError as e:
print(f"Código de status HTTP: {e.status_code}")
print(f"Código de erro: {e.code}")
print(f"Mensagem de erro: {e.message}")
print("Consulte a documentação: https://www.alibabacloud.com/help/model-studio/developer-reference/error-code")
return
# Consulte as informações da tarefa assíncrona
try:
snapshot = client.videos.jobs.fetch(job.task_id)
print(snapshot.status)
except DashScopeError as e:
print(f"Código de status HTTP: {e.status_code}")
print(f"Código de erro: {e.code}")
print(f"Mensagem de erro: {e.message}")
print("Consulte a documentação: https://www.alibabacloud.com/help/model-studio/developer-reference/error-code")
# Aguarde a conclusão da tarefa assíncrona (sondagem com backoff exponencial, orçamento total padrão de 24 horas)
try:
done = client.videos.jobs.wait(job)
print(done)
print(done.video_url)
except DashScopeError as e:
print(f"Código de status HTTP: {e.status_code}")
print(f"Código de erro: {e.code}")
print(f"Mensagem de erro: {e.message}")
print("Consulte a documentação: https://www.alibabacloud.com/help/model-studio/developer-reference/error-code")
if __name__ == '__main__':
sample_async_call_i2v()
Exemplo de resposta
- Resposta de criação da tarefa
{
"status_code": 200,
"request_id": "6dc3bf6c-be18-9268-9c27-xxxxxx",
"code": "",
"message": "",
"output": {
"task_id": "686391d9-7ecf-4290-a8e9-xxxxxx",
"task_status": "PENDING",
"video_url": ""
},
"usage": null
}
-
Resposta de consulta da tarefa
A video_url é válida por 24 horas. Baixe o vídeo antes que expire.
{
"status_code": 200,
"request_id": "2794c7a3-fe8c-4dd4-a1b7-xxxxxx",
"code": null,
"message": "",
"output": {
"task_id": "c15d5b14-07c4-4af5-b862-xxxxxx",
"task_status": "SUCCEEDED",
"video_url": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxx.mp4?Expires=xxx",
"submit_time": "2026-01-22 23:24:46.527",
"scheduled_time": "2026-01-22 23:24:46.565",
"end_time": "2026-01-22 23:25:59.978",
"orig_prompt": "A scene of urban fantasy art. A dynamic graffiti art character. A boy made of spray paint comes to life from a concrete wall. He raps an English song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The lighting comes from a single street lamp, creating a cinematic atmosphere full of high energy and amazing detail. The audio of the video consists entirely of his rap, with no other dialogue or noise."
},
"usage": {
"video_count": 1,
"video_duration": 0,
"video_ratio": "",
"duration": 10,
"input_video_duration": 0,
"output_video_duration": 10,
"audio": true,
"SR": 720
}
}
Java SDK
ImportanteCertifique-se de que sua versão do DashScope Java SDK seja pelo menos 2.22.6 antes de executar o código a seguir.
Versões mais antigas podem acionar erros como "url error, please check url!". Para atualizar, consulte Instalar SDK.
Defina o baseHttpApiUrl de acordo com a região do modelo:
Pequim
Constants.baseHttpApiUrl = "https://dashscope.aliyuncs.com/api/v1";
Singapura
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
Substitua WorkspaceId pelo seu ID do Workspace real.
Virgínia
Constants.baseHttpApiUrl = "https://dashscope-us.aliyuncs.com/api/v1";
Frankfurt
Constants.baseHttpApiUrl = "https://{WorkspaceId}.eu-central-1.maas.aliyuncs.com/api/v1";
Substitua WorkspaceId pelo seu ID do Workspace.
Singapura
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
Substitua WorkspaceId pelo seu ID do Workspace real.
Virgínia
Constants.baseHttpApiUrl = "https://dashscope-us.aliyuncs.com/api/v1";
Pequim
Constants.baseHttpApiUrl = "https://dashscope.aliyuncs.com/api/v1";
Frankfurt
Constants.baseHttpApiUrl = "https://{WorkspaceId}.eu-central-1.maas.aliyuncs.com/api/v1";
Ao fazer a chamada, substitua WorkspaceId pelo seu ID do Workspace real.
Código de exemplo
Chamada síncrona
Uma chamada síncrona bloqueia até que a geração do vídeo seja concluída. Este exemplo demonstra três métodos de entrada de imagem: URL pública, codificação Base64 e caminho de arquivo local.
Exemplo de solicitação
// Copyright (c) Alibaba, Inc. and its affiliates.
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.utils.Constants;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Image2Video {
static {
// Set the endpoint. This example uses the Singapore region. For other regions, see: https://www.alibabacloud.com/help/en/model-studio/image-to-video-api-reference
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
// If the environment variable is not set, replace the following line with your API key from Model Studio: apiKey="sk-xxx"
// Get your API key: https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
/**
* Image input methods: Choose one of the following three.
*
* 1. Public URL: Ideal for images that are already publicly accessible.
* 2. Local file: Suitable for local development and testing.
* 3. Base64 encoding: Best for private images or when data must be securely transmitted.
*/
// [Method 1] Public URL
static String imgUrl = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/wpimhv/rap.png";
// [Method 2] Local file path (file:// + absolute path)
// static String imgUrl = "file://" + "/your/path/to/img.png"; // Linux/macOS
// static String imgUrl = "file://" + "C:/your/path/to/img.png"; // Windows
// [Method 3] Base64 encoding
// static String imgUrl = Image2Video.encodeFile("/your/path/to/img.png");
// Set the audio URL
static String audioUrl = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/ozwpvi/rap.mp3";
public static void image2video() throws ApiException, NoApiKeyException, InputRequiredException {
// Set the parameters
Map<String, Object> parameters = new HashMap<>();
parameters.put("prompt_extend", true);
parameters.put("watermark", false);
parameters.put("seed", 12345);
VideoSynthesis vs = new VideoSynthesis();
VideoSynthesisParam param =
VideoSynthesisParam.builder()
.apiKey(apiKey)
.model("wan2.6-i2v-flash")
.prompt("A scene of urban fantasy art. A dynamic graffiti art character. A boy made of spray paint comes to life from a concrete wall. He raps an English song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The lighting comes from a single street lamp, creating a cinematic atmosphere full of high energy and amazing detail. The audio of the video consists entirely of his rap, with no other dialogue or noise.")
.imgUrl(imgUrl)
.audioUrl(audioUrl)
.duration(10)
.parameters(parameters)
.resolution("720P")
.negativePrompt("")
.build();
System.out.println("please wait...");
VideoSynthesisResult result = vs.call(param);
System.out.println(JsonUtils.toJson(result));
}
/**
* Encodes a file into a Base64 string.
* @param filePath The file path.
* @return A Base64 string in the format data:{MIME_type};base64,{base64_data}.
*/
public static String encodeFile(String filePath) {
Path path = Paths.get(filePath);
if (!Files.exists(path)) {
throw new IllegalArgumentException("File does not exist: " + filePath);
}
// Detect MIME type
String mimeType = null;
try {
mimeType = Files.probeContentType(path);
} catch (IOException e) {
throw new IllegalArgumentException("Cannot detect file type: " + filePath);
}
if (mimeType == null || !mimeType.startsWith("image/")) {
throw new IllegalArgumentException("Unsupported or unrecognized image format");
}
// Read file content and encode
byte[] fileBytes = null;
try{
fileBytes = Files.readAllBytes(path);
} catch (IOException e) {
throw new IllegalArgumentException("Cannot read file content: " + filePath);
}
String encodedString = Base64.getEncoder().encodeToString(fileBytes);
return "data:" + mimeType + ";base64," + encodedString;
}
public static void main(String[] args) {
try {
image2video();
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
Exemplo de resposta
A video_url é válida por 24 horas. Baixe o vídeo antes que expire.
{
"request_id": "87c091bb-7a3c-4904-8501-xxxxxx",
"output": {
"task_id": "413ed6e4-5f3a-4f57-8d58-xxxxxx",
"task_status": "SUCCEEDED",
"video_url": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxx.mp4?Expires=xxx",
"orig_prompt": "A scene of urban fantasy art. A dynamic graffiti art character. A boy made of spray paint comes to life from a concrete wall. He raps an English song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The lighting comes from a single street lamp, creating a cinematic atmosphere full of high energy and amazing detail. The audio of the video consists entirely of his rap, with no other dialogue or noise.",
"submit_time": "2026-01-22 23:25:45.729",
"scheduled_time": "2026-01-22 23:25:45.771",
"end_time": "2026-01-22 23:26:44.942"
},
"usage": {
"video_count": 1,
"duration": 10.0,
"input_video_duration": 0.0,
"output_video_duration": 10.0,
"SR": "720"
},
"status_code": 200,
"code": "",
"message": ""
}
Chamada assíncrona
Uma chamada assíncrona retorna imediatamente um ID de tarefa. Em seguida, você consulta o resultado periodicamente ou aguarda a conclusão.
Exemplo de solicitação
// Copyright (c) Alibaba, Inc. and its affiliates.
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisListResult;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.task.AsyncTaskListParam;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.utils.Constants;
import java.util.HashMap;
import java.util.Map;
public class Image2Video {
static {
// Set the endpoint. This example uses the Singapore region. For other regions, see: https://www.alibabacloud.com/help/en/model-studio/image-to-video-api-reference
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
// If the environment variable is not set, replace the following line with your API key from Model Studio: apiKey="sk-xxx"
// Get your API key: https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
// Set the input image URL
static String imgUrl = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/wpimhv/rap.png";
// Set the audio URL
static String audioUrl = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/ozwpvi/rap.mp3";
public static void image2video() throws ApiException, NoApiKeyException, InputRequiredException {
// Set the parameters
Map<String, Object> parameters = new HashMap<>();
parameters.put("prompt_extend", true);
parameters.put("watermark", false);
parameters.put("seed", 12345);
VideoSynthesis vs = new VideoSynthesis();
VideoSynthesisParam param =
VideoSynthesisParam.builder()
.apiKey(apiKey)
.model("wan2.6-i2v-flash")
.prompt("A scene of urban fantasy art. A dynamic graffiti art character. A boy made of spray paint comes to life from a concrete wall. He raps an English song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The lighting comes from a single street lamp, creating a cinematic atmosphere full of high energy and amazing detail. The audio of the video consists entirely of his rap, with no other dialogue or noise.")
.imgUrl(imgUrl)
.audioUrl(audioUrl)
.duration(10)
.parameters(parameters)
.resolution("720P")
.negativePrompt("")
.build();
// Asynchronous call
VideoSynthesisResult task = vs.asyncCall(param);
System.out.println(JsonUtils.toJson(task));
System.out.println("please wait...");
// Get the result
VideoSynthesisResult result = vs.wait(task, apiKey);
System.out.println(JsonUtils.toJson(result));
}
// Get the task list
public static void listTask() throws ApiException, NoApiKeyException {
VideoSynthesis is = new VideoSynthesis();
AsyncTaskListParam param = AsyncTaskListParam.builder().build();
param.setApiKey(apiKey);
VideoSynthesisListResult result = is.list(param);
System.out.println(result);
}
// Get the result of a single task
public static void fetchTask(String taskId) throws ApiException, NoApiKeyException {
VideoSynthesis is = new VideoSynthesis();
// If DASHSCOPE_API_KEY is set as an environment variable, apiKey can be null.
VideoSynthesisResult result = is.fetch(taskId, apiKey);
System.out.println(result.getOutput());
System.out.println(result.getUsage());
}
public static void main(String[] args) {
try {
image2video();
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
Exemplo de resposta
- Resposta de criação da tarefa
{
"request_id": "5dbf9dc5-4f4c-9605-85ea-xxxxxxxx",
"output": {
"task_id": "7277e20e-aa01-4709-xxxxxxxx",
"task_status": "PENDING"
}
}
-
Resposta de consulta da tarefa
A video_url é válida por 24 horas. Baixe o vídeo antes que expire.
{
"request_id": "87c091bb-7a3c-4904-8501-xxxxxx",
"output": {
"task_id": "413ed6e4-5f3a-4f57-8d58-xxxxxx",
"task_status": "SUCCEEDED",
"video_url": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxx.mp4?Expires=xxx",
"orig_prompt": "A scene of urban fantasy art. A dynamic graffiti art character. A boy made of spray paint comes to life from a concrete wall. He raps an English song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The lighting comes from a single street lamp, creating a cinematic atmosphere full of high energy and amazing detail. The audio of the video consists entirely of his rap, with no other dialogue or noise.",
"submit_time": "2026-01-22 23:25:45.729",
"scheduled_time": "2026-01-22 23:25:45.771",
"end_time": "2026-01-22 23:26:44.942"
},
"usage": {
"video_count": 1,
"duration": 10.0,
"input_video_duration": 0.0,
"output_video_duration": 10.0,
"SR": "720"
},
"status_code": 200,
"code": "",
"message": ""
}
Limitações
- Retenção de dados: O
task_ide a URL do vídeo são retidos por 24 horas. Após esse período, não é possível consultá-los ou baixá-los. - Moderação de conteúdo: Todas as entradas (prompts, imagens) e vídeos de saída estão sujeitos à moderação de conteúdo. Violações resultam em um erro
IPInfringementSuspectouDataInspectionFailed. Códigos de erro.
Códigos de erro
Se uma chamada de modelo retornar uma mensagem de erro, consulte Códigos de erro.
Perguntas frequentes
P: Como gerar um vídeo com uma proporção específica?
R: A imagem do primeiro quadro de entrada (img_url) determina a proporção do vídeo de saída. No entanto, uma proporção exata como 3:4 não é garantida, pois podem ocorrer pequenos desvios.
-
Por que ocorrem desvios?
O modelo usa a proporção da imagem de entrada como base e a combina com a contagem total de pixels da faixa de resolução selecionada (
resolution) para calcular a resolução válida mais próxima. Como a largura e a altura de um vídeo devem ser múltiplos de 16, o modelo ajusta a resolução final adequadamente. Consequentemente, a proporção de saída não é garantida como exatamente 3:4, mas estará muito próxima.- Por exemplo, uma imagem de entrada de 750×1000 (proporção 3:4 = 0,75) com
resolutiondefinida como "720P" (um alvo de aproximadamente 920.000 pixels totais) produz uma saída de 816×1104 (proporção ≈ 0,739, aproximadamente 900.000 pixels totais).
- Por exemplo, uma imagem de entrada de 750×1000 (proporção 3:4 = 0,75) com
-
Recomendações:
- Controle a entrada: Para melhores resultados, use uma imagem de primeiro quadro que já tenha a proporção desejada.
- Pós-processamento: Se precisar de uma proporção estrita, corte o vídeo ou adicione barras pretas usando uma ferramenta de edição após a geração.
P: Como obter a lista de permissões de domínio de armazenamento de vídeo?
R: Os vídeos gerados pelos modelos são armazenados no OSS. A API retorna uma URL pública temporária. Para configurar uma lista de permissões de firewall para esta URL de download, observe o seguinte: O armazenamento subjacente pode mudar dinamicamente. Este tópico não fornece uma lista fixa de nomes de domínio do OSS para evitar problemas de acesso causados por informações desatualizadas. Se você tiver requisitos de controle de segurança, entre em contato com seu gerente de conta para obter a lista mais recente de nomes de domínio do OSS.