Lección 1 — Cadrer : brief, storyboard et prompts

Brief, storyboard et découpage en plans

8 min de lectura

Este contenido aún no está traducido. Se muestra la versión original.

Brief, storyboard et découpage en plans

Le responsable acquisition de la Brûlerie Calade (torréfacteur lyonnais fictif, douze salariés) veut tester une publicité de 8 secondes pour son cold brew, en 9:16 pour Reels et TikTok, en 1:1 pour le fil Instagram, en 16:9 pour YouTube. Son agence demande deux semaines. Il a essayé seul : quatre heures de prompts dans une interface web, 6 € de crédits Veo, et trois clips où la bouteille change de forme, d'étiquette et de couleur d'un plan à l'autre.

Le problème n'était pas le modèle. Il n'y avait ni brief, ni découpage, ni contrôle avant de payer. Cette leçon pose ces trois choses, dans un fichier versionné.

Le mécanisme : un brief exécutable

Un brief d'agence est un document Word que personne ne relit. Ici, le brief est un fichier YAML validé par un schéma : chaque plan, chaque texte prononcé, chaque prompt en découle. Le code ne contient aucun texte créatif ; changer de produit revient à changer de fichier.

flowchart LR
  B["brief.yaml"] --> V{"Schéma pydantic<br/>+ conformité + devis"}
  V -->|"refus"| R["Erreur lisible<br/>0 $ dépensé"]
  V -->|"ok"| P["Plans p1, p2"]
  P --> T["Voix off (TTS)"]
  P --> I["Image produit"] --> C["Clips Veo"]
  T --> M["Montage ffmpeg"]
  C --> M
  L["Musique Lyria"] --> M
  M --> F["9:16 · 1:1 · 16:9<br/>sous-titrés, ≤ 3 Mo"]

Trois décisions structurent le découpage.

Le plan est l'unité de génération. Veo 3.1 produit des clips de 4, 6 ou 8 secondes (pas 5, pas 7). Un plan du storyboard = un appel Veo. On choisit la durée du plan en fonction de ce qui s'y passe, pas l'inverse : un gros plan produit tient en 4 s, une action en trois temps (prendre, ouvrir, boire) en demande 8 et a de bonnes chances d'échouer.

Une action par plan. Les modèles vidéo enchaînent mal deux actions dans le même clip : la deuxième arrive trop tôt, ou pas du tout. « La main saisit la bouteille et dévisse le bouchon » est déjà à la limite ; ajouter « puis la porte à la bouche » rate presque toujours.

La « bible » visuelle. Veo ne voit jamais les autres plans. Ce qui doit rester identique d'un plan à l'autre (le produit, le décor, la lumière, le style) est écrit une seule fois et injecté dans chaque prompt.

Champ du planRôleExemple (plan p2)
duree4, 6 ou 8 s, imposé par Veo4
imageimage de départ : produit ou consigne d'édition« même scène, cadrage plus large, une main entre par la droite »
sujet / actionqui fait quoi, une seule action« la main soulève la bouteille et dévisse le bouchon »
camera / objectifmouvement, hauteur, focale« plan moyen serré fixe, 50 mm »
sonambiance et bruitages générés par Veo« clic du bouchon, léger pschitt »
voixvoix off, ajoutée au montage et sous-titrée« Ouvrez. C'est prêt. »

La mise en œuvre

Le dépôt complet est dans files/. Le brief d'exemple : brief.yaml.

files/brief.yaml (extrait)
projet: calade-cold-brew
format_ugc: demo-produit          # demo-produit | temoignage | face-camera
budget_usd: 1.00                  # le pipeline refuse de lancer la génération au-delà
bible:
  produit: "a 25 cl clear glass bottle of cold brew coffee, dark amber liquid,
            matte kraft paper label reading CALADE, black metal screw cap"
  lumiere: "low golden sunrise light from the left, soft shadows"
plans:
  - id: p1
    duree: 4
    image: produit
    action: "a single condensation droplet slowly runs down the glass ..."
    camera: "slow push-in, eye level, perfectly stable"
    voix: "Calade Cold Brew. Seize heures à froid."

Le schéma refuse ce que Veo refuserait, avant tout appel :

files/pubcourte/brief.py (extrait)
class Plan(BaseModel):
    id: str
    duree: Literal[4, 6, 8]  # durées acceptées par Veo 3.1
    image: str = "produit"   # "produit" ou consigne d'édition de l'image produit
    sujet: str
    action: str
    camera: str
    dialogue: str = ""  # réplique prononcée À L'ÉCRAN (Veo la synthétise)
    voix: str = ""      # voix off (TTS), sous-titrée

La distinction dialogue / voix compte. Un dialogue est généré par Veo, avec la bouche du personnage : il ne se corrige qu'en regénérant le clip (0,20 aˋ3,20à 3,20). Une voix off est générée à part par le TTS pour un millième de dollar, et se refait à volonté. Pour une publicité produit, mettez le texte en voix off.

Installez puis lancez les tests :

cd files
make setup
make test

Résultat obtenu

Exécution du 2026-10-15 :

$ make test
...........................                                              [100%]
27 passed in 8.23s

Ce qui casse en production

SymptômeCauseParade
400 INVALID_ARGUMENT sur durationSecondsdurée de 5 s ou 10 s demandéeLiteral[4, 6, 8] dans le schéma : l'erreur sort avant l'appel
La bouteille change de forme entre les plansdescription du produit réécrite à la main dans chaque promptune seule bible, injectée par le code
La deuxième action du plan n'arrive jamaisdeux actions dans un clip de 4 sun plan par action, ou 8 s et une action simple
Le texte prononcé dépasse la fin du planvoix écrite sans mesurer sa duréele pipeline génère la voix en premier et la mesure (leçon 4)
Le client change le slogan après générationslogan placé en dialogueslogan en voix, refait pour 0,001 $

La règle de décision

Découpez en plans de 4 s tant que chaque plan ne porte qu'une action et qu'un message. Passez à 6 ou 8 s quand le mouvement de caméra a besoin de temps (travelling, révélation). Au-delà de deux ou trois plans, le format « publicité courte » n'est plus le bon : un 15 s se monte avec des plans tournés ou des banques d'images, la génération servant aux plans impossibles à tourner.

Pratique

Le client veut un plan de 8 s où une cycliste attrape la bouteille, l'ouvre, boit puis repart. Quelle décision prenez-vous avant d'écrire le moindre prompt ?

Le slogan final n'est pas validé par le service juridique. Où le placez-vous dans le brief ?

Exercice. Ajoutez au brief un troisième plan de 4 s : la bouteille ouverte posée sur un vélo garé devant la vitrine, avec la voix « Chez votre caviste. ». Lancez make test puis .venv/bin/python run.py --plan. Que devient le devis, et le brief passe-t-il encore sous budget_usd ?

Voir la solution
  - id: p3
    duree: 4
    image: "Same bottle, open, standing on the rear rack of a bicycle parked in front of the café window, same morning light. No people."
    sujet: "the open cold brew bottle on a parked bicycle"
    action: "the bicycle wheel slowly settles, a light breeze moves a leaf past the bottle"
    camera: "static wide shot, slight low angle"
    son: "street ambience, a bicycle bell in the distance"
    voix: "Chez votre caviste."

Le devis passe de 0,575 aˋ0,842à 0,842 : 0,20 devideˊo(4s×0,05de vidéo (4 s × 0,05), 0,067 pourl′imagedeˊriveˊe,quelquesdix−millieˋmespourlavoix.Ilrestesouslebudgetde1,00pour l'image dérivée, quelques dix-millièmes pour la voix. Il reste sous le budget de 1,00. Les tests test_brief_exemple et test_devis_exemple échouent, car ils figent la durée (8 s) et le devis du brief d'exemple : c'est voulu, un test qui décrit le brief doit être mis à jour avec lui.

  • Je découpe une publicité en plans de 4, 6 ou 8 s, une action par plan
  • Je sépare ce qui est constant (bible) de ce qui varie (plan)
  • Je place tout texte susceptible de changer en voix off, pas en dialogue
  • make test passe sur mon poste
Siguiente