Leçon 7 — Assembler et publier : montage, formats, règles

Exécution réelle, coûts et exploitation

8 min de lecture

Exécution réelle, coûts et exploitation

La question que pose le directeur financier n'est pas « combien coûte une vidéo ? » mais « combien coûte une vidéo publiée, essais ratés compris ? ». Le devis du brief dit 0,575 $. Le 2026-10-15, la journée de mise au point a coûté un peu plus, pour des raisons instructives : une voix refaite, un appel Veo refusé, des sondes. Cette leçon exécute le pipeline réel, lit ses coûts, le fait tourner sur Vertex AI et nettoie.

Le mécanisme : ordre des étapes, cache, manifeste

flowchart TB
  A["make e2e"] --> B{"Conformité + devis ≤ budget ?"}
  B -->|"non"| Z["arrêt, 0 $"]
  B -->|"oui"| V["Voix : ~0,001 $<br/>mesure + transcription"]
  V -->|"trop longue / consigne lue"| Z2["arrêt, ~0,002 $"]
  V --> I["Image produit : 0,067 $"]
  I --> C["Clips Veo : 0,40 $"]
  C --> L["Lyria : 0,04 $"]
  L --> M["Montage : 0 $"]
  M --> R["manifeste.json + rapport.html"]
  K[("sorties/cache/<br/>média + fiche de coût")] -.->|"relance"| V
  K -.-> I
  K -.-> C
  K -.-> L

Les étapes sont rangées de la moins chère à la plus chère, et chaque contrôle qui peut échouer est placé avant la dépense suivante. Le manifeste distingue deux montants : depense_reelle_usd (payé pendant cette exécution) et cout_medias_usd (coût de tous les médias utilisés, cache compris, lu dans les fiches JSON écrites à côté de chaque média).

La mise en œuvre

cd files
make setup                      # puis renseignez GOOGLE_API_KEY dans .env
make e2e

Veo n'a pas de palier gratuit : la clé doit appartenir à un projet avec facturation activée. Les conditions de l'API Gemini précisent par ailleurs que seuls les services payants peuvent être proposés à des utilisateurs de l'Espace économique européen, de Suisse et du Royaume-Uni, et que sur les services gratuits les entrées et sorties peuvent servir à améliorer les produits de Google.

Pour Vertex AI, le même code tourne en changeant l'environnement :

GOOGLE_GENAI_USE_VERTEXAI=TRUE GOOGLE_CLOUD_PROJECT=<votre-projet> GOOGLE_CLOUD_LOCATION=global \
  .venv/bin/python run.py --e2e

Sur Vertex, les identifiants et la disponibilité des modèles dépendent de la région : vérifiez-les dans la documentation Vertex de Veo et dans le Model Garden de votre projet avant de lancer, et adaptez video.modele, voix.modele et musique.modele dans le brief.

Résultat obtenu

Exécution réelle complète du 2026-10-15 (voix et image produit déjà en cache depuis l'essai précédent), clé Gemini API :

pubcourte.generation INFO cache 1b96fc81f671861a.wav (voix, 0.0007 $ déjà payés)
pubcourte.generation INFO cache 3a51c6eda1e5b1ec.wav (voix, 0.0004 $ déjà payés)
pubcourte.generation INFO cache 423af6b25805de4d.png (image, 0.0670 $ déjà payés)
pubcourte.generation INFO video veo-3.1-lite-generate-preview : 0.2000 $ en 32.8 s
pubcourte.generation INFO image gemini-3.1-flash-image : 0.0670 $ en 11.1 s
pubcourte.generation INFO video veo-3.1-lite-generate-preview : 0.2000 $ en 33.2 s
pubcourte.generation INFO musique lyria-3-clip-preview : 0.0400 $ en 13.7 s
pubcourte.pipeline INFO terminé en 106.3 s, dépense réelle 0.5070 $
 9:16  sorties/reel/calade-cold-brew-9x16.mp4  1.12 Mo  8.0 s
  1:1  sorties/reel/calade-cold-brew-1x1.mp4  0.69 Mo  8.0 s
 16:9  sorties/reel/calade-cold-brew-16x9.mp4  0.55 Mo  8.0 s
devis 0.575 $ · dépense réelle 0.507 $ · 106.3 s · rapport : sorties/reel/rapport.html

Relance après la correction des sous-titres (leçon 5), tout depuis le cache : terminé en 15.5 s, dépense réelle 0.0000 $.

Le rapport de validation que l'on envoie au client (storyboard, prompts exacts, devis, trois formats) :

Rapport de validation généré par le pipeline

Coût réel de la journée, essais ratés compris, aux tarifs officiels du palier payant :

PosteAppels facturésCoût
Veo 3.1 Lite, 720p, 2 × 4 s2 (plus 1 refus 400 negativePrompt, non facturé)0,400 $
Images gemini-3.1-flash-image (produit + plan 2)20,134 $
Lyria Clip2 (1 essai de prompt, 1 pour le pipeline)0,080 $
Voix off TTS (dont la prise où la consigne était lue)3 dans le pipeline, une dizaine de sondes~0,01 $
Transcriptions de contrôle (gemini-3.5-flash)~10< 0,01 $
Total~0,63 $

Ce qui pèse : Veo fait 64 % de la facture. Le même storyboard aurait coûté 0,80 devideˊoenFastet3,20de vidéo en Fast et 3,20 en standard. Le reste du pipeline (images, voix, musique, montage) coûte moins de 0,25 $ quel que soit le modèle vidéo.

Vertex AI, même jour : la voix off passe par generateContent avec gemini-2.5-flash-tts en europe-west1 (sortie PCM brut convertie en WAV par le pipeline) :

pubcourte.generation WARNING Vertex AI : style « chaleureuse et posée » ignoré (non pris en charge par generateContent TTS)
pubcourte.generation INFO voix gemini-2.5-flash-tts : 0.0005 $ en 2.9 s
45fc2c755e8cada1.wav b'RIFF' 1.89 s

Le coût affiché pour Vertex applique le tarif de la clé d'API, faute de tarif vérifié pour ce modèle sur Vertex. Lors de nos sondes, gemini-3.8-flash-tts répondait en location global et pas en europe-west1. Veo et Lyria n'ont pas été exécutés sur Vertex : le budget de cette formation (2 clips) a été consommé par l'exécution avec la clé d'API.

Nettoyage. Le projet ne crée aucune ressource Google Cloud ; les vidéos Veo sont supprimées côté serveur au bout de 2 jours. Les fichiers locaux :

$ make clean
Artefacts supprimés.
$ ls sorties
ls: impossible d'accéder à 'sorties': Aucun fichier ou dossier de ce nom
$ make cloud-down
Aucune ressource Google Cloud créée par ce projet. Les vidéos Veo sont effacées côté serveur après 2 jours.

make clean supprime aussi le cache des médias payés : conservez sorties/cache/ si vous comptez remonter la vidéo.

Ce qui casse en production

SymptômeCauseParade
429 RESOURCE_EXHAUSTED en sériequota par minute de Veo ou des images4 essais avec attente exponentielle (4, 8, 16 s) ; au-delà, lotir les générations
404 sur un modèle qui marchait la veilleidentifiants -preview renommés ou retirésmodèle dans le brief, pas dans le code ; client.models.list() dans le diagnostic
Facture supérieure au devistarifs changés (ceux du code datent du 2026-10-15)relevé daté dans couts.py, à revérifier avant chaque campagne
Clips perdustéléchargement différé au-delà de 2 jourstéléchargement dans la foulée, cache local
Relance qui rachète toutprompt modifié d'un caractèrenormal : la clé de cache inclut le prompt ; figer le brief avant make e2e
CI qui échoue sur l'incrustationffmpeg sans libass ou police absenteffmpeg des paquets Ubuntu + fonts-dejavu-core, cf. ci/github-actions.yml

La règle de décision

Mesurez le coût par vidéo publiée, pas par appel. Surveillez quatre chiffres par campagne : coût des médias par vidéo livrée, taux de clips refaits (un plan sur trois à refaire triple la ligne Veo), taux de blocage par les filtres, et latence Veo (11 s à 6 min selon la documentation). Gardez la CI sans clé (make test, make run) et lancez make e2e à la main, une fois le brief validé : un test de bout en bout à 0,50 $ n'a pas sa place à chaque commit.

Pratique

Le marketing veut 20 variantes de la publicité (accroches différentes en voix off, mêmes images). Combien coûte la série, à partir de ce pipeline ?

La CI échoue sur `test_chaine_complete_hors_ligne` avec « No such filter: 'subtitles' ». Les autres tests passent. Que faites-vous ?

Exercice. Ajoutez au manifeste un indicateur cout_par_seconde_livree (coût des médias divisé par la durée du master), et faites échouer le pipeline si cout_medias_usd dépasse budget_usd, en plus du devis.

Voir la solution

Dans pipeline.executer, après le calcul des livrables :

cout = getattr(gen, "cout_medias_usd", gen.depense_usd)
if cout > b.budget_usd:
    raise BriefRefuse(f"coût réel {cout:.3f} $ > budget {b.budget_usd:.2f} $")
manifeste["cout_par_seconde_livree"] = round(cout / b.duree_totale, 4)

Sur l'exécution du 2026-10-15 : 0,575 /8s=0,0719/ 8 s = 0,0719 par seconde livrée, soit environ 1,4 fois le tarif Veo Lite seul (0,05 $/s). Placer ce contrôle à la fin n'empêche pas la dépense, il empêche la livraison silencieuse d'un hors-budget : le contrôle préventif reste le devis.

  • J'exécute make e2e et je lis manifeste.json : dépense de l'exécution et coût des médias
  • Je sais basculer le pipeline sur Vertex AI et ce qui y diffère (style TTS, régions, identifiants)
  • Je compte le coût par vidéo publiée, essais ratés compris
  • Je nettoie avec make clean en sachant que le cache payé part avec