Skip to main content

Referencia de API de Wan - imagen a video - primer fotograma (2.1-2.6)

El modelo de imagen a video Wan genera un video fluido a partir de una imagen de primer fotograma y un prompt de texto.

Documentos relacionados: Guía del usuario
Wan 2.7 - imagen a video admite de primer fotograma a video, de primer y último fotograma a video, y continuación de video. Recomendamos esta versión.La función imagen a video (basada en el primer fotograma) para modelos Wan 2.6 y anteriores solo admite de primer fotograma a video.

Disponibilidad

Su modelo, URL de endpoint y clave de API deben estar en la misma región. Las llamadas entre regiones fallarán.
El código de ejemplo en este tema corresponde a la región de Singapur.
Alibaba Cloud Model Studio ha lanzado dominios específicos de espacio de trabajo para las regiones de China (Beijing) y Singapur. Los nuevos dominios dedicados ofrecen un rendimiento superior y una mayor estabilidad para las solicitudes de inferencia. Recomendamos migrar a los nuevos dominios:
  • China (Pekín): de https://dashscope.aliyuncs.com a https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapur: de https://dashscope-intl.aliyuncs.com a https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com
{WorkspaceId} es su ID de espacio de trabajo, que se encuentra en la página Workspace Details de la consola de Alibaba Cloud Model Studio. El dominio existente permanece totalmente funcional.

Llamada HTTP

Las tareas de imagen a video utilizan invocación asíncrona (típicamente 1–5 minutos): crear tarea -> sondear resultados.

Paso 1: Crear una tarea

  • Singapore
  • Virginia
  • Beijing
  • Fráncfort
POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis
Reemplace {WorkspaceId} con su ID de espacio de trabajo real.
  • Después de crear la tarea, utilice el task_id devuelto para consultar el resultado. El task_id es válido durante 24 horas. No cree tareas duplicadas. En su lugar, utilice el sondeo para recuperar el resultado.
  • Para obtener orientación para principiantes, consulte Llamar a APIs con Postman o cURL.

Parámetros de solicitud

Encabezados
Content-Type string (Requerido)El tipo de contenido de la solicitud. Debe ser application/json.Authorization string (Requerido)Autentica la solicitud con una clave API de Model Studio. Ejemplo: Bearer sk-xxxx.X-DashScope-Async string (Requerido)Habilita el procesamiento asíncrono. Las solicitudes HTTP solo admiten llamadas asíncronas. Debe ser enable.
Si falta este encabezado de solicitud, se devuelve el error "current user api does not support synchronous calls".
Cuerpo de la solicitud
model string (Obligatorio)El nombre del modelo. Modelos disponibles y precios: precios de modelos.Ejemplo: wan2.6-i2v-flash.input object (Obligatorio)Campos de entrada que incluyen el prompt.

Propiedades

prompt string (Opcional)Describe los elementos visuales y las características deseadas del video generado.Admite chino e inglés. Cada carácter cuenta como uno. El texto que exceda el límite se trunca. Límites de longitud por modelo:
  • Modelos de las series Wan2.6 y Wan2.5: Un máximo de 1,500 caracteres.
  • Modelos de las series wan2.2 y wan2.1: Un máximo de 800 caracteres.
Ejemplo: Un gatito corriendo sobre el césped.Consejos para redactar prompts: Guía de prompts de texto a video/imagen a video.negative_prompt string (Opcional)Describe qué excluir del video, restringiendo la salida.Admite chino e inglés. Máximo de 500 caracteres; el texto más largo se trunca.Ejemplo: baja resolución, errores, peor calidad, baja calidad, desfigurado, dedos extra, proporciones deficientes, etc.img_url string (Obligatorio)La URL o datos codificados en Base64 de la imagen inicial.Restricciones de imagen:
  • Formato de imagen: JPEG, JPG, PNG (canal alfa no admitido), BMP o WEBP.
  • Resolución de imagen: Tanto el ancho como la altura deben estar dentro de [240, 8000] píxeles.
  • Tamaño del archivo:
    • Modelos de las series Wan2.6 y Wan2.5: Un máximo de 20 MB.
    • Modelos de las series wan2.2 y wan2.1: Un máximo de 10 MB.
