Communitygithub.com

Explicatif calé sur le SRT

Transformer un texte dit en vidéo explicative : plan, SRT, storyboard, puis un MP4 rendu en code.

Qu'est-ce que Explicatif calé sur le SRT ?

Un pipeline en cinq temps dont l’horloge est le fichier de sous-titres. On valide le plan, le texte et le storyboard, puis chaque plan est rendu et monté.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zamchudo/srt-driven-video/tree/HEAD

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

SRT-Driven Video (Pipeline vidéo piloté par SRT)

Transformez un script de narration en une vidéo explicative générée par code. Le SRT est la seule référence temporelle : le pipeline avance en cinq phases, et chaque phase se termine en attente de la confirmation de l'utilisateur.

Environnement et dépendances

  • Windows : Playwright (channel="msedge", utilise Edge local sans installer Chromium) + imageio-ffmpeg (fournit ffmpeg ; ne contient pas ffprobe, utilisez ffmpeg -i pour analyser les métadonnées depuis stderr).
  • Installation des dépendances : pip install playwright imageio-ffmpeg (le script gère déjà la localisation de ffmpeg).
  • Les scripts du dossier scripts/ sont testés sur Windows ; sur Linux/macOS, supprimez channel="msedge" et utilisez le ffmpeg système.

Aperçu des cinq phases

PhaseLivrablePorte de validation
0 Planoutline.md + tableau de décisionsL'utilisateur valide le plan et les décisions
1 Script+SRTscript.md / subtitles.srt / notes_du_commentateur.mdL'utilisateur valide le script
2 Storyboardstoryboard.json (passe obligatoirement check_timeline.py)L'utilisateur valide le storyboard
3a Première scène+librairie de composantsassets/shared/ + scene-001 (échantillon basse résolution)L'utilisateur approuve le style avant le rendu en masse
3b Rendu complet des scènesscenes/scene-NNN/scene.mp4 × NL'utilisateur révise les plans clés
4 Montage finaloutput/final.mp4 + cover.pngL'utilisateur valide la vidéo finale

Les détails du processus, les champs du tableau de décisions, les pièges courants (imageio-ffmpeg sans filter_complex_script, piège du niveau d'alimiter, etc.) sont dans references/pipeline.md.

Trois engagements fondamentaux (non négociables)

  1. Référence temporelle SRT : les limites des scènes coïncident avec les limites des sous-titres, écart total ≤0,1 s ; exécutez python scripts/check_timeline.py <project_dir> à chaque phase.
  2. Reprise via WORKLOG : créez un fichier WORKLOG.md à la racine du projet (modèle dans references/worklog-template.md), unique vecteur d'état entre sessions ; ne modifiez pas le tableau de décisions après validation ; à partir des phases 3/4, les fichiers de base (outline/script/SRT/notes/storyboard/assets/shared/scenes) sont gelés.
  3. Portes de validation de phase : après chaque phase, le pipeline s'arrête et attend une confirmation explicite de l'utilisateur avant de passer à la suivante.

Rendu des scènes (Phase 3)

Chaque scène est une page HTML indépendante qui implémente window.setTime(t) pour un rendu déterministe (chaque animation est une fonction pure de t) ; le sous-titrage utilise un élément de contrat unifié div#subtitle. Le contrat de développement complet, la procédure de contrôle qualité (check_frames.py pour l'assemblage des images-clés), et les règles de conception sont dans references/visual-authoring.md.

Modèle de démarrage : assets/neon-theme/ (thème cyan néon validé avec theme.css + components.js, incluant particules, apparition lettre par lettre, cartes de données, barres de comparaison, indicateurs de risque, transitions, composants de sous-titres) — si l'utilisateur veut le même style, copiez-le directement dans assets/shared/ du projet ; pour d'autres styles, utilisez sa structure comme base.

python scripts/render_scene.py scenes/scene-001 --duration 10.5 --fps 30 --size 960x540   # Échantillon basse résolution
python scripts/check_frames.py scenes/scene-NNN --times 0.5,3,6,9.2                        # Contrôle qualité avant rendu
python scripts/render_all.py .                                                             # Rendu complet en masse
python scripts/render_all.py . --no-subtitle --outdir output/nosub                         # Variante sans sous-titres
python scripts/concat_final.py .                                                           # Montage + couverture

Module sonore optionnel (désactivé par défaut)

Activé uniquement si l'utilisateur demande explicitement des effets sonores calés sur les temps forts, et verrouillé dans le tableau de décisions de la phase 0. Les ressources proviennent de Freesound CC0 (vérification de licence pour chaque fichier). La timeline sonore est enregistrée dans assets/sfx/mix_timeline.json et soumise à l'utilisateur pour pré-validation ; deux chemins de livraison au choix : mixage automatique FFmpeg (mix_sfx.py), ou export d'une feuille de repérage pour CapCut (make_cue_sheet.py) pour un ajout manuel — ce dernier est plus fiable en pratique. Le processus complet est décrit dans references/sound.md.

Références externes / outils

  • vibe-motion/sound (GitHub, cloner dans tools/sound/) : CLI de recherche/téléchargement Freesound. Le dépôt n'a pas de licence, il sert uniquement d'outil de téléchargement interne ; la licence est celle de chaque fichier son Freesound soumis à la déclaration CC0.

Spécifications de livraison

final.mp4 : 1920×1080 / 30 ips / h264 / yuv420p, durée exacte correspondant à la durée totale du SRT ; cover.png : image fixe extraite du point culminant (trouvée par échantillonnage) ; après vérification de la durée, du nombre d'images, des spécifications, et du niveau de la piste audio, mettez à jour le WORKLOG puis présentez la livraison.

Skills associés