HiAPI
Blog

Guía de uso

Vidu Q4 Preview imagen a video: convierte una imagen fija de producto en un clip de video corto en 4K

Oct 19, 2026
Vidu Q4 Preview imagen a video: convierte una imagen fija de producto en un clip de video corto en 4K

Ya tienes la imagen fija: una foto de producto, un fotograma principal del producto, un retrato. Para video corto, la tarea es hacer que se mueva: un ritmo vertical de 4–6 segundos, con algo de movimiento de cámara y una pista de audio, y luego superponerlo en una secuencia de gancho / cuerpo / CTA. vidu-q4-preview/image-to-video en la API de hiapi está hecho exactamente para esto. Introduces un primer fotograma y obtienes un clip de 3–16 segundos, hasta 4K, con pista de audio nativa.

Esta es una cadena de producción de extremo a extremo, no una galería de prompts: prepara los primeros fotogramas, genera tres clips asíncronos en lote, refine el ritmo en 4K y exporta H.264 para la web. Cada clip, cada cifra y cada detalle del esquema a continuación proviene de una ejecución real el 2026-10-19: los tres clips ya están generados e insertados, puedes verlos directamente.

Si solo quieres prompts de toma listos para copiar y pegar, lee recetas de prompts de Vidu Q4 Preview imagen a video. Si tu material es un kit de marca (varias imágenes de referencia más una muestra de voz), eso es referencia a video: una tarea distinta que usa otro endpoint. Esta página trata del caso de una sola imagen fija.

Qué acepta realmente el endpoint de imagen a video

Este es el contrato de entrada, reexplorado en vivo durante esta ejecución (solo con valores inválidos, así que la exploración nunca costó nada):

Campo Obligatorio Valores
model Sí vidu-q4-preview/image-to-video
prompt Sí Descripción del movimiento
image_url Sí URL de una única imagen de primer fotograma
resolution No 540p · 720p · 1080p · 2k · 4k
duration No Segundos enteros, 3–16

Cuatro comportamientos determinan cómo construyes la cadena, y los cuatro son fáciles de equivocar:

  1. No existe el campo aspect_ratio. Si lo envías, se rechaza directamente (invalid input: <root>: additional properties 'aspect_ratio' not allowed). El clip hereda la orientación del primer fotograma: una imagen fija 9:16 produce un clip 9:16. La orientación se decide cuando preparas la imagen fija, no al hacer la llamada, así que para video corto debes fijar el formato vertical desde el principio.
  2. resolution define el lado corto, no el largo. En un encuadre vertical, 1080p devuelve 1080×1918 y 720p devuelve 720×1278. Usar 4k con una imagen fija vertical da un gigante de 2160 de ancho (aquí 2160×3836): planifica el presupuesto y la codificación en consecuencia.
  3. Cada clip lleva pista de audio, incluso sin referencia de audio. Las tres salidas traen una pista AAC estéreo de 48 kHz, guiada por el vocabulario sonoro del prompt. Decide si la conservas o la silencias en posproducción; nunca falta.
  4. image_url es singular. Enviar reference_image_urls se rechaza (additional properties 'reference_image_urls' not allowed): ese arreglo pertenece a referencia a video. Entra una imagen fija, sale un clip.

El último punto es la verdadera bifurcación: si necesitas mantener varios ángulos de producto bloqueados juntos, lo que necesitas es referencia a video. Si tienes una buena imagen, imagen a video es más simple y más barato.

Vista general de la cadena

Una secuencia de video corto no es más que N animaciones independientes de un solo fotograma, así que todo se puede paralelizar limpiamente:

  1. Prepara un primer fotograma por cada beat: vertical (9:16) para video corto, porque la orientación queda bloqueada en la imagen.
  2. Envía cada beat como una tarea asíncrona independiente: un POST /v1/tasks por beat; no bloquees las demás tareas esperando a que termine la primera.
  3. Consulta cada taskId hasta success y descarga el mp4 (desde la URL de salida).
  4. Refina el beat en 4K, recodifica HEVC→H.264, concatena o mantén separados, exporta.

Paso 1: prepara los primeros fotogramas

Como tanto la orientación como el lado corto vienen de la imagen fija, la elección de la imagen determina el clip. En esta ejecución generé dos imágenes fijas 9:16 con gpt-image-2/text-to-image: una foto de producto de estudio y un retrato lifestyle. Esta es la imagen de producto con la que empezamos el gancho:

Abajo está la misma escena animada en 4K: un acercamiento lento, un haz de luz que barre el vidrio:

El prompt que lo produjo (escrito y ejecutado para este artículo):