Formatos de entrada admitidos:
  1. URL pública:
  2. Cadena de imagen codificada en Base64:
    • Formato de datos: data:{MIME_type};base64,{base64_data}.
    • Ejemplo: data:image/png;base64,GDU7MtCZzEbTbmRZ...... (truncado por brevedad).
    • Para obtener más detalles, consulte Imagen de entrada.
audio_url string (Opcional)Modelos admitidos: modelos de las series Wan2.6 y Wan2.5.La URL del archivo de audio. El modelo genera el video utilizando este audio.Formatos de entrada admitidos:
  1. URL pública:
Restricciones de audio:
  • Formato: WAV, MP3.
  • Duración: 3–30s.
  • Tamaño del archivo: Un máximo de 15 MB.
  • Manejo fuera de rango: Si la duración del audio excede la duration especificada (5 o 10 segundos), el sistema trunca automáticamente el audio a los primeros 5 o 10 segundos, y el resto se descarta. Si el audio es más corto que la duración del video, el video queda en silencio después de que termina el audio. Por ejemplo, si el audio dura 3 segundos y la duración del video es de 5 segundos, los primeros 3 segundos del video de salida tendrán sonido, y los últimos 2 segundos estarán en silencio.
Ejemplo: https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/ozwpvi/rap.mp3.
parameters object (Opcional)Controles para resolución, duración, reescritura inteligente de prompts y marcas de agua.

Propiedades

resolution string (Opcional)
La resolución afecta directamente el costo. Antes de llamar a la API, confirme los precios de modelos.
Especifica el nivel de resolución del video de salida. El modelo escala la salida a un recuento total de píxeles similar basado en el nivel seleccionado. El modelo mantiene la relación de aspecto de salida lo más cercana posible a la de la imagen de entrada enimg_url. Para obtener más detalles, consulte Preguntas frecuentes.El valor predeterminado y los valores de enumeración disponibles para este parámetro dependen del parámetro model, de la siguiente manera:
  • wan2.6-i2v-flash: Valores válidos: 720P, 1080P. Valor predeterminado: 1080P.
  • wan2.6-i2v: Valores válidos: 720P, 1080P. Valor predeterminado: 1080P.
  • wan2.5-i2v-preview: Valores válidos: 480P, 720P, 1080P. Valor predeterminado: 1080P.
  • wan2.2-i2v-flash: Valores válidos: 480P, 720P. Valor predeterminado: 720P.
  • wan2.2-i2v-plus: Valores válidos: 480P, 1080P. Valor predeterminado: 1080P.
  • wan2.1-i2v-turbo: Valores válidos: 480P, 720P. Valor predeterminado: 720P.
  • wan2.1-i2v-plus: Valores válidos: 720P. Valor predeterminado: 720P.
Ejemplo: 1080P.duration integer (Opcional)
La duración afecta directamente el costo. Antes de llamar a la API, confirme los precios de modelos.
La duración del video de salida, en segundos. Los valores válidos dependen del parámetro model:
  • wan2.6-i2v-flash: Un entero en [2, 15]. Predeterminado: 5.
  • wan2.6-i2v: Un entero en [2, 15]. Predeterminado: 5.
  • wan2.5-i2v-preview: Valores válidos: 5, 10. Predeterminado: 5.
  • wan2.2-i2v-plus: Fijado en 5 segundos y no se puede modificar.
  • wan2.2-i2v-flash: Fijado en 5 segundos y no se puede modificar.
  • wan2.1-i2v-plus: Fijado en 5 segundos y no se puede modificar.
  • wan2.1-i2v-turbo: Valores válidos: 3, 4 o 5. Predeterminado: 5.
Ejemplo: 5.prompt_extend boolean (Opcional)Indica si se debe habilitar la reescritura de prompts. Cuando está habilitado, un LLM reescribe el prompt de entrada. Esto mejora la calidad de generación para prompts más cortos, pero aumenta el tiempo de procesamiento.
  • true (predeterminado)
  • false
