Faceless Pipeline
Pipeline CLI autonome de génération et publication automatisée de vidéos courtes (Shorts 9:16) sur YouTube : cascade multi-LLM, synthèse vocale, rendu FFmpeg et auto-upload.

🎯 Contexte & Problème Réel (Situation & Tâche)
La production régulière et soutenue de contenus éducatifs en vulgarisation informatique et technologique sur YouTube (formats courts Shorts 9:16) exige l’enchaînement sans faille d’une chaîne de traitement complexe : écriture scénarisée avec accroche percutante (hook), génération de voix off fluide, sélection d’illustrations de stock pertinentes, montage vertical calibré à la milliseconde, incrustation de sous-titres synchronisés et téléversement.
Deux premières implémentations (une interface Web trop lourde à maintenir et un CLI surdimensionné) avaient mis en lumière des problèmes de résilience : un seul fournisseur LLM indisponible ou un échec de rendu FFmpeg bloquait tout le processus.
L’objectif était de concevoir Faceless Pipeline (faceless-studio) : un outil CLI en Python épuré, modulaire, opérable à coût zéro avec des points de contrôle humains (checkpoints) ou en mode automatisé (Turbo), capable de sortir une vidéo finalisée et prête à la diffusion en une commande.
🛠️ Architecture & Réalisation Technique (Action)
-
Interface CLI avec Typer, Rich & Questionary :
- Interface terminal interactive avec retours d’état stylisés, barres de progression et checkpoints de validation (validation du script, écoute de la voix off, revue du montage avant publication).
-
Cascade Résiliente Multi-LLM (Module M1) :
- Moteur de génération scénaristique conçu pour basculer automatiquement entre plusieurs fournisseurs (Gemini, Groq, Mistral) dès la détection d’une limite de quota HTTP 429 ou d’un timeout réseau, avec gabarit de secours autonome pour éliminer tout point de rupture unique.
-
Moteur Vocal Hybride & Normalisation Audio (Module M2) :
- Synthèse vocale basée sur Edge-TTS avec fallback ElevenLabs. Vérification stricte des langues cibles et contrôle de pitch pour garantir une restitution vocale naturelle.
-
Extraction Visuelle Bilingue (Module M3) :
- Les moteurs de banques d’images (Pexels) étant indexés quasi exclusivement en anglais, une étape d’extraction par LLM traduit les concepts du script français en mots-clés visuels concrets en anglais avant l’interrogation de l’API, garantissant un taux de découverte de visuels de 100 %.
-
Filtergraph FFmpeg & Auto-Ducking (Module M4) :
- Normalisation automatique de médias de résolutions et durées disparates (
scalepréservant l’aspect ratio $\rightarrow$crop9:16 $\rightarrow$setsar=1$\rightarrow$ 30 fps fixe). - Assemblage calé sur la durée exacte de l’audio avec mixage intelligent (sidechain ducking) réduisant automatiquement le volume de la musique de fond lors des prises de parole.
- Normalisation automatique de médias de résolutions et durées disparates (
-
Sous-Titrage Whisper & Alignement Algorithmique (Module M5) :
- Transcription mot à mot via Groq Whisper avec générateur d’alignement algorithmique de secours (répartition temporelle calculée) en cas de panne de l’API de transcription.
-
Orchestration d’État & Sécurité de Publication (Modules M8 & Core) :
- Invalidation en cascade (stale cascade) : toute modification ou régénération d’un module amont (ex: script M1) invalide automatiquement les livrables avals déjà calculés pour éviter toute incohérence au montage.
- Verrouillage exclusif du manifeste : opérations d’écriture atomiques avec verrou de fichier (
manifest.json.lock) pour prévenir la corruption concurrente des métadonnées de projet. - Double verrouillage de publication : protection stricte empêchant toute publication accidentelle sur la chaîne YouTube sans validation explicite.
⚠️ Blocages & Difficultés Rencontrées
- Échecs silencieux et vidéos déformées sous FFmpeg : Des sources visuelles aux ratios hétérogènes (16:9, carré, 4:3) produisaient des étirements visuels inacceptables lors d’une simple concaténation naïve.
- Solution apportée : Écriture d’un filtre FFmpeg standardisé appliquant d’abord un redimensionnement proportionnel puis un recadrage centré en 1080x1920 avant concaténation.
- Incohérence des éléments lors des reprises partielles : Modifier le script après avoir généré l’audio et la vidéo laissait subsister d’anciens fragments visuels.
- Solution apportée : Implémentation du mécanisme de dépendance descendante (stale cascade) dans le gestionnaire d’état du projet.
- Musique de fond écrasant la voix off : Un volume fixe pour la piste audio musicale nuisait à l’intelligibilité des explications techniques.
- Solution apportée : Intégration d’un filtre
sidechain duckingréduisant dynamiquement la bande sonore de 18 dB dès qu’un signal vocal est détecté.
- Solution apportée : Intégration d’un filtre
💡 Ce que ce projet m’a appris (Résultats & Bilan)
- Impact en production réelle : Utilisation active pour alimenter la chaîne éducative Curioso Savoir, générant plus de 5 800 vues et +3 200 % de progression d’audience en 28 jours.
- Conception d’un pipeline de données déterministe avec gestion rigoureuse des états et de la concurrence sous Linux.
- Maîtrise avancée des filtres complexes de transcodage multimédia avec FFmpeg.
LIVRABLE VIDÉO GÉNÉRÉ PAR LE PIPELINE (MODULE M6)