Vidéo de cours
Vous transformez les supports de cours de l'étudiant en vidéos d'étude. Une règle distingue cette compétence :
Chaque nombre, exemple et affirmation provient des supports de cours de l'étudiant. Rien n'est inventé. Les étudiants utilisent ces vidéos pour réviser des examens notés par leur professeur. Un exemple "plus joli" avec des nombres inventés, une formule avec une notation différente, ou un fait extérieur au cours est un bug, même s'il est correct en économie/physique, etc.
0. Prérequis (vérifier une fois)
python3 -m pip install -r requirements.txt && python3 -m playwright install chromium
ffmpeg -version | head -1 # brew install ffmpeg / apt install ffmpeg
Optionnel : Blender 4.2+ pour les scènes 3D et le présentateur mascotte (BLENDER=/chemin/vers/blender s'il n'est pas dans le PATH),
pdftotext (poppler) ou pip install pypdf pour lire les diapositives PDF, openai-whisper pour transcrire les enregistrements,
XAI_API_KEY pour la voix Grok (sinon, la voix neuronale gratuite Microsoft est utilisée).
1. Collecter les sources
Créez un dossier <cours>/sources/ et placez-y uniquement les supports de cours :
transcriptions de cours (.txt/.srt/.vtt), diapositives (.pdf ou texte exporté), notes de l'étudiant, séries de problèmes, examens blancs.
- Enregistrement sans transcription →
whisper lecon.mp4 --model base --output_format txt --output_dir sources/ - .docx →
textutil -convert txt fichier.docx(macOS) oupandoc fichier.docx -t plain -o fichier.txt - Demandez à l'étudiant quels cours/sujets la vidéo doit couvrir. N'ajoutez pas de matière d'autres semaines sauf si demandé.
Lisez l'intégralité des sources avant d'écrire quoi que ce soit. Notez la notation exacte du professeur, les termes, les exemples travaillés et les nombres.
2. Écrire le script (JSON de contenu)
Écrivez <cours>/<nom>.json en suivant engine/SCHEMA.md (types visuels, mots-clés, format des quiz, limites de disposition).
examples/lemonade/ est un petit exemple complet.
Règles :
- Exemples : utilisez les exemples travaillés du cours avec les nombres du cours. Si le cours utilise "prix 4 €, 3 unités", la vidéo utilise "prix 4 €, 3 unités", pas "prix 10 €, 5 unités".
- Quiz : tirez-les des problèmes pratiques du cours, des questions de vote ou des exemples travaillés. Si vous écrivez une nouvelle question, construisez-la uniquement à partir des nombres des sources, et indiquez-le dans l'étiquette du quiz ("Pratique", pas "Question d'examen").
- Nombres dérivés (un total que vous avez calculé, une différence) sont acceptables, mais déclarez chacun dans le tableau
"derived"de niveau supérieur avec le calcul, en utilisant uniquement les nombres sources :"derived" : {"16" : "4 * 4", "-6" : "120 - 126"}. - Petits comptes qui ne sont pas des données ("Trois choses à retenir", "Étape 2") vont dans
"allow" : ["3"]. 0 et 1 sont toujours autorisés. - Notation et termes : utilisez ceux du professeur (si le cours écrit "RM = CM", ne passez pas à "∂R/∂q").
- Si un fait nécessaire à la vidéo n'est pas dans les sources, arrêtez-vous et demandez le support à l'étudiant, ou laissez-le de côté. Ne comblez jamais le vide à partir de connaissances générales.
- La narration (
say) est écrite pour l'oreille : des mots, pas des symboles ("4 fois 4 font 16 euros").
3. Vérifier chaque nombre par rapport aux sources (obligatoire, avant la construction)
python3 tools/check_sources.py <cours>/<nom>.json <cours>/sources --report <cours>/<nom>.sources.md
Il extrait chaque nombre de la narration, du texte à l'écran, des options de quiz et des étiquettes de scène 3D, et trouve chacun dans les sources (chiffres ou mots épelés, ex. "cent vingt"). Les nombres dérivés sont recalculés et leurs opérandes vérifiés. Il doit se terminer avec le code 0 avant de construire. Pour chaque problème, il signale :
- le nombre est une faute de frappe ou une invention → corrigez le script pour utiliser le nombre de la source ;
- c'est un vrai calcul → ajoutez-le à
"derived"; - il est dans les sources sous une forme que le vérificateur n'a pas trouvée (ex. dans une image) → demandez à l'étudiant de confirmer, puis ajoutez-le à
"derived"ou"allow"avec une note dans votre réponse.
Lisez ensuite la section Preuves du rapport vous-même, en vérifiant ponctuellement que chaque nombre est utilisé dans le même sens que dans la source (le vérificateur fait correspondre les valeurs, pas le sens : "40 €" le prix vs. "40 unités" la quantité).
4. Construire et rendre
cd engine
python3 build.py ../<cours>/<nom>.json # voix, timing, sous-titres, musique (TTS=xai XAI_API_KEY=... pour Grok)
python3 lint.py build/<video-id>/spec.json # visuels qui arrivent en retard
python3 qa.py <video-id> # captures de chaque beat + feuilles de contact : REGARDEZ-les
OUT=../out python3 render.py <video-id> --workers 6 # rendu full 1080p -> ../out/<video-id>.mp4 + .srt
Regardez les feuilles de contact de QA avant de rendre : texte qui se chevauche, écrans vides, mauvais nombres à l'écran.
5. Optionnel : scènes 3D, mascotte, effets sonores
Un beat avec "v" : {"type" : "clip", "scene" : "<nom>"} joue une scène Blender à partir de engine/blender/scene_defs/<nom>.py
(voir le docstring dans engine/blender/scenelib.py ; market.py et safe.py sont des exemples complets, écrits pour un
cours d'économie, donc leurs étiquettes portent les nombres de ce cours. Modifiez les étiquettes pour correspondre à vos sources).
Les étiquettes de scène sont également vérifiées par check_sources.py.
cd engine
python3 blend.py prep <video-id> # timeline mascotte + entrées par scène
python3 blender/stills.py <scene> --dry # détecter les erreurs rapidement, puis sans --dry pour les captures
python3 blend.py clips <video-id> # rendre les scènes 3D (lent : minutes par scène)
python3 blend.py mascot <video-id> && python3 blend.py pack <video-id>
python3 sfx.py mix <video-id> # effets sonores sous la narration
OUT=../out python3 blend.py comp <video-id> # -> ../out/<video-id>-3d.mp4
OUT=../out python3 blend.py site <id1>,<id2> --title "Mon cours" --out ../out/site # une page web avec chapitres
Le rendu est lent et gourmand en espace disque (plusieurs Go d'images par vidéo pendant son exécution). Vérifiez d'abord l'espace libre, rendez une scène à la fois sur les ordinateurs portables et gardez la machine éveillée.
6. Remise
Informez l'étudiant : où se trouve la vidéo, sa durée, quels cours elle couvre, et le résultat de la vérification des sources (nombres vérifiés, dérivés ou permis). Si quelque chose dans les sources était ambigu, dites ce que vous avez supposé. Rappelez-lui que la vidéo est une aide à l'étude construite à partir de ses supports, pas un remplacement du cours, et que les supports de cours peuvent ne pas être les siens à publier : vérifiez avant de poster une vidéo publiquement.