Ejemplo: true.shot_type string (Opcional)Modelos admitidos: modelos de la serie Wan2.6.Especifica el tipo de toma del video generado: una sola toma continua o una secuencia de múltiples tomas.Este parámetro solo surte efecto cuando "prompt_extend": true.Prioridad de parámetros: shot_type > prompt. Por ejemplo, si shot_type se establece en "single", incluso si el prompt contiene "generar un video de múltiples tomas", el modelo seguirá generando un video de una sola toma.Valores válidos:
  • single: Valor predeterminado. Genera un video de una sola toma.
  • multi: Genera un video de múltiples tomas.
Ejemplo: single.
Utilice este parámetro cuando necesite un control estricto sobre la estructura narrativa, como una sola toma para demostraciones de productos o múltiples tomas para cortometrajes.
audio boolean (Opcional)
Esto afecta el costo. Los videos con sonido y los videos silenciosos tienen precios diferentes. Consulte los precios en la consola de Model Studio.
Modelo admitido: wan2.6-i2v-flash.Especifica si se debe generar un video con sonido.Prioridad de parámetros: audio > audio_url. Cuando audio=false, la salida sigue siendo un video silencioso incluso si se proporciona un audio_url, y la facturación se basa en un video silencioso.Valores válidos:
  • true: Valor predeterminado. Genera un video con sonido.
  • false: Genera un video silencioso.
Ejemplo: true.watermark boolean (Opcional)Especifica si se debe agregar una marca de agua "AI Generated" en la esquina inferior derecha del video.
  • false: Valor predeterminado. No se agrega ninguna marca de agua.
  • true: Agrega una marca de agua.
Ejemplo: false.seedinteger(Opcional)La semilla de número aleatorio. Rango de valores: [0, 2147483647].Si no se especifica, el sistema genera una. Para una mejor reproducibilidad, utilice una semilla fija.La generación es probabilística. Incluso con la misma semilla, los resultados pueden diferir.Ejemplo: 12345.
  • Narrativa de múltiples tomas
  • Doblaje automático
  • Audio personalizado
  • Video silencioso
  • Prompt negativo
Esta función solo es compatible con los modelos de la serie Wan2.6.Puede habilitarlo configurando "prompt_extend": true y "shot_type":"multi".
# The following URL is for the Singapore region. Replace {WorkspaceId} with your actual workspace ID. URLs differ by region.

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.6-i2v-flash",
    "input": {
        "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.",
        "img_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/wpimhv/rap.png",
        "audio_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/ozwpvi/rap.mp3"
    },
    "parameters": {
        "resolution": "720P",
        "prompt_extend": true,
        "duration": 10,
        "shot_type":"multi"
    }
}'

Parámetros de respuesta

output objectInformación sobre la salida de la tarea.

Propiedades

task_id stringEl ID de la tarea. Válido para consultas durante 24 horas.task_status stringEl estado de la tarea.

Valores de enumeración

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELED
  • UNKNOWN: La tarea no existe o se desconoce su estado.
request_id stringIdentificador único de solicitud para rastreo y solución de problemas.code stringCódigo de error. Se devuelve solo para solicitudes fallidas. Consulte Códigos de error.message stringMensaje de error detallado. Se devuelve solo para solicitudes fallidas. Consulte Códigos de error.
  • Respuesta exitosa
  • Respuesta de error
Guarde el task_id para consultar el estado y el resultado de la tarea.
{
    "output": {
        "task_status": "PENDING",
        "task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
    },
    "request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}

Paso 2: Consultar el resultado de la tarea

  • Singapore
  • Virginia
  • China (Beijing)
  • Fráncfort
GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id}
Reemplace {WorkspaceId} con su ID de espacio de trabajo real.
  • Recomendación de sondeo: La generación de video tarda varios minutos. Utilice un mecanismo de sondeo con un intervalo razonable, como 15 segundos.
  • Transición de estado de la tarea: PENDING → RUNNING → SUCCEEDED o FAILED.
  • Enlace de resultado: Después de que una tarea tenga éxito, se devuelve una URL de video válida durante 24 horas. Descargue y guarde el video en un almacenamiento permanente, como OSS.
  • task_idvalidez: 24 horas. Después de este período, las consultas devuelven el estado de la tarea como UNKNOWN.

