Vidéo IA : de l'idée au montage, Veo et formats UGC
Un pipeline qui transforme un brief YAML en publicité de 8 secondes sous-titrée en 9:16, 1:1 et 16:9 : storyboard, prompts vidéo, image-to-video Veo 3.1, voix off Gemini TTS, musique Lyria, montage ffmpeg, et les règles de transparence et de droits qui s'appliquent.

Vidéo IA : de l'idée au montage, Veo et formats UGC
Une marque de cold brew veut tester une publicité de 8 secondes sur Reels, TikTok, le fil Instagram et YouTube. L'agence demande deux semaines. Un essai « à la main » dans une interface web produit trois clips où la bouteille change de forme d'un plan à l'autre, une musique que personne n'a choisie, aucun sous-titre, et une facture qu'on ne sait pas expliquer.
Ce projet construit l'autre façon de faire : un brief YAML versionné qui passe par un contrôle de conformité et un devis, puis un pipeline qui génère la voix off, l'image produit, deux clips Veo en image-to-video et une musique Lyria, monte le tout avec ffmpeg et livre trois formats sous-titrés de moins de 3 Mo chacun, avec la mention « Contenu généré par IA ». Coût mesuré de la vidéo publiée le 2026-10-15 : **0,575 de Veo.
Ce que vous livrez
La planche du 9:16, une image par seconde : plan 1 en image-to-video depuis l'image produit, plan 2 depuis une image dérivée par édition.
Le pipeline produit aussi un rapport de validation à envoyer au client : storyboard, prompts exacts, devis, dépense réelle, trois formats.
Architecture
flowchart LR
B["brief.yaml"] --> CF{"Conformité<br/>+ devis ≤ budget"}
CF -->|"refus"| X["0 $ dépensé"]
CF --> T["Gemini TTS<br/>voix par plan"]
T --> CT{"durée ≤ plan<br/>consigne non lue"}
CT --> IP["Image produit<br/>gemini-3.1-flash-image"]
IP --> ID["Images dérivées<br/>(édition)"]
IP --> V["Veo 3.1 Lite<br/>image-to-video 4 s"]
ID --> V
V --> LY["Lyria Clip<br/>musique 30 s"]
LY --> FF["ffmpeg : concat, mixage,<br/>sous-titres, 3 formats"]
FF --> OUT["MP4 ≤ 3 Mo × 3<br/>SRT, manifeste, rapport"]
K[("cache des médias payés")] -.-> T
K -.-> IP
K -.-> V
K -.-> LY
| Composant | Choix | Pourquoi |
|---|---|---|
| Brief | YAML + pydantic | refuse avant l'appel ce que l'API refuserait après (durées, ratios) |
| Vidéo | veo-3.1-lite-generate-preview, 720p, 9:16 | 0,05 $/s ; Fast et standard pour les cas qui les justifient (leçon 2) |
| Image produit | gemini-3.1-flash-image | tient l'identité du produit entre les plans pour 0,067 $ |
| Voix | gemini-3.8-flash-tts (API Interactions), Vertex : gemini-2.5-flash-tts | style en annotation, sortie WAV |
| Musique | lyria-3-clip-preview | 30 s instrumentales pour 0,04 $, filigrane SynthID |
| Montage | ffmpeg (libass, libfreetype) | concat, sidechain, loudnorm, ASS, recadrage ; installé partout |
| Tests | pytest, faux générateur ffmpeg | 27 tests, montage complet sans clé |
Coût et durée
| Coût | Durée | |
|---|---|---|
make test, make run | 0 $ | 10 s |
make e2e (2 clips Lite 4 s, 2 images, 2 voix, 1 musique) | 0,575 payés lors de l'exécution finale, le reste venant du cache | 106 s |
| Journée de mise au point, essais ratés compris | ~0,63 $ | |
| Formation | 6 h |
Prérequis
- Python 3.10 ou plus, ffmpeg 4.4 ou plus avec libass, police DejaVu Sans.
- Une clé Gemini API sur un projet avec facturation (Veo n'a pas de palier gratuit), ou un projet Vertex AI.
- À l'aise avec la ligne de commande et Python ; aucune expérience du montage vidéo requise.
Programme
| Leçon | Ce que vous faites | Ce qui marche à la fin |
|---|---|---|
| 1. Brief, storyboard et découpage | brief exécutable, plans de 4 s, bible visuelle | make test : 27 tests verts |
| 2. Prompts vidéo et choix du modèle | prompt structuré, Lite/Fast/standard, devis | run.py --plan affiche devis et prompts |
| 3. Image produit et image-to-video | cohérence par l'image, opération Veo, cache | deux clips Veo réels de 4 s |
| 4. Voix off et musique | TTS par plan, contrôle de durée et de transcription, Lyria | voix mesurées, musique de 30 s |
| 5. Montage, sous-titres et formats | concat, mixage, ASS, recadrage, taille | make run : 3 MP4 sous-titrés |
| 6. Formats UGC, transparence et droits | ce qui fonctionne, ce qui est interdit, SynthID | un faux témoignage refusé avant génération |
| 7. Exécution réelle, coûts et exploitation | make e2e, coût par vidéo publiée, Vertex AI, nettoyage | publicité livrée, make clean vérifié |
Le dépôt complet est dans files/ : README, Makefile, brief.yaml.
En local ou avec Google Cloud
| Sans GCP (clé Gemini API) | Avec GCP (Vertex AI) | |
|---|---|---|
| Configuration | GOOGLE_API_KEY dans .env | GOOGLE_GENAI_USE_VERTEXAI=TRUE, GOOGLE_CLOUD_PROJECT, GOOGLE_CLOUD_LOCATION |
| Voix off | gemini-3.8-flash-tts, style par annotation | gemini-2.5-flash-tts (testé en europe-west1), style ignoré |
| Veo, Lyria | testés le 2026-10-15 | code identique, identifiants à vérifier par région, non exécutés ici |
| Ressources créées | aucune | aucune (appels d'API uniquement) |
Recursos
- example.env.example1 KB
- yamlbrief.yaml3 KBVer
- mdREADME.md2 KBVer
- txtrequirements.txt1 KBVer
- pyrun.py2 KBVer
Referencias
- Générer des vidéos avec Veo 3.1 (Gemini API)ai.google.dev
- Tarifs de la Gemini APIai.google.dev
- Génération de voix (Gemini TTS)ai.google.dev
- Génération de musique (Lyria 3)ai.google.dev
- SynthID (Google DeepMind)deepmind.google
- AI Act, article 50 : obligations de transparenceartificialintelligenceact.eu
- YouTube : déclarer le contenu modifié ou synthétiquesupport.google.com
- Documentation des filtres ffmpegffmpeg.org