Animate the first frame into a cinematic short-form hook: a slow push-in toward
the amber serum bottle while a soft beam of light sweeps across the glass from
left to right, catching the condensation droplets so they glint. The out-of-focus
eucalyptus leaves behind drift a few millimetres. Unhurried, premium motion.
Subtle ambient whoosh and a soft chime as the light reaches the bottle.

Fíjate en que el prompt solo describe movimiento y sonido: nunca repite qué es el objeto. La imagen fija ya fija el sujeto; a imagen a video solo hay que decirle cómo debe moverse y cómo debe sonar.

Paso 2: enviar, consultar, descargar un beat

La llamada es una sola tarea asíncrona. Enviar:

curl -s -X POST https://api.hiapi.ai/v1/tasks \
  -H "Authorization: Bearer $HIAPI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "vidu-q4-preview/image-to-video",
    "input": {
      "prompt": "Animate the first frame into a cinematic short-form hook ...",
      "image_url": "https://your-storage.example.com/still-product.jpg",
      "resolution": "4k",
      "duration": 4
    }
  }'
# -> {"data": {"taskId": "tk-hiapi-01M597ARAKTTJ9YWRPEXPBAYHJ"}}

Luego consulta la tarea hasta el estado terminal y descarga el resultado:

curl -s https://api.hiapi.ai/v1/tasks/$TASK_ID \
  -H "Authorization: Bearer $HIAPI_TOKEN"
# in progress -> {"data": {"status": "processing"}}
# done        -> {"data": {"status": "success",
#                          "output": [{"url": "https://.../out.mp4", "expireAt": ...}]}}

Dos cosas de la respuesta real que conviene conocer:

  • La URL de salida es temporal. Lleva expireAt, así que descarga los bytes de inmediato a disco o a tu propio almacenamiento: no la enlaces en caliente dentro de una página.
  • Los valores inválidos fallan en la validación, antes de cualquier cobro. Enviar "duration": 99 devuelve invalid input: duration: maximum: got 99, want 16, sin taskId: así se confirmó gratis el límite 3–16 de arriba. Captura este 400 en el cliente y expónlo; significa que la solicitud fue rechazada, no que una tarea falló a mitad del renderizado.

Paso 3: genera el gancho, el cuerpo y la CTA en lote

Como cada beat es una imagen fija → una tarea, los lanzas todos juntos y los consultas juntos, en lugar de ejecutar una cadena bloqueante. En esta ejecución los tres se enviaron de una vez; el beat en 720p y el de 1080p volvieron en minutos, y el gancho en 4K volvió unos minutos después: exactamente por eso envías de forma asíncrona en lugar de llamar en serie y esperar.

El beat de cuerpo lifestyle, animado desde el retrato fijo en 1080p durante seis segundos:

Animate the first frame into a lifestyle short-form beat: a gentle parallax orbit
around the woman as she turns her face a few degrees toward the window light and
her soft smile widens slightly. Loose strands of hair sway in a faint breeze; the
blurred plant leaves behind shift gently. Warm, natural, editorial motion with no
jump cuts. Soft airy room tone.

El beat de tarjeta final CTA, volviendo a la imagen fija del producto en 720p durante cuatro segundos: pequeño, barato y suficiente para una tarjeta de cierre:

Animate the first frame into a clean end-card beat: the serum bottle rotates slowly
and settles to a confident three-quarter angle as the light steadies. Minimal,
product-forward motion that holds on the bottle. A soft sustained ambient tone that
resolves cleanly.

Un bucle mínimo por lote se parece a esto: envía todos los beats, recoge los ID de tarea y luego consulta:

import requests, time

BEATS = [
    {"name": "hook", "image_url": PRODUCT_STILL,  "resolution": "4k",    "duration": 4, "prompt": HOOK},
    {"name": "body", "image_url": PORTRAIT_STILL, "resolution": "1080p", "duration": 6, "prompt": BODY},
    {"name": "cta",  "image_url": PRODUCT_STILL,  "resolution": "720p",  "duration": 4, "prompt": CTA},
]
H = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}

# submit all at once -- do not block between beats
tasks = {}
for b in BEATS:
    r = requests.post("https://api.hiapi.ai/v1/tasks",
                      headers=H, json={"model": "vidu-q4-preview/image-to-video",
                      "input": {k: b[k] for k in ("prompt", "image_url", "resolution", "duration")}})
    tasks[b["name"]] = r.json()["data"]["taskId"]

# poll each saved taskId to a terminal state; never resubmit
done = {}
while len(done) < len(tasks):
    for name, tid in tasks.items():
        if name in done:
            continue
        t = requests.get(f"https://api.hiapi.ai/v1/tasks/{tid}", headers=H).json()["data"]
        if t["status"] == "success":
            done[name] = t["output"][0]["url"]
        elif t["status"] == "fail":
            raise RuntimeError(f"{name} failed: {t.get('error')}")
    time.sleep(15)