Parámetros de solicitud

Encabezados
Authorization string (Requerido)Autentica la solicitud con una clave API de Model Studio. Ejemplo: Bearer sk-xxxx.
Parámetros de ruta
task_id string (Obligatorio)El ID de la tarea.
  • Consultar resultado de la tarea
Reemplace {task_id} con el valor task_id devuelto por la llamada a la API anterior. El task_id es válido para consultas durante 24 horas. Reemplace {WorkspaceId} con su ID de espacio de trabajo real.
curl -X GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id} \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

Parámetros de respuesta

outputobjectLos detalles de salida de la tarea.

Propiedades

task_id stringEl ID de la tarea. Válido para consultas durante 24 horas.task_status stringEl estado de la tarea.

Valores de enumeración

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELED
  • UNKNOWN: La tarea no existe o se desconoce su estado.
Transiciones de estado durante el sondeo:
  • PENDING → RUNNING → SUCCEEDED o FAILED.
  • El estado inicial de la consulta suele ser PENDING o RUNNING.
  • Cuando el estado cambia a SUCCEEDED, la respuesta contiene la URL del video generado.
  • Si el estado es FAILED, revise el mensaje de error y reintente la tarea.
submit_time stringLa hora en que se envió la tarea. La hora está en UTC+8 y el formato es YYYY-MM-DD HH:mm:ss.SSS.scheduled_time stringLa hora en que se ejecutó la tarea. La hora está en UTC+8 y el formato es YYYY-MM-DD HH:mm:ss.SSS.end_time stringLa hora en que se completó la tarea. La hora está en UTC+8 y el formato es YYYY-MM-DD HH:mm:ss.SSS.video_url stringURL del video generado. Se devuelve solo cuando task_status es SUCCEEDED.Válido durante 24 horas. El video está en formato MP4 con codificación H.264.orig_prompt stringEl prompt de entrada original, correspondiente al parámetro de solicitud prompt.actual_prompt stringSi prompt_extend es true, el sistema reescribe el prompt y este campo contiene la versión optimizada.
  • Si prompt_extend=false, este campo no se devuelve.
  • Nota: El modelo wan2.6 no devuelve este campo, independientemente del valor de prompt_extend.
code stringCódigo de error. Se devuelve solo para solicitudes fallidas. Consulte Códigos de error.message stringMensaje de error detallado. Se devuelve solo para solicitudes fallidas. Consulte Códigos de error.
usage objectEstadísticas de uso de la tarea, que se contabilizan únicamente para tareas exitosas.

Propiedades

Parámetros devueltos por modelos de la serie wan2.6

input_video_duration integerLa duración del video de entrada en segundos. Esto siempre es 0, ya que actualmente no se admite la entrada de video.output_video_duration integerSe devuelve solo cuando se utilizan modelos wan2.6.La duración del video de salida en segundos. Este valor coincide con input.duration.duration integerLa duración total del video, utilizada para facturación.Fórmula de facturación: duration=input_video_duration+output_video_duration.SR integerSe devuelve solo cuando se utilizan modelos wan2.6. El nivel de resolución del video generado. Ejemplo: 720.video_count integerEl número de videos generados. Esto está fijado en 1.audiobooleanSe devuelve solo cuando se utiliza el modelo wan2.6-i2v-flash. Indica si la salida es un video con audio.
duration integerLa duración del video generado en segundos. Valores posibles: 5, 10.Fórmula de facturación: Costo = Duración del video en segundos × Precio unitario.SR integerLa resolución del video generado. Valores posibles: 480, 720, 1080.video_count integerEl número de videos generados. Esto está fijado en 1.
video_duration integerLa duración del video generado en segundos. Valores posibles: 3, 4, 5.Fórmula de facturación: Costo = Duración del video en segundos × Precio unitario.video_ratio stringLa relación de aspecto del video generado. Este valor siempre es "standard".video_count integerEl número de videos generados. Esto está fijado en 1.
request_id stringIdentificador único de solicitud para rastreo y solución de problemas.
  • Tarea exitosa
  • Tarea fallida
  • Consulta de tarea caducada
