Registre de Génération Vidéo
Ne fait qu'une seule chose : faire bouger ce qui a été déjà figé, et laisser une trace traçable.
Le modèle vidéo est ici responsable de trois choses : le mouvement, le cadrage, et la lecture de la voix off. L'apparence du sujet, les vêtements, le décor, la palette de couleurs, l'éclairage, la composition et le texte à l'écran sont déjà verrouillés en S1/S2 : cette couche n'a pas le droit de recréer. Dès qu'il commence à "interpréter", la cohérence de toute la vidéo s'effondre.
La voix off n'utilise plus de doublage indépendant. Le texte du dialogue est écrit dans le prompt, le modèle le lit directement – c'est la plus grande différence de ce workflow par rapport aux méthodes traditionnelles, et c'est aussi le point le plus critique à surveiller.
1. Prérequis
Quatre éléments sont indispensables. S'il en manque un, retourner à l'étape précédente :
| Élément | Où le trouver | Que se passe-t-il s'il manque |
|---|---|---|
03-génération-spec.md | Produit par short-video-prompt et validé G2 | On ne sait pas combien de segments faire, ni leur durée |
| Texte du dialogue de chaque segment | Dans le prompt de chaque segment de la spécification | Le modèle ne sait pas quoi dire, il invente |
| Image d'actif / Première image | 04-matériel/01-actifs/, 04-matériel/02-première-image/ | Le sujet change à chaque segment |
KIE_API_KEY | Variable d'environnement | Impossible de soumettre la tâche |
Ne pas avoir de première image n'empêche pas de faire : pour les ambiances pures, les plans vides, les transitions, on peut utiliser le mode texte. Mais tout segment avec un sujet doit avoir une image – c'est une règle stricte.
Les segments sans dialogue peuvent ne pas avoir de voix off, comme les plans vides ou les passages purement musicaux. Mais si le segment doit parler, le texte du dialogue doit être dans le prompt – c'est la seule source audio maintenant.
2. Trois modes, mutuellement exclusifs
Une requête API ne peut en choisir qu'un. Un champ supplémentaire le transforme en un autre mode, et la tâche échoue.
| Mode | Requis | Quand l'utiliser | Interdiction explicite |
|---|---|---|---|
text (texte) | prompt | Plans vides, ambiances, effets lumineux purs, transitions | Inclure first_frame_url / last_frame_url |
first (première image) | prompt + first_frame_url | Par défaut : verrouiller la composition de départ | Inclure last_frame_url |
first-last (première et dernière image) | prompt + première + dernière image | Verrouiller le début et la fin, assurer la continuité entre segments adjacents | — |
Comment gérer le mode "image de référence" de la spécification
Le champ "mode" de la spécification peut être "première-dernière / référence / texte". Le modèle actuel n'a pas de mode "image de référence" – le champ reference_image_urls n'est pas disponible. Il faut donc faire une correspondance :
| Ce que dit la spécification | Ce qui est réellement soumis | Explication |
|---|---|---|
| Première-dernière | first-last | Direct |
| Référence | first | Utiliser l'image de référence comme première image, verrouiller la composition de départ |
| Texte | text | Direct, mais uniquement pour les plans sans sujet |
Ce n'est pas un compromis, c'est une limite de capacité. Si un segment a vraiment besoin d'"image de référence pour verrouiller le sujet + composition libre", il faut soit verrouiller la composition avec la première image, soit retourner en S2 pour modifier le découpage.
3. Paramètres
| Paramètre | Valeurs | Défaut | Description |
|---|---|---|---|
duration | 4–15 secondes entières | 5 | Plus de 15 → diviser le segment ; moins de 4 → confier à la post-production pour animation ou recadrage |
aspect_ratio | 9:16 / 16:9 / 1:1 / 3:4 / 4:3 / 21:9 / adaptive | 9:16 | adaptive réservé au mode texte ; le mode image doit avoir un ratio fixe |
resolution | 480p / 720p | 480p | Pour maîtriser le coût ; pour une livraison finale, passer explicitement à 720p |
generate_audio | true / false | true | Ne pas désactiver. La voix off est dans cette piste ; la désactiver = pas de son |
web_search | true / false | false | Disponible uniquement en mode texte, généralement inutile |
Trois pièges courants :
- Le ratio doit correspondre à la sortie réelle. Si le modèle retourne un résultat visiblement différent ou avec des bandes noires, la qualité est jugée échouée. Ne pas ajouter de letterbox et livrer comme si de rien n'était.
- L'audio doit être activé. La voix off et les sons ambiants sont dans cette piste. Seul un plan vide sans aucun son justifie
--no-audio. durationdoit être un entier. 5.5 sera rejeté.
4. Processus en sept étapes
① Lire la spécification → ② Définir le mode → ③ Écrire le prompt vidéo → ④ Soumettre → ⑤ Interroger et télécharger → ⑥ Vérifier le média → ⑦ Inspecter les images clés
① Lire la spécification, vérifier si c'est faisable
Vérifier trois points pour chaque segment. Si quelque chose ne correspond pas, s'arrêter et demander, ne pas deviner :
- La
durationde chaque segment est-elle entre 4 et 15 ? (Si > 15, diviser d'abord) - Le fichier de première image déclaré existe-t-il vraiment ?
- Les numéros d'actifs référencés sont-ils tous dans la liste des actifs ?
② Définir le mode
Appliquer le tableau de la section 2 pour chaque segment. Essayer d'uniformiser tout le projet. Mélanger les modes n'est pas une erreur, mais rend les transitions plus laides.
③ Écrire le prompt vidéo
Suivre la structure en sept parties de references/video-prompt.md. Deux règles clés :
- Ne décrire que le "changement", ne pas redécrire "ce que c'est". La première image donne déjà au modèle l'apparence du produit ; si le prompt la redécrit, le modèle la redessine à partir du texte et la cohérence est perdue immédiatement.
- Recopier le texte du dialogue mot pour mot, sans modification. La voix off est maintenant lue directement par le modèle ; le texte original doit être dans le prompt. Changer un seul mot → le sous-titrage ne correspondra pas à l'audio.
④ Soumettre
python scripts/kie_seedance.py create \
--prompt "…" --mode first \
--first 04-matériel/02-première-image/S01_f01_v1.png \
--duration 6 --out 04-matériel/03-clips/S01_v1.mp4 --wait
Dès que la soumission réussit, écrire immédiatement le taskId et l'empreinte dans le registre, avant de faire autre chose. Si on fait d'abord puis on note, on risque de ne pas retrouver l'information en cas d'interruption.
④-2 Traitement par lots (5 en parallèle par défaut)
Lancer les segments un par un prendrait plus de 30 minutes pour 6 segments, la plupart du temps étant de l'attente. Le traitement par lots réduit la durée totale à celle du segment le plus long.
# Prévisualiser les requêtes assemblées
python scripts/kie_seedance.py batch --tasks tasks.json --out-dir 04-matériel/03-clips --dry-run
# Lancer pour de vrai, 5 segments en parallèle par défaut
python scripts/kie_seedance.py batch --tasks tasks.json --out-dir 04-matériel/03-clips
# Réduire en cas de limitation de débit
python scripts/kie_seedance.py batch --tasks tasks.json --out-dir 04-matériel/03-clips --concurrency 2
Le format du fichier de tâches est dans assets/batch-tasks-example.json. Chaque segment a une ligne, les champs mode / first / last / duration / prompt ont la même signification que pour une commande unique.
Le parallélisme n'est pas toujours plus rapide, il y a un vrai piège : le registre peut être corrompu.
Si 5 segments se terminent en même temps et que chacun modifie 00-registre-génération.md, les cinq écritures se chevauchent et il ne reste qu'un seul enregistrement. La bonne méthode :
① Une fois le lot terminé, récupérer les éléments du résumé (déjà dans l'ordre de la spécification)
② Mettre à jour le registre en une seule fois : écrire les cinq segments ensemble, pas un par un
③ Vérifier immédiatement après : la spécification a N segments, le registre doit avoir N lignes
Si vous préférez noter au fur et à mesure, réduisez la concurrence à 1 – le mode séquentiel + notation au fur et à mesure est la seule façon de ne pas corrompre le registre. À vous de choisir, mais vous ne pouvez pas avoir à la fois du parallélisme et des écritures éparpillées.
Un signe de limitation de débit : code != 200 ou HTTP 429, pas "l'image est moins belle". Si vous voyez ce type d'erreur, réduisez d'abord la concurrence, ne modifiez pas le prompt.
L'échec n'interrompt pas le lot : si un segment échoue, les autres continuent. Consultez le champ failed du résumé. Pour tout arrêter en cas d'erreur, ajoutez --stop-on-error : cela arrête la soumission de nouvelles tâches, mais celles déjà en cours ne sont pas affectées.
⑤ Interroger et télécharger
--wait attend la fin du téléchargement. On peut aussi le faire séparément : create obtient le taskId → wait --task-id.
L'intervalle d'interrogation commence à 6 secondes et augmente progressivement jusqu'à 30 secondes, avec une limite de 15 minutes. Un dépassement de temps ne signifie pas un échec : vérifiez d'abord l'état.
⑥ Vérification du média (script)
# Segment avec dialogue : la piste audio doit exister
python scripts/inspect_clip.py --file 04-matériel/03-clips/S01_v1.mp4 \
--ratio 9:16 --duration 6 --expect-audio
# Plan vide sans dialogue : ne doit pas avoir de piste audio
python scripts/inspect_clip.py --file S02_v1.mp4 --no-expect-audio
Cinq vérifications objectives : le fichier existe-t-il, sa taille est-elle normale, la durée est-elle correcte, le ratio est-il correct, la piste audio est-elle présente. Cela ne garantit que "le fichier téléchargé peut être lu", pas que l'image est utilisable, ni que le dialogue est correct.
La vérification audio est maintenant plus importante qu'avant : la voix off est dans cette piste. Pas de piste audio = pas de son, le clip est inutilisable. Piste audio présente mais texte mal prononcé : le script ne peut pas le détecter, il faut écouter.
⑦ Inspection des images clés + écoute (humain)
Image : extraire au moins trois points (début, milieu, fin) et vérifier selon les sept critères de references/clip-review.md.
Son : la voix off étant lue par le modèle, chaque segment avec dialogue doit être écouté une fois, en comparant avec le texte original pour vérifier trois points :
| Quoi écouter | Critère |
|---|---|
| Phrases manquantes | Le texte original a N phrases, on doit en entendre N |
| Mots mal prononcés | Mots-clés, noms de marque, chiffres : sont-ils corrects ? |
| Bruits parasites | Musique, voix, bruits indésirables qui ne devraient pas être là |
Si ce qui est dit ne correspond pas au texte, ne pas faire de compromis. Deux options : refaire le segment, ou modifier le sous-titrage pour correspondre à ce qui a été réellement dit. La seule chose à ne pas faire est de sous-titrer selon le texte original – si le public entend une chose et en lit une autre, c'est plus dommageable qu'une simple erreur de prononciation.
Cette étape doit être faite à l'oreille. Pour les mots ambigus, on peut utiliser une transcription automatique au moins trois fois pour comparer, mais la validation finale est humaine. Le résultat est écrit dans 04-matériel/00-dialogue-final.json. Voir references/clip-review.md.
5. Trois états, ne pas les mélanger
| État | Qui juge | Signification |
|---|---|---|
| Média OK | Script | Fichier complet, paramètres conformes, piste audio présente |
| Image OK | Humain (vision) | Sujet inchangé, pas de déformation, s'enchaîne bien avec le segment suivant |
| Dialogue OK | Humain (audition) | Dialogue lu en entier, mots-clés corrects |
Les trois doivent être OK pour que l'état soit "Qualité OK".
Considérer "téléchargé" comme "utilisable" est l'erreur la plus courante de cette chaîne – on découvre en montage que le sujet du 4e segment a changé, tout le travail de préparation est perdu. Maintenant, il y a une couche de plus : même si l'image est bonne, si le dialogue contient une seule erreur, le segment entier est inutilisable car le sous-titrage ne correspondra pas.
La vérification du dialogue est la plus facile à sauter, car elle demande de s'asseoir, de mettre un casque et d'écouter attentivement, pas de jeter un coup d'œil rapide.
6. Registre : dans 04-matériel/00-registre-génération.md
Une ligne par segment, six colonnes : empreinte de la requête, mode, taskId, état, fichier de sortie, raison de l'échec.
Le registre ne sert pas seulement à archiver, mais surtout à éviter les soumissions en double. Si on revient un jour plus tard pour continuer le même projet, le registre indique quels segments sont terminés, lesquels ont été soumis mais pas téléchargés, lesquels ont échoué.
Règles dans references/task-ledger.md, quatre résumés :
- État = "Qualité OK" et fichier présent → ignorer
- taskId présent et état = "En attente / En cours" → interroger uniquement, ne pas recréer
- État = "Généré, en attente de téléchargement" → télécharger uniquement ; si l'URL a expiré, utiliser le même taskId pour en obtenir une nouvelle
- État = "Échec" → ne pas relancer automatiquement, attendre que l'utilisateur demande explicitement une reprise
7. Gestion des échecs
D'abord identifier la couche en cause, puis décider quoi modifier. Ne pas commencer par modifier le prompt.
| Symptôme | Cause | Correction |
|---|---|---|
| Sujet déformé, produit différent | Pas de première image, ou première image incorrecte | Ajouter / changer la première image |
| Tremblement, scintillement | Trop d'actions décrites | Supprimer jusqu'à ne conserver qu'une seule action |
| Texte illisible, doigts en trop | Demander au modèle d'écrire du texte ou de faire des gestes complexes de la main | Texte en post-production, gestes simplifiés |
| Ratio incorrect, bandes noires | Non-concordance entre paramètre et résultat | Juger échec, refaire, ne pas recadrer les bandes noires |
| Rupture entre segments | Dernière image du segment ≠ première image du suivant | Utiliser le mode première-dernière image, ou ajouter une image de transition |
| Phrase manquante, moitié de phrase | Texte du dialogue trop long pour la durée du segment | Réduire le dialogue, ou diviser le segment en deux |
| Mot mal prononcé, remplacé | Caractères rares, homophones, nom de marque noyé dans une longue phrase | Utiliser une formulation plus courante ; isoler le nom de marque dans une phrase courte |
| Voix off couverte par la musique | Le prompt n'a pas précisé "sans musique" ou "ne pas couvrir la voix" | Ajouter une contrainte audio, refaire |
| Aucun son | --no-audio utilisé par erreur, ou generate_audio désactivé | Vérifier les paramètres, refaire |
| Erreur 429 dès la soumission | Trop de concurrence, limitation de débit | Relancer avec --concurrency 2, ne pas modifier le prompt |
| Échec répété du même segment | Plusieurs variables changées en même temps | Ne changer qu'une seule variable à la fois |
Les problèmes de dialogue représentent plus de la moitié des cas. Leur point commun : l'image a l'air correcte, seul l'écoute révèle le problème. Donc chaque segment doit être écouté avant de valider.
Lors d'une reprise, ne changer qu'une seule variable à la fois. Modifier le prompt, la durée et la première image en même temps : même en cas de succès, on ne saura pas ce qui a fonctionné, et le même problème se reproduira.
Diagnostic détaillé dans references/clip-review.md.
8. Limites
- Ne pas redessiner le visuel : sujet, décor, palette, éclairage sont verrouillés en S2, ici on les anime seulement
- Ne pas modifier le texte du dialogue : lire exactement ce qui est écrit. Pour changer les mots, retourner en S1/S2
- Ne pas faire de sous-titres : le texte est toujours ajouté en post-production. Le modèle peut "lire" le chinois, pas "l'écrire"
- Ne pas traiter l'audio : un segment mal lu doit être refait, ou le sous-titrage ajusté. Pas de mixage, pas de réenregistrement ici
- Ne pas faire de montage : pas d'assemblage, pas de coupe, pas d'étalonnage – c'est S4
- Ne pas juger "si c'est beau" : seulement "si c'est utilisable". L'appréciation esthétique est pour la revue des rushes
- Ne pas promettre un résultat du premier coup : la génération est probabiliste, 2 à 4 essais sont la norme, pas un échec
9. Références
| Fichier | Quand le lire |
|---|---|
references/api-and-modes.md | Pour l'API, les paramètres, les trois modes, les réponses d'erreur |
references/video-prompt.md | Pour écrire ou modifier un prompt vidéo |
references/task-ledger.md | Pour créer le registre, reprendre le travail, décider s'il faut relancer |
references/clip-review.md | Pour l'inspection des images clés, le diagnostic d'échec, la décision de reprise |
| references/assembly-ops.md | Détails FFmpeg pour l'assemblage S4, le sous-titrage et le mixage |
assets/gen-ledger-template.md | Pour créer le registre |
| assets/dialogue-final-template.json | Pour enregistrer le dialogue final, l'aide à la transcription et la validation humaine |
assets/batch-tasks-example.json | Pour exécuter des lots |
Scripts :
| Script | Utilisation |
|---|---|
scripts/kie_seedance.py | Soumettre / lot / interroger / attendre le téléchargement / uploader une image de référence |
scripts/inspect_clip.py | Vérification du média (nécessite ffprobe) |