Conserva los ID de tarea. Si la red parpadea a mitad de la consulta, vuelve a consultar el ID guardado: nunca reenvíes, o pagarás dos veces por el mismo beat.

Paso 4: refinado en 4K y exportación H.264 para la web

El gancho 4K vuelve como HEVC (H.265), Main 10, 2160×3836: un verdadero máster 4K vertical. HEVC no se reproduce de forma fiable en línea en los navegadores, así que recodifica a H.264 para la entrega web:

# 4K HEVC master -> H.264 web export (downscaled to a 1080-wide delivery copy)
ffmpeg -i hook_4k.mp4 -vf "scale=1080:-2" \
  -c:v libx264 -preset medium -crf 20 -pix_fmt yuv420p \
  -c:a aac -b:a 128k -movflags +faststart hook_web.mp4

Los beats en 1080p y 720p ya vuelven en H.264, así que no necesitan recodificación: solo un remux con -movflags +faststart para que empiecen a reproducirse antes de descargarse por completo. Conserva el HEVC de 2160 de ancho como máster de archivo y entrega el H.264 reducido a la página; ese es el clip de gancho que se reproduce arriba en el paso 1.

A partir de ahí, concatena los tres beats en un único corto vertical, o mantenlos como piezas separadas si tu plataforma prefiere subir el gancho, el cuerpo y la CTA por separado.

Cuánto cuesta realmente un corto de tres beats

El precio es por segundo, se factura según el factor duration y lo determina resolution (en esta ejecución comprobado contra /api/pricing en vivo):

Resolución Precio / segundo
540p $0.0515
720p $0.109
1080p $0.1375
2K $0.2175
4K $0.446

Para ese corto exacto de tres beats de arriba:

Beat Resolución Duración Coste
Gancho 4K 4s $1.784
Cuerpo 1080p 6s $0.825
CTA 720p 4s $0.436
Total video 14s $3.045

Sumando los dos primeros fotogramas de gpt-image-2 a $0.03 cada uno, el corto terminado cuesta unos $3.11 de generación. Solo el gancho 4K representa el 59% de la factura. Baja el gancho a 1080p y los tres beats suman unos $1.81; la prima 4K es una elección que haces por un beat que lo merece —la revelación hero—, mientras que la tarjeta final CTA en 720p es indistinguible a la velocidad a la que el pulgar deja de desplazarse. El desglose completo por modelo está en la página de precios de hiapi.

Preguntas frecuentes

¿Puedo forzar 9:16 en la solicitud? No: no existe el campo aspect_ratio y enviarlo se rechaza. La orientación se hereda del primer fotograma, así que prepara o recorta una imagen fija vertical antes de llamar.

¿Por qué mi clip tiene sonido que no pedí? Vidu Q4 Preview emite una pista de audio nativa en cada clip, sugerida por el vocabulario sonoro del prompt. Si quieres silencio, silencia esa pista en posproducción.

Mi clip 4K no se reproduce en línea, ¿el archivo está dañado? Está bien; el 4K vuelve como HEVC/H.265 y algunos navegadores no lo renderizan en línea. Recodifica a H.264 como se muestra en el paso 4.

¿Puedo pasar varios ángulos de producto en una sola llamada? No en este endpoint: image_url es un único fotograma y reference_image_urls se rechaza aquí. Las referencias múltiples (y la voz) son del endpoint de referencia a video.

¿Cuánto puede durar un beat? Cada clip dura como máximo 16 segundos (el esquema fija el límite de duration en 16). Para piezas más largas, genera varios beats y únelos.

¿Cómo controlo el movimiento de cámara? Descríbelo en el prompt: acercamiento, órbita con paralaje, plano fijo, como en los tres prompts de arriba. Para un catálogo más profundo de lenguaje de cámara, consulta nuestras notas sobre movimientos de cámara cinematográficos en prompts de video con IA.

Empieza a animar tus imágenes fijas

Si tienes una imagen potente, tienes un clip de video corto. Apunta image_url a ella, elige la resolución que corresponda a la función del beat y deja que el lote se ejecute. Consulta el esquema de entrada completo y ejemplos en vivo en la página del modelo Vidu Q4 Preview imagen a video, o usa el inicio rápido de hiapi para conectar el bucle de envío y consulta a tu propio stack.

Artículos relacionados

Ver todos los artículos →

Empieza a crear con artefactos de IA persistentes

Consigue tu API key y llama a modelos de imagen, vídeo y audio a través de una única API basada en tasks.

Leer la documentación de la API