Las URL de video son válidas solo durante 24 horas y luego se eliminan automáticamente. Guarde los videos generados de inmediato.
{
    "request_id": "2ca1c497-f9e0-449d-9a3f-xxxxxx",
    "output": {
        "task_id": "af6efbc0-4bef-4194-8246-xxxxxx",
        "task_status": "SUCCEEDED",
        "submit_time": "2025-09-25 11:07:28.590",
        "scheduled_time": "2025-09-25 11:07:35.349",
        "end_time": "2025-09-25 11:17:11.650",
        "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.",
        "video_url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?Expires=xxx"
    },
    "usage": {
        "duration": 10,
        "input_video_duration": 0,
        "output_video_duration": 10,
        "video_count": 1,
        "SR": 720
    }
}

Llamadas del SDK de DashScope

Los nombres de los parámetros del SDK son en gran medida consistentes con la API HTTP, siguiendo las convenciones de cada lenguaje. Las tareas de imagen a video suelen tardar 1–5 minutos. El SDK encapsula el proceso de llamada HTTP asíncrona y admite tanto llamadas síncronas como asíncronas.
El tiempo de procesamiento depende de la cola de tareas y del estado del servicio.

SDK de Python

Asegúrese de que su versión del SDK de Python de DashScope sea al menos2.0.1 antes de ejecutar el siguiente código.Las versiones anteriores podrían provocar errores como "url error, please check url!". Para actualizar, consulte Instalar el SDK.
Establezca region según la región del modelo (se pasa al construir el Client; el valor de region varía según la región):
  • Singapore
  • Virginia
  • Beijing
  • Fráncfort
region="ap-southeast-1"
Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

Código de ejemplo

  • Llamada síncrona
  • Llamada asíncrona
Una llamada síncrona se bloquea hasta que finaliza la generación del video. Este ejemplo demuestra tres métodos de entrada de imagen: URL pública, codificación Base64 y ruta de archivo local.
Ejemplo de solicitud
import base64
import os
import mimetypes
import dashscope
from dashscope.v2 import DashScopeError

# La siguiente configuración corresponde a la región de Singapur. Sustituya {WorkspaceId} por el ID real de su espacio de trabajo. El valor de region varía según la región.
# Para consultar los endpoints de cada región, véase https://www.alibabacloud.com/help/model-studio/image-to-video-api-reference
client = dashscope.Client(
    # Si la variable de entorno no está configurada, establezca directamente su clave de API de Model Studio: api_key="sk-xxx"
    # Para obtener una clave de API, véase https://www.alibabacloud.com/help/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    workspace="{WorkspaceId}",
    region="ap-southeast-1",
)

# --- Función auxiliar para la codificación 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 imagen no admitido o no reconocido")
    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 imagen:
A continuación se muestran tres formas de proporcionar una imagen. Elija una.

1. URL pública: ideal para imágenes que ya son de acceso público.
2. Archivo local: adecuado para desarrollo y pruebas locales.
3. Codificación Base64: ideal para imágenes privadas o cuando los datos deben transmitirse de forma segura.
"""

# [Método 1] Usar una URL de imagen accesible públicamente
# Ejemplo: usar una URL de imagen pública
img_url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/wpimhv/rap.png"

# [Método 2] Usar un archivo local (admite rutas absolutas y relativas)
# Formato: file:// + ruta del archivo
# Ejemplo (ruta absoluta):
# img_url = "file://" + "/path/to/your/img.png"    # Linux/macOS
# img_url = "file://" + "C:/path/to/your/img.png"  # Windows
# Ejemplo (ruta relativa):
# img_url = "file://" + "./img.png"                # Relativa al directorio del script en ejecución

# [Método 3] Usar una imagen codificada en Base64
# img_url = encode_file("./img.png")

# Establezca la URL del audio
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 es una llamada de un solo paso (envía la tarea y espera a que finalice) y devuelve un Job completado
    # audio_url / negative_prompt son campos de la sección input que no forman parte de la firma con nombre y se pasan mediante 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 estado HTTP: {e.status_code}")
        print(f"Código de error: {e.code}")
        print(f"Mensaje de error: {e.message}")
        print("Consulte la documentación: https://www.alibabacloud.com/help/model-studio/developer-reference/error-code")

if __name__ == '__main__':
    sample_call_i2v()
Ejemplo de respuesta
El video_url es válido durante 24 horas. Descargue el video antes de que caduque.
{
    "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
    }
}

SDK de Java

Asegúrese de que su versión del SDK de Java de DashScope sea al menos2.22.6 antes de ejecutar el siguiente código.Las versiones anteriores podrían provocar errores como "url error, please check url!". Para actualizar, consulte Instalar el SDK.
Establezca baseHttpApiUrl según la región del modelo:
  • Singapore
  • Virginia
  • Beijing
  • Fráncfort
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

Código de ejemplo

  • Llamada síncrona
  • Llamada asíncrona
Una llamada síncrona se bloquea hasta que finaliza la generación del video. Este ejemplo demuestra tres métodos de entrada de imagen: URL pública, codificación Base64 y ruta de archivo local.
Ejemplo de solicitud
// 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/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/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);
    }
}
Ejemplo de respuesta
El video_url es válido durante 24 horas. Descargue el video antes de que caduque.
{
    "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": ""
}

Limitaciones

  • Retención de datos: El task_id y la URL del video se conservan durante 24 horas. Después de este periodo, no podrá consultarlos ni descargarlos.
  • Moderación de contenido: Todas las entradas (prompts, imágenes) y los videos de salida están sujetos a moderación de contenido. Las infracciones resultan en un error IPInfringementSuspect o DataInspectionFailed. Códigos de error.

Limitaciones conocidas

Cuando wan2.6-i2v-flash genera una rotación continua de un objeto circular (como un anillo, un engranaje o la esfera de un reloj), el video puede detenerse durante aproximadamente 1 segundo alrededor de la marca de 3 segundos. Para evitar este problema, utilice el modelo Wan 2.7 - imagen a video en su lugar.

Códigos de error

Si una llamada al modelo devuelve un mensaje de error, consulte Códigos de error.

FAQ

P: ¿Cómo generar un video con una relación de aspecto específica?

R: La imagen de primer fotograma de entrada (img_url) determina la relación de aspecto del video de salida. Sin embargo, no se garantiza una relación exacta como 3:4, ya que pueden ocurrir desviaciones menores.
  • ¿Por qué ocurren desviaciones? El modelo utiliza la relación de aspecto de la imagen de entrada como línea base y la combina con el recuento total de píxeles del nivel de resolución seleccionado (resolution) para calcular la resolución válida más cercana. Dado que el ancho y la altura de un video deben ser múltiplos de 16, el modelo ajusta la resolución final en consecuencia. Como resultado, no se garantiza que la relación de aspecto de salida sea exactamente 3:4, pero será muy cercana.
    • Por ejemplo, una imagen de entrada de 750×1000 (relación de aspecto 3:4 = 0.75) con resolution establecido en "720P" (un objetivo de aproximadamente 920,000 píxeles totales) produce una salida de 816×1104 (relación de aspecto ≈ 0.739, aproximadamente 900,000 píxeles totales).
  • Recomendaciones:
    • Controlar la entrada: Para obtener mejores resultados, utilice una imagen de primer fotograma que ya tenga su relación de aspecto objetivo.
    • Posprocesamiento: Si necesita una relación de aspecto estricta, recorte el video o agregue barras negras utilizando una herramienta de edición después de la generación.

P: ¿Cómo obtener la lista de permitidos de dominios de almacenamiento de video?

R: Los videos generados por los modelos se almacenan en OSS. La API devuelve una URL pública temporal. Para configurar una lista blanca de firewall para esta URL de descarga, tenga en cuenta lo siguiente: El almacenamiento subyacente puede cambiar dinámicamente. Este tema no proporciona una lista blanca fija de nombres de dominio de OSS para evitar problemas de acceso causados por información obsoleta. Si tiene requisitos de control de seguridad, póngase en contacto con su gerente de cuenta para obtener la lista más reciente de nombres de dominio de OSS.