HiAPI
Blogue

Guia de uso

Vidu Q4 Preview 图生视频:将产品静帧变成 4K 短视频片段

Oct 19, 2026
Vidu Q4 Preview 图生视频:将产品静帧变成 4K 短视频片段

Você já tem um quadro estático — uma foto de produto, um frame do produto principal, um retrato. Para vídeos curtos, a tarefa é fazê-lo se mover: um clipe vertical de 4–6 segundos, com um pouco de movimento de câmera e faixa de áudio, e depois sobrepor em uma sequência de gancho / corpo / CTA. O vidu-q4-preview/image-to-video na API hiapi foi criado exatamente para isso. Insira um primeiro frame e receba um clipe de 3–16 segundos, até 4K, com faixa de áudio nativa.

Este é um pipeline de produção de ponta a ponta, não uma galeria de prompts: prepare o primeiro frame, gere três clipes assíncronos em lote, refine o clipe em 4K, exporte H.264 para a web. Cada clipe, cada número e cada detalhe de schema abaixo vêm de uma execução real em 2026-10-19 — três clipes foram gerados e incorporados, você pode assisti-los diretamente.

Se você só quer prompts de câmera prontos para copiar e colar, leia Receitas de prompts de imagem para vídeo do Vidu Q4 Preview. Se o seu material é um kit de marca (várias imagens de referência mais uma amostra de voz), isso é referência para vídeo — uma tarefa diferente, usando um endpoint diferente. Esta página trata do caso de um único quadro estático.

O que o endpoint de imagem para vídeo realmente aceita

Abaixo está a convenção de entrada, re-testada ao vivo durante esta execução (apenas valores inválidos foram usados, então os testes nunca custaram nada):

Campo Obrigatório Valores
model Sim vidu-q4-preview/image-to-video
prompt Sim Descrição do movimento
image_url Sim URL de uma imagem de primeiro frame única
resolution Não 540p · 720p · 1080p · 2k · 4k
duration Não Segundos inteiros, 3–16

Quatro comportamentos determinam como você monta o pipeline, e todos os quatro são fáceis de errar:

  1. Não há campo aspect_ratio. Enviá-lo é rejeitado diretamente (invalid input: <root>: additional properties 'aspect_ratio' not allowed). O clipe herda a orientação do primeiro frame — um quadro estático 9:16 produz um clipe 9:16. A orientação é decidida quando você produz o quadro estático, não no momento da chamada, então para vídeos curtos você precisa definir o vertical desde o início.
  2. resolution define o lado curto, não o lado longo. Em uma imagem vertical, 1080p retorna 1080×1918, e 720p retorna 720×1278. Usar 4k em um quadro estático vertical resulta em um gigante de 2160 de largura (aqui 2160×3836) — planeje o orçamento e a codificação de acordo.
  3. Cada clipe tem uma faixa de áudio, mesmo sem referência de áudio. As três saídas tinham uma faixa de áudio AAC estéreo de 48 kHz, guiada pelo vocabulário sonoro no prompt. Planeje manter ou silenciar na pós-produção; ela nunca está ausente.
  4. image_url é singular. Enviar reference_image_urls é rejeitado (additional properties 'reference_image_urls' not allowed) — esse array pertence ao referência para vídeo. Um quadro estático entra, um clipe sai.

O último ponto é a verdadeira bifurcação: se você precisa travar vários ângulos de produto juntos, você precisa de referência para vídeo. Se você tem uma boa imagem, imagem para vídeo é mais simples e mais barato.

Visão geral do pipeline

Uma sequência de vídeo curto nada mais é do que N animações independentes de quadro único, então tudo pode ser paralelizado de forma limpa:

  1. Prepare um primeiro frame para cada clipe — vertical (9:16) para vídeos curtos, porque a orientação é fixada na imagem.
  2. Envie cada clipe como uma tarefa assíncrona independente — um POST /v1/tasks por vez; não bloqueie as outras tarefas antes que a primeira termine.
  3. Faça polling de cada taskId até success e baixe o mp4 (da URL de saída).
  4. Refine o clipe em 4K, recodifique HEVC→H.264, concatene ou mantenha separado e exporte.

Passo 1 — Prepare o primeiro frame

Como a orientação e o lado curto vêm do quadro estático, sua escolha de imagem determina o clipe. Nesta execução, usei gpt-image-2/text-to-image para gerar dois quadros estáticos 9:16: uma foto de produto em estúdio e um retrato lifestyle. Esta é a foto de produto com a qual começamos o gancho:

Abaixo está a mesma cena animada em 4K — um push-in lento, um feixe de luz atravessando o vidro:

O prompt que o gerou (escrito e executado para este artigo):

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.

Observe que o prompt descreve apenas movimento e som — ele nunca repete o que é o objeto. O quadro estático já fixa o sujeito; imagem para vídeo só precisa saber como ele deve se mover e soar.

Passo 2 — Envie, faça polling, baixe um clipe

A chamada é uma única tarefa assíncrona. Envie:

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"}}

Depois faça polling da tarefa até o estado terminal e baixe o 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": ...}]}}

Duas coisas valem a pena saber a partir de respostas reais:

  • A URL de saída é temporária. Ela tem um expireAt, então baixe os bytes imediatamente para o disco ou para o seu próprio armazenamento — não faça hotlink na página.
  • Valores inválidos falham na validação, antes de qualquer cobrança. Enviar "duration": 99 retorna invalid input: duration: maximum: got 99, want 16, sem taskId — é exatamente assim que o limite 3–16 acima foi confirmado de graça. Capture esse 400 no cliente e exponha-o; significa que a requisição foi rejeitada, não que a tarefa falhou no meio da renderização.

Passo 3 — Gere em lote gancho, corpo e CTA

Como cada clipe é um quadro estático → uma tarefa, você os dispara juntos e faz polling juntos, em vez de rodar uma cadeia bloqueante. Nesta execução, os três foram enviados de uma vez; os clipes 720p e 1080p retornaram em minutos, e o gancho 4K alguns minutos depois — é por isso que você envia de forma assíncrona em vez de chamar em série e esperar.

O clipe de corpo lifestyle, animado a partir do retrato estático em 1080p por 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.

O clipe de cartão final CTA, voltando ao quadro estático do produto em 720p por quatro segundos — pequeno, barato e suficiente para um cartão de encerramento:

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.

Um loop de lote mínimo fica mais ou menos assim — envie todos os clipes, colete os IDs de tarefa e faça polling:

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)

Mantenha os IDs de tarefa. Se a rede falhar no meio do polling, faça polling novamente com os IDs salvos — nunca reenvie, ou você pagará duas vezes pelo mesmo clipe.

Passo 4 — Refino 4K, exportação H.264 para a web

O gancho 4K retorna como HEVC (H.265), Main 10, 2160×3836 — um verdadeiro master 4K vertical. HEVC não é reproduzido de forma confiável inline em navegadores, então recodifique para H.264 para entrega na 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

Os clipes 1080p e 720p já voltam em H.264, então não precisam de recodificação — apenas um remux com -movflags +faststart para que comecem a tocar antes do download completo. Mantenha o HEVC de 2160 de largura como master de arquivo e entregue o H.264 reduzido na página; esse é o clipe de gancho reproduzido no topo do Passo 1.

A partir daí, concatene os três clipes em um curta vertical ou mantenha-os como assets separados se sua plataforma quiser enviar gancho, corpo e CTA separadamente.

Quanto custa realmente um curta de três clipes

O preço é por segundo, cobrado pelo fator duration, determinado por resolution (nesta execução verificado contra o /api/pricing ao vivo):

Resolução Preço / segundo
540p $0.0515
720p $0.109
1080p $0.1375
2K $0.2175
4K $0.446

Para exatamente aquele curta de três clipes acima:

Clipe Resolução Duração Custo
Gancho 4K 4s $1.784
Corpo 1080p 6s $0.825
CTA 720p 4s $0.436
Total do vídeo 14s $3.045

Adicione os dois primeiros frames gpt-image-2 a $0.03 cada, e o curta finalizado custa cerca de $3.11 para gerar. O gancho 4K sozinho representa 59% da conta. Reduza o gancho para 1080p e os três clipes totalizam cerca de $1.81; o prêmio do 4K é uma escolha que você faz por um clipe que vale a pena — a revelação hero — enquanto o cartão final CTA em 720p é indistinguível na velocidade de um polegar deslizando. A divisão completa por modelo está na página de preços da hiapi.

Perguntas frequentes

Posso forçar 9:16 na requisição? Não — não há campo aspect_ratio, e enviá-lo é rejeitado. A orientação é herdada do primeiro frame, então produza ou corte um quadro estático vertical antes da chamada.

Por que meu clipe tem som que eu não pedi? O Vidu Q4 Preview gera uma faixa de áudio nativa em cada clipe, sugerida pelo vocabulário sonoro no prompt. Se quiser silêncio, silencie essa faixa na pós-produção.

Meu clipe 4K não reproduz inline — o arquivo está corrompido? Ele está bem; o 4K retorna como HEVC/H.265, que alguns navegadores não renderizam inline. Recodifique para H.264 conforme mostrado no Passo 4.

Posso enviar vários ângulos de produto em uma chamada? Não neste endpoint — image_url é um frame único, e reference_image_urls é rejeitado aqui. Múltiplas referências (e áudio) são o endpoint de referência para vídeo.

Qual é o comprimento máximo de um clipe? Cada clipe pode ter até 16 segundos (o schema define o teto de duration em 16). Para trabalhos mais longos, gere vários clipes e concatene-os.

Como controlo o movimento de câmera? Descreva-o no prompt — push-in, órbita parallax, estático — como nos três prompts acima. Para um catálogo mais aprofundado de linguagem de movimento de câmera, veja nossas notas sobre movimentos de câmera cinematográficos em prompts de vídeo com IA.

Comece a animar seus quadros estáticos

Se você tem uma imagem forte, você tem um clipe de vídeo curto. Aponte image_url para ela, escolha a resolução que corresponde à função do clipe e deixe o lote rodar. Veja o schema completo de entrada e exemplos ao vivo na página do modelo Vidu Q4 Preview imagem para vídeo, ou use o início rápido da hiapi para integrar o loop de envio e polling à sua própria stack.

Artigos relacionados

Ver todos os artigos →

Comece a criar com artefactos de IA persistentes

Obtenha a sua chave de API e chame modelos de imagem, vídeo e áudio através de uma única API baseada em tasks.

Ler a documentação da API