Guia de uso
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:
- 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. resolutiondefine o lado curto, não o lado longo. Em uma imagem vertical,1080pretorna 1080×1918, e720pretorna 720×1278. Usar4kem 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.- 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.
image_urlé singular. Enviarreference_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:
- Prepare um primeiro frame para cada clipe — vertical (9:16) para vídeos curtos, porque a orientação é fixada na imagem.
- Envie cada clipe como uma tarefa assíncrona independente — um
POST /v1/taskspor vez; não bloqueie as outras tarefas antes que a primeira termine. - Faça polling de cada
taskIdatésuccesse baixe o mp4 (da URL de saída). - 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": 99retornainvalid input: duration: maximum: got 99, want 16, semtaskId— é 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 →-
Guia de uso
Guia de introdução ao seedream-5.0-pro/image-to-image: capacidades, preços e pontos de integração
Limites de capacidade, modelo de cobrança e práticas de integração de engenharia do modelo de edição de imagem da ByteDance
-
Guia de uso
Guia prático do seedream-5.0-pro text-to-image: limites de capacidade, integração via API e controle de custos
Perspectiva prática para desenvolvedores: dos pontos-chave dos parâmetros à estimativa de custo de US$ 0,05 por imagem
-
Guia de uso
Guia de introdução ao Hailuo 2.3 Fast image-to-video: limites de capacidade, preços e práticas de integração
Pontos-chave de seleção e integração do modelo image-to-video MiniMax para desenvolvedores