HiAPI
Blog

Guide d'utilisation

Vidu Q4 Preview image-vers-vidéo : transformez une image fixe de produit en un court clip vidéo 4K

Oct 19, 2026
Vidu Q4 Preview image-vers-vidéo : transformez une image fixe de produit en un court clip vidéo 4K

Vous avez déjà l'image fixe — une photo de produit, une image clé de produit, un portrait. Pour la vidéo courte, la mission est de la faire bouger : un rythme vertical de 4 à 6 secondes, avec un peu de mouvement de caméra et une piste audio, puis un montage en séquence accroche / corps / CTA. vidu-q4-preview/image-to-video sur l'API hiapi est conçu exactement pour ça. Entrez une première image, récupérez un clip de 3 à 16 secondes, jusqu'à 4K, avec une piste audio native.

C'est une chaîne de production de bout en bout, pas une galerie de prompts : préparez la première image, générez trois clips asynchrones en lot, peaufinez le rythme 4K, exportez en H.264 pour le web. Chaque clip, chaque chiffre et chaque détail de schéma ci-dessous provient d'une exécution réelle du 2026-10-19 — les trois clips ont été générés et intégrés en ligne, vous pouvez les regarder directement.

Si vous voulez seulement des prompts de plan à copier-coller, lisez Recettes de prompts image-vers-vidéo Vidu Q4 Preview. Si votre matériel est un kit de marque (plusieurs images de référence plus un échantillon sonore), c'est de l'image-vers-vidéo par référence — une tâche différente, avec un point de terminaison différent. Cette page traite du cas d'une seule image fixe.

Ce que le point de terminaison image-vers-vidéo accepte réellement

Voici la convention d'entrée, re-sondée en direct lors de cette exécution (uniquement avec des valeurs invalides, donc la sonde n'a jamais coûté un centime) :

Champ Requis Valeurs
model Oui vidu-q4-preview/image-to-video
prompt Oui Description du mouvement
image_url Oui Une URL d'image de première frame unique
resolution Non 540p · 720p · 1080p · 2k · 4k
duration Non Secondes entières, 3–16

Quatre comportements déterminent la façon dont vous construisez la chaîne, et ces quatre points sont faciles à manquer :

  1. Pas de champ aspect_ratio. Envoyer ce champ est directement rejeté (invalid input: <root>: additional properties 'aspect_ratio' not allowed). Le clip hérite de l'orientation de la première image — une image fixe 9:16 produit un clip 9:16. L'orientation se décide au moment où vous créez l'image fixe, pas à l'appel, donc pour de la vidéo courte, vous devez définir le vertical dès le départ.
  2. resolution définit le petit côté, pas le grand. Sur une image verticale, 1080p renvoie 1080×1918, 720p renvoie 720×1278. Avec une image fixe verticale, 4k donne un géant de 2160 de large (ici 2160×3836) — planifiez le budget et l'encodage en conséquence.
  3. Chaque clip a une piste audio, même sans référence audio. Les trois sorties portent une piste AAC stéréo à 48 kHz, pilotée par le vocabulaire sonore du prompt. Prévoyez de la garder ou de la couper en post-production ; elle n'est jamais absente.
  4. image_url est au singulier. Envoyer reference_image_urls est rejeté (additional properties 'reference_image_urls' not allowed) — ce tableau appartient à l'image-vers-vidéo par référence. Une image fixe entre, un clip sort.

Ce dernier point est la vraie bifurcation : si vous devez verrouiller plusieurs angles de produit ensemble, c'est l'image-vers-vidéo par référence qu'il vous faut. Si vous avez une bonne image, l'image-vers-vidéo est plus simple et moins cher.

Aperçu de la chaîne

Une séquence de vidéo courte n'est rien d'autre que N animations indépendantes d'une seule image, donc tout se parallélise proprement :

  1. Une première image par rythme — en vertical (9:16) pour la vidéo courte, car l'orientation est verrouillée sur l'image.
  2. Soumettez chaque rythme comme une tâche asynchrone indépendante — un POST /v1/tasks par rythme ; ne bloquez pas les autres avant que le premier soit terminé.
  3. Interrogez chaque taskId jusqu'à success, téléchargez le mp4 (depuis l'URL de sortie).
  4. Peaufinez le rythme 4K, réencodez HEVC→H.264, concaténez ou gardez séparé, exportez.

Étape 1 — Préparer la première image

Comme l'orientation et le petit côté viennent de l'image fixe, votre choix d'image détermine le clip. Pour cette exécution, j'ai généré deux images fixes 9:16 avec gpt-image-2/text-to-image : une image produit en studio et un portrait lifestyle. Voici l'image produit qui démarre notre accroche :

Ci-dessous, la même image animée en 4K — un lent travelling avant, un rayon de lumière balayant le verre :

Le prompt qui l'a produit (écrit et exécuté pour cet article) :

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.

Remarquez que le prompt ne décrit que le mouvement et le son — il ne redit jamais ce qu'est l'objet. L'image fixe a déjà fixé le sujet ; l'image-vers-vidéo a seulement besoin qu'on lui dise comment il doit bouger et sonner.

Étape 2 — Soumettre, interroger, télécharger un rythme

L'appel est une tâche asynchrone unique. Soumission :

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

Ensuite, interrogez la tâche jusqu'à l'état terminal et téléchargez le résultat :

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": ...}]}}

Deux choses à retenir de la réponse réelle :

  • L'URL de sortie est temporaire. Elle porte un expireAt, donc téléchargez immédiatement les octets sur disque ou dans votre propre stockage — ne la liez pas en direct dans la page.
  • Les valeurs invalides échouent à la validation, avant toute facturation. Envoyer "duration": 99 renvoie invalid input: duration: maximum: got 99, want 16, sans taskId — c'est précisément ainsi que la borne 3–16 ci-dessus a été confirmée gratuitement. Capturez ce 400 côté client et exposez-le ; cela signifie que la requête a été rejetée, pas que la tâche a échoué en cours de rendu.

Étape 3 — Générer en lot l'accroche, le corps et le CTA

Chaque rythme étant une image fixe → une tâche, vous les lancez ensemble et les interrogez ensemble, plutôt que d'exécuter une chaîne bloquante. Lors de cette exécution, les trois ont été envoyés en une fois ; les rythmes 720p et 1080p sont revenus en quelques minutes, l'accroche 4K quelques minutes après — c'est exactement pourquoi il faut soumettre en asynchrone plutôt qu'appeler en série et attendre.

Le rythme corps lifestyle, animé à partir du portrait fixe en 1080p pendant six secondes :

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.

Le rythme carte de fin CTA, retour à l'image fixe du produit en 720p quatre secondes — petit, pas cher, largement suffisant pour une carte de fin :

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.

Une boucle de lot minimale ressemble à ceci — soumettez tous les rythmes, collectez les ID de tâche, puis interrogez :

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)

Conservez les ID de tâche. Si le réseau vacille en cours d'interrogation, interrogez à nouveau l'ID sauvegardé — ne soumettez jamais à nouveau, sinon vous payez deux fois pour le même rythme.

Étape 4 — Peaufiner le 4K, exporter en H.264 pour le web

L'accroche 4K revient en HEVC (H.265), Main 10, 2160×3836 — un véritable master 4K vertical. HEVC ne se lit pas de manière fiable en ligne dans les navigateurs, donc réencodez en H.264 pour la livraison 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

Les rythmes 1080p et 720p reviennent déjà en H.264, donc ils n'ont pas besoin d'être réencodés — juste un remux -movflags +faststart pour qu'ils commencent à jouer avant le téléchargement complet. Gardez le HEVC de 2160 de large comme master d'archive, et livrez le H.264 sous-échantillonné sur la page ; c'est le clip d'accroche qui joue en haut de l'étape 1.

À partir de là, soit vous concaténez les trois rythmes en un court vertical, soit vous les gardez comme éléments séparés si votre plateforme préfère téléverser l'accroche, le corps et le CTA séparément.

Ce que coûte réellement un court métrage en trois rythmes

La tarification est à la seconde, facturée selon le facteur duration, déterminée par resolution (vérifié lors de cette exécution contre le /api/pricing en direct) :

Résolution Prix / seconde
540p $0.0515
720p $0.109
1080p $0.1375
2K $0.2175
4K $0.446

Pour ce court métrage exact en trois rythmes :

Rythme Résolution Durée Coût
Accroche 4K 4s $1.784
Corps 1080p 6s $0.825
CTA 720p 4s $0.436
Total vidéo 14s $3.045

Ajoutez deux premières images gpt-image-2 à $0.03 chacune, et le court métrage terminé coûte environ $3.11. L'accroche 4K représente à elle seule 59 % de la facture. Passez l'accroche en 1080p et les trois rythmes totalisent environ $1.81 ; la prime 4K est un choix que vous faites pour un rythme qui le mérite — la révélation héro — et la carte de fin CTA en 720p est indiscernable à la vitesse où le pouce fait défiler. La grille tarifaire complète par modèle est sur la page de tarification hiapi.

Questions fréquentes

Puis-je forcer le 9:16 dans la requête ? Non — il n'y a pas de champ aspect_ratio, et l'envoyer est rejeté. L'orientation est héritée de la première image, donc créez ou recadrez une image fixe verticale avant l'appel.

Pourquoi mon clip a-t-il un son que je n'ai pas demandé ? Vidu Q4 Preview produit une piste audio native sur chaque clip, suggérée par le vocabulaire sonore du prompt. Si vous voulez du silence, coupez la piste en post-production.

Mon clip 4K ne se lit pas en ligne — le fichier est-il corrompu ? Il est bon ; le 4K revient en HEVC/H.265, que certains navigateurs ne rendent pas en ligne. Réencodez en H.264 comme indiqué à l'étape 4.

Puis-je passer plusieurs angles de produit dans un seul appel ? Pas sur ce point de terminaison — image_url est une image unique, et reference_image_urls est rejeté ici. Les références multiples (et le son) relèvent du point de terminaison image-vers-vidéo par référence.

Quelle est la durée maximale d'un rythme ? Chaque clip fait au maximum 16 secondes (le schéma plafonne duration à 16). Pour des œuvres plus longues, générez plusieurs rythmes et concaténez-les.

Comment contrôler le mouvement de caméra ? Décrivez-le dans le prompt — travelling avant, orbite parallaxe, plan fixe — comme les trois prompts ci-dessus. Pour un catalogue plus approfondi du langage de mouvement de caméra, consultez nos notes sur les mouvements de caméra cinématographiques pour prompts vidéo IA.

Commencez à faire bouger vos images fixes

Si vous avez une image forte, vous avez un clip de vidéo courte. Pointez image_url vers elle, choisissez la résolution qui correspond au rôle du rythme, et laissez le lot tourner. Consultez le schéma d'entrée complet et des exemples en direct sur la page du modèle Vidu Q4 Preview image-vers-vidéo, ou utilisez le démarrage rapide hiapi pour brancher la boucle de soumission et d'interrogation dans votre propre stack.

Articles similaires

Voir tous les articles →

Commencez avec des artefacts IA persistants

Obtenez votre clé API et appelez des modèles d'image, de vidéo et d'audio via une API unique basée sur les tasks.

Lire la documentation de l'API