Montage vidéo
Cette compétence transforme des rushes d’une personne qui parle en face caméra en une vidéo finalisée, un fichier de sous-titres SRT et une miniature, à l’aide d’un outil en ligne de commande intégré (vedit.py) basé sur ffmpeg, Whisper et Playwright. Elle gère l’intégralité du montage : choix des prises propres, découpage net, variété de plans, graphismes et placement de B-roll, sous‑titres, volume, miniature et le contrôle qualité final. Elle délègue à la compétence video-scripting pour le script et les notes de montage, à brand/brand-profile.md pour les couleurs, polices et mentions de conformité, à la compétence image-generation pour les images fixes, à la compétence review-loop pour la vérification indépendante, et à la compétence scheduling pour la publication. Rien n’est posté ou programmé depuis cette compétence.
Ordre d’autorité : brand-profile.md prime pour les constantes de marque et le libellé de conformité ; cette compétence définit la méthode.
Avant de commencer
- Trouvez l’espace de travail marketing (par défaut
marketing/). S’il n’y en a pas, dites-le en une ligne et proposez la compétencebrand-setup; l’outil fonctionne tout de même avec un aspect neutre. - Trouvez le dossier de la pièce,
content/<aaaa-mm-jj>-<slug>/. Il doit contenirscript.txt(une phrase parlée par ligne ; les[notes entre crochets]et les marqueurs[CHAPTER N • Title]ne sont jamais parlés), et idéalementedit-notes.txt(lignesHOOK ON SCREEN:,COVER:,OUTCOME:) etsources.txt(les seules figures autorisées à l’écran). Si la personne a filmé sans script, transcrivez d’abord et traitez la transcription nettoyée comme le script. - Lisez les sections
## Identité visuelle,## Conformité,## Limiteset## CTA & contactdu profil de marque, ainsi quebrand/voice-learnings.mdpour les mots et le phrasé sur les graphismes et les miniatures. - Vérifiez que l’outil est prêt :
python3 <skill>/vedit.py doctor. Si quelque chose manque, exécutezbash <skill>/setup.shune fois (ffmpeg, Node, environnement virtuel Python, Whisper, Playwright, polices). Le grand modèle Whisper fait environ 3 Go et transcrit à peu près à une à deux fois la durée du clip sur un CPU d’ordinateur portable, alors lancez les étapes longues en arrière-plan.
La norme
- Une seule lecture propre de chaque ligne. La vidéo finale contient exactement une lecture de chaque ligne : pas de redémarrage, pas de « le, le », pas de demi-phrase d’une prise abandonnée, pas de fin de mot coupée. C’est un blocage, pas une finition. Un « euh » naturel isolé peut rester (les gens doivent sonner comme eux-mêmes), mais jamais dans la ligne d’ouverture et jamais deux dans une même ligne.
- Suivez la parole, pas le script écrit. Les gens améliorent les lignes en parlant. Une reformulation en direct se traduit par une ligne manquante ou peu couverte dans le repérage de prises ; ce n’est pas une erreur. Conservez leur version, coupez uniquement les vrais bafouillages et redémarrages, et corrigez tout graphisme ou carte d’accroche écrite d’après le script pour correspondre à ce qui a été réellement dit.
- Gardez les moments qui font gagner l’affaire. Si le script a une ligne précoce « qui je suis » ou un appel à l’action de clôture, elle reste là où elle est.
- Jamais un plan fixe unique. Alternez plan large et serré à chaque coupe, recadrez à l’intérieur des longues lectures, coupez sur du B-roll, portez l’histoire avec des graphismes animés. La tête parlante est la colonne vertébrale, pas la vidéo entière.
- Les sous‑titres viennent de l’audio final , vérifiés par rapport au script, pour correspondre exactement à ce qui est entendu. Gravés sur les shorts ; SRT uniquement sur les longs formats.
- Volume -14 LUFS , pic vrai -1,5 dB, pour que ce soit correct sur toutes les plateformes.
- Une miniature à partir d’une image réelle avec le titre dans le carré sûr de la grille, proposée en une ou deux variantes.
- Le contrôle qualité passe avant toute livraison. Il retranscrit le rendu, écoute chaque coupe individuellement et vérifie que chaque coupe tombe dans le silence.
deliverrefuse sans un PASS récent. - Honnête sur l’oreille. Claude ne peut pas entendre. La porte vérifie les mots et l’énergie, pas le ton, une toux sous un mot ou une mauvaise jonction de son ambiant. Dites-le à la remise, à chaque fois.
La méthode
Chaque commande est python3 <skill>/vedit.py <commande> <slug>. Lisez references/project-config.md avant de modifier project.json à la main.
- Rassemblez d’abord tout. Listez chaque clip dans le lot. Appairez les deuxièmes caméras par le son (
scripts/sync_cams.py; une vraie correspondance donne environ 0,4 à 0,55, une non-correspondance environ 0,03) et les caméras silencieuses comme les drones par le mouvement et les timestamps (scripts/sync_cams_visual.py). Faites un contact-sheet de chaque photo et clip court, notez ce qui est utilisable comme B-roll, et demandez immédiatement toute caméra que la personne mentionne et qui n’est pas dans le dossier. Ouvrezreferences/multicam-and-long-form.mdpour les détails. - Init.
vedit.py init <slug> --raw <clip caméra A> --pack <dossier contenu> [--long] [--cam B=<clip>]. Il copie le script, lit les notes de montage et mappe la palette et les polices du profil de marque dansproject.json. Ensuite, remplissezvocabavec tous les noms propres du script, y compris le nom du présentateur. - Prep (lent, en arrière-plan) :
vedit.py prep <slug>. Master en upright à la fréquence d’images de la caméra, audio 16 kHz, caméras supplémentaires synchronisées, et deux transcriptions (large-v3 verbatim plus medium.en). Il s’arrête sur les rushes HDR, les rushes au mauvais format, et l’audio de qualité d’appel d’un micro Bluetooth ;references/audio-and-sync.mdcontient la voie de secours. - Takes.
vedit.py takes <slug>aligne la parole sur le script comme un prompteur : un saut en arrière est un redémarrage, donc chaque tentative de chaque ligne devient une prise notée. Une deuxième écoute reprend chaque prise individuellement pour trouver les bafouillages, répétitions et doubles lectures. Lisezpicker/takes_report.txt. Ensuite, vérifiez avant de faire confiance : ouvrezreferences/whisper-pitfalls.md, car Whisper ignore les faux départs répétés, invente des mots finaux et sépare les termes inconnus. Une coupe de redémarrage proposée reste valide sauf si la carte d’énergie ne montre pas de deuxième burst de parole. - Picks. Soit la personne choisit dans le navigateur (
vedit.py picker <slug>en arrière-plan, puis ouvrezhttp://localhost:8765), soit, si elle demande à Claude de choisir, écrivez vous-mêmepicker/picks.jsonavec unenotepour chaque modification par rapport au choix machine. Dites-leur quelles lignes sont rouges ou orange et pourquoi. Préférez les lectures de la même prise que les lignes voisines : elles coulent sans coupure. Ne livrez jamais à partir de choix machine. - Chorégraphiez (travail de conception, lisez d’abord
references/style-notes.md). À partir du script, desources.txtet de ce qu’il y a dans les rushes : une carte d’accroche sur l’image 0 d’aprèsedit_notes.hook_on_screen(3 à 5 mots, une promesse pas la réponse) ; des cartesgraphics.jsonpour les moments qui en ont besoin, avec uniquement des figures présentes danssources.txt; descuesancrés à des lignes ou des mots parlés, jamais à des temps fixes ; des B-roll motivés (sur le mot qu’ils illustrent, ou juste après un regard ou un geste) ;framing.face_x/eye_ymesuré sur une image ;exit_tailpour la sortie. Prévisualisez les graphismes sous forme d’images fixes avecvedit.py mg-preview <slug>. - Build.
vedit.py build <slug> planest instantané et affiche le résumé du montage ;build cuesliste toute cue qu’il n’a pas pu placer (corrigez-la, ne l’ignorez jamais). Itérez surbuild cutplusscripts/cut_check.pyjusqu’à ce que ce soit propre, faites la miniature (étape 9) pour que l’image de poster soit intégrée, puisbuild all. Les règles appliquées par la construction sont dansreferences/edit-rules.md. - Gate.
vedit.py gate <slug>. Il échoue sur une ligne lue deux fois, un bafouillage ou un départ abandonné laissé, de l’énergie vocale sans mots (une relecture cachée), une répétition ou un saut à travers une coupe (entendue seule par les deux modèles), des mots errants d’une prise abandonnée à une coupe, une coupe qui tombe sur du son, et (multi-caméra, si ungaze.jsonexiste) la mauvaise caméra. Corrigez la cause, reconstruisez, re-gatez. Ensuite, la passe de proxy humain : regardez un contact-sheet du rendu, lisez chaque sous-titre (vedit.py captions <slug>), et pour chaque ligne que vous avez modifiée, notez ce qui était là et ce qui est conservé. - Miniature.
vedit.py frames <slug> --every 5pour un contact-sheet ; choisissez une image avec contact visuel, une expression chaleureuse (pas à mi-mot), une mise au point nette et un accessoire qui raconte l’histoire. Définissezcover.frameet une ou deuxvariants(2 à 4 mots, grands, un mot en surbrillance, simples et vrais), puisvedit.py cover <slug>. Il vérifie chaque zone de texte par rapport au carré sûr de la grille et au visage, et écritgrid_tiles.jpgmontrant ce que la grille de profil affichera. - Relecture. Remettez le contact-sheet du rendu, les miniatures, le SRT et la liste des coupes à la compétence
review-loop. Les figures à l’écran sont vérifiées par rapport àsources.txt, pas prises pour acquises. - Livrer et diffuser.
vedit.py deliver <slug>écrit la vidéo, le SRT, les miniatures, la liste des coupes (chaque ligne : prise, plage source, coupes, chaque modification avec sa raison), le rapport de contrôle qualité et, pour les longs formats,youtube-chapters.txtdanscontent/<date>-<slug>/video/.vedit.py release <slug> --to <dossier>copie la vidéo, le SRT et une vignette JPG sous un même nom de fichier, ce que les planificateurs et YouTube attendent.
Vérifications avant expédition
La remise à la personne inclut toujours :
- Gate PASS, récent (plus récent que le rendu).
- Synchronisation labiale mesurée sur le rendu final :
scripts/lipsync.py build/final.mp4 <t0> <t1>sur deux ou trois passages face caméra, chacun dans ±40 ms. - Vérification des sous-titres lue (
vedit.py captions <slug>, livrée sousvN-caption-check.txt) : les FIX semblent sensés, et chaque CHECK est nommé comme une ligne que la personne doit écouter. - Durée et volume indiqués.
- Chaque modification de leurs choix, avec la raison, et les lignes qui valent la peine d’être écoutées.
- Miniature A contre B, et l’aperçu de la grille.
- « Rien n’a été posté ou programmé. »
- « Je ne peux pas l’entendre : écoutez avant qu’il ne parte. »
Adaptation
- Pas de script ? Transcrivez d’abord (
prepproduit les deux transcriptions), nettoyez la transcription en une phrase par ligne, enregistrez-la sousscript.txt, puis lanceztakes. - Aspect différent : tout ce qui est visuel lit
project.jsonbrand(couleurs, polices) etcover.wordmark(une petite étiquette de nom optionnelle). Modifiez-le là, jamais dans les scripts. - Orthographe différente :
captions.localeen-GB(par défaut) ouen-US. - Machine plus lente : `