Communitygithub.com

visalnaqvi/video-generator-skill

Finalise une vidéo en studio : sélectionne ou génère la musique, ajoute les effets sonores, les sous-titres mot par mot, mixe au format LUFS social, exporte en MP4 et cover, et exécute un contrôle qualité automatique.

Qu'est-ce que video-generator-skill ?

Cette compétence automatise la phase finale de production vidéo dans un pipeline de studio. Elle prend en entrée un storyboard validé avec voix-off et timings, et produit une vidéo complète avec musique, effets sonores, sous-titres, mixage audio et export. Par défaut, elle utilise des outils gratuits (bibliothèque musicale ou génération code) ; la musique payante (générée par IA) n'est utilisée qu'après approbation de l'utilisateur. Le processus comprend six étapes : sélection/génération de la musique adaptée à l'ambiance, placement des effets sonores sur chaque plan, mixage audio avec ducking et normalisation LUFS, ajout de sous-titres mot par mot en surbrillance, rendu final et contrôle qualité, puis validation. Cette compétence ne modifie jamais les visuels ni les paroles ; toute demande de changement visuel ou de timing doit être traitée par les compétences storyboard ou voix-off. Elle fonctionne sur la ligne de commande avec Node.js et produit des fichiers audio, vidéo et rapports dans des dossiers dédiés.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/visalnaqvi/video-generator-skill/tree/HEAD/.claude/skills/render

Demander à votre IA préférée

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

Documentation

Rendu — musique, sons, sous-titres, export final

Entrée : videos/<video>/ avec un storyboard.json approuvé (adapté à la voix : contient audio et timing) et un audio/voice-script.json approuvé. Sortie :

audio/music.wav        musique choisie ou générée
audio/mix.wav          bande sonore finale (voix + musique duckée + SFX), -14 LUFS
audio/mix.json         chaque événement sonore (plan, repère, fichier, temps) pour vérification
render/final.mp4       1080x1920 (selon le format), 30 ips, H.264 + AAC
render/cover.png       couverture / miniature en pleine résolution
render/qc.json         rapport de contrôle qualité

Cette étape ne modifie pas les visuels ni les paroles. Animation ou timing erroné → compétences storyboard / voix-off. Gratuit par défaut : musique de bibliothèque ou générée par code, effets sonores générés par code. Musique payante (générée par IA) seulement si l'utilisateur le demande ou approuve un devis.

Étape 1 — Musique

  1. Lire le music.mood / les notes du storyboard et la durée de la vidéo.
  2. Chercher dans studio/library/music/ (index.json liste les pistes avec tags d'ambiance, bpm, licence). Choisir la meilleure correspondance ; si aucune ne convient, le dire.
  3. Pas de correspondance → générer la solution de repli gratuite, avec le lift ("drop") au début du plan de révélation (temps de début de scène — calculé à partir des durées/transitions) : node studio/scripts/make-music.mjs --out videos/<video>/audio/music.wav --duration <s> --mood upbeat|calm|cinematic|tense --bpm <n> --drop <s> [--silence <from>-<to>] (tense : tonalité mineure, pulsation de battement, fin non résolue ; --silence coupe une fenêtre avant un son de révélation — en ambiance tense, une horloge qui tic-tac suit). Vidéo Univers : suivre universe.json → music / sfx. Pistes de la bibliothèque : copier/convertir en audio/music.wav ; le rognage, le fondu et le ducking se font dans le mixage.
  4. Enregistrer dans storyboard.json → music.file, music.source (piste + licence, ou "code-generated"), facultatif music.db (par défaut -16 dB avant ducking).

Étape 2 — Effets sonores

Les repères sont déjà dans les sfx de chaque plan (mots simples, ancrés aux images ou aux mots parlés par l'étape voix-off). Le mixeur fait correspondre les mots → sons via studio/library/sfx/index.json (généré par node studio/scripts/make-sfx.mjs ; les sons personnalisés vont dans custom, vérifiés en premier). repeat + every jouent un repère plusieurs fois ; syncEnd: true le place à la fin du plan ; les montées sonores se terminent sur leur repère. Les whoosh de transition sont facultatifs (--auto-whoosh) — l'utilisateur préfère un son discret : moments signature uniquement (≈ 1 repère toutes les 2 s au maximum, aucun sur la plupart des transitions). Si un storyboard a beaucoup plus de repères que cela, les réduire aux moments clés avant le mixage et le dire. Corriger les lignes "No sound matched" du mixeur en ajoutant des mots-clés ou un son personnalisé — jamais en modifiant la conception du storyboard.

Étape 3 — Mixage

node studio/scripts/mix.mjs videos/<video> (--dry pour prévisualiser le nombre d'événements d'abord)

La voix reste au-dessus ; la musique est duckée par la voix (sidechain) et fondue à la fin ; SFX à -12 dB (--sfx-db, ou storyboard.sfxDb) ; limiteur de mastering et normalisé à -14 LUFS / -1,5 dBTP. Définit storyboard.finalAudio. Relancer après toute modification audio.

Étape 4 — Sous-titres

Activés par défaut pour les formats sociaux. Dans storyboard.json : "captions": { "enabled": true, "y": 83, "size": 50, "skipLines": ["L11"] }

  • Les phrases (≤ 4 mots, équilibrées, coupées sur les pauses) proviennent des timings vocaux ; le mot parlé est surligné dans la couleur de surbrillance de la marque.
  • skipLines : lignes VO dont les mots sont déjà à l'écran (numéros de téléphone, URL).
  • Par plan : captionY (% du cadre) pour les déplacer, captions: false pour les masquer là où les mêmes mots sont à l'écran (ex. un nom en bas de l'écran).
  • Les garder dans la zone de sécurité (83 % par défaut) et hors des éléments de design importants.

Vérifier avec une planche contact (les sous-titres apparaissent sur les images où quelqu'un parle) : node studio/scripts/render.mjs videos/<video>/storyboard.json --sheet --scale 0.25 --out <scratchpad>/captions-sheet.png Regarder une fois ; corriger les collisions avec captionY / captions: false.

Étape 5 — Rendu final, couverture, QC

node studio/scripts/render.mjs videos/<video>/storyboard.json --final
node studio/scripts/render.mjs videos/<video>/storyboard.json --cover
node studio/scripts/qc.mjs videos/<video>

Le QC doit passer : résolution, fréquence d'images, codecs, durée = storyboard, loudness -14 ±1,5 LUFS. Avertissements (pic réel, silences, images noires) → expliquer ou corriger. Ne pas regarder le MP4 ; envoyer render/final.mp4 (et la couverture) à l'utilisateur avec le résumé QC et ce que contient le mixage (source musicale, nombre d'événements sonores, sous-titres activés/désactivés).

Étape 6 — Approuver

Utilisateur satisfait → "status": "final" dans storyboard.json → render, terminé. Modifications : retouches musique/son/sous-titres → étapes 1 à 5 ici ; changements visuels ou de timing → compétence storyboard / voix-off, puis relancer cette étape.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Skills associés