Vidéo de cours / formation à partir de diapositives
Lisez d'abord video-studio. Éprouvé sur un cours de marketing de 22 min construit à partir d'un PDF (la consigne était « montage normal, pas d'animations lourdes », voix masculine indien-anglais). Reconstruisez-le avec la structure ci-dessous : edit/course.py, render.py, mix.py.
Pipeline
- Diapositives → images :
pdftoppm -r 200 -png raw/deck.pdf work/slides/p(ou exportez d'abord PPTX/Keynote en PDF). Regardez chaque page. Pour les dévoilements progressifs, trouvez les zones de chaque partie (titre, puce 1..n, graphique, image) — à l'œil sur l'image ou avec des projections lignes/colonnes PIL des pixels non d'arrière-plan — et stockez-les par diapositive. - Script (
edit/course.py): par diapositive : paragraphesvo+reveals[{box:[x,y,w,h], cue:« mot prononcé »}] + éventuellementzoombox. Rédigez pour enseigner, pas pour lire la diapositive : accrochez la leçon (pourquoi c'est important), une idée par paragraphe, exemples, récapitulation à la fin de chaque module, ~140–150 mots/min. Hinglish si le public le souhaite. Montrez le script et obtenez l'approbation avant toute VO (cela coûte des crédits). - Vérification du budget :
eleven.py credits; un cours de 22 min ≈ 18 000 caractères — le forfait Starter a 40 000/mois, donc une revocalisation complète dans le même mois peut ne pas tenir. Informez l'utilisateur du coût. VO d'essai gratuite avec macOSsayuniquement pour tester le timing. - VO : par paragraphe
eleven.py tts "<texte>" work/vo/<slide>_<n>.mp3 --voice 05QRrdNgiglhuYOaTQvw --speed 1.05 --words work/vo/<slide>_<n>.json(Prem, approuvé). Mis en cache par texte — la modification d'un paragraphe ne repaye que celui-ci. Corrigez les prononciations en réécrivant le texte. Concaténez avec 0,35 s entre les paragraphes et 0,8 s entre les diapositives ; construisez le JSON de la timeline (début/fin de diapositive, temps des mots repères). - Rendu (
edit/render.py): chaque diapositive commence proprement (titre uniquement), et chaque partie apparaît en fondu/glissement sur son mot repère ; mouvement de caméra lent progressif (1,00 → 1,04) et zoom sur la partie discutée pour les diapositives denses ; transitions push/glissement entre les diapositives (0,4 s), étiquette de chapitre en haut à gauche, barre de progression fine, numéro de diapositive. Netteté : effectuez le rendu des diapositives à partir des PNG 200 dpi en 1920×1080, pas de flou. Priorité basse, par modules pour qu'un rendu interrompu puisse reprendre. - Mix (
edit/mix.py): chaîne vocale (filtre passe-haut 80 Hz, légère compression), fond musical −20 dB avec ducking sidechain (assets/music/*underscore*), effets sonores légers sur les dévoilements (pop/swish −14 dB) et les transitions (whoosh −12 dB) — plus légers que pour les reels. Mastering −14 LUFS,--tp -2.0. - Aperçu → approbation → complet : premier module à
--scale 0.5, obtenez un retour, puis tout.qc.py --platform youtube. - Conditionnement : chapitres YouTube (un par groupe de diapositives/module), description avec plan de la leçon, fichiers par module si c'est une plateforme de cours (
exports/vN_module_<n>_<slug>.mp4), miniature (thumbnail-designer), SRT optionnel (captions_ass.py --style cleanou à partir des mots de la VO).
Règles
- Les visuels suivent la parole : rien n'apparaît avant d'être mentionné ; rien d'important n'apparaît sans être mentionné.
- Conservez le design original de la présentation (c'est la marque du client) ; ajoutez uniquement la caméra, les dévoilements, l'étiquette de chapitre et la barre de progression.
- Les chiffres et affirmations proviennent uniquement de la présentation/de l'utilisateur. Épelez correctement les noms de marque à l'écran même si la prononciation est réécrite pour la voix.
- Si l'utilisateur se couche et renonce aux approbations, conservez quand même les aperçus et notes pour qu'il puisse les revoir le matin.