Éditeur vidéo
Transforme un dossier de clips en une courte vidéo finie. L'agent est le monteur : il décide de l'histoire et rédige un plan de montage, et les scripts exécutent les parties mécaniques avec exactitude, de sorte que les coupes tombent sur le temps, rien ne se répète accidentellement et rien n'est letterboxé.
Lisez d'abord LOCAL.md s'il existe : il contient le Python de cette machine, le fichier de marque et les dossiers de médias. Le propriétaire, les polices de la marque, les logos et l'apparence par défaut vivent dans un fichier de marque (~/.video-editor/brand.json, voir references/brand.md), jamais dans les scripts.
Les clips uniques qui ne nécessitent qu'un rognage ou un simple recadrage, les sous-titres sur un seul clip et la publication relèvent du skill social de l'installation (pour XNP : xnp-social). Ce skill réalise le montage ; ce skill-là révise, sous-titre, planifie et publie.
Il n'y a pas de liste de types de vidéos
Chaque demande est un mélange. Ne cherchez pas un modèle correspondant. Décidez plutôt de quatre choses à partir du brief, par section si la vidéo change de caractère à mi-parcours :
- La colonne vertébrale : ce qui pilote le timing.
Musique : coupes sur les mesures et les temps, plans choisis pour l'énergie, le drop est le pic (
lenen"2bar","1beat"). Parole : les mots définissent la durée, l'image coupe en fin de phrase, la musique duck sous la voix (audio_dbsur le plan parlé, durées en secondes). Histoire ou chronologie : arrivée, construction, moment, après-coup ; coupe sur l'action et les changements de lieu, la musique est un fond. Un hybride change de colonne vertébrale par section : un shout-out de 6 secondes sur la parole, puis des images de concert sur le beat ; ou un récit de voyage sur la chronologie avec un montage beat-cut au concert. - Destination et conception. Où ça va (Reel, Story, carousel, feed, TikTok, Shorts, YouTube) et comment utiliser cet espace : plein écran, un carré encadré ou une image 4:5 sur un fond conçu, ou les deux en alternance par plan. Choisissez à partir des rushes et de l'objectif, pas par habitude ; un moment large qu'un recadrage 9:16 ruinerait peut vouloir un Reel encadré, un carousel ou un récapitulatif 16:9. Lisez references/formats.md pour savoir ce que chaque plateforme fait de l'image et quand chaque conception convient. La durée suit la destination et le matériau.
- Incontournables. Personnes nommées qui doivent apparaître et être reconnaissables, un logo, une date, un remerciement, un moment spécifique, une ligne de légende. Ne demandez que si le brief laisse vraiment une question ouverte.
- Couches sonores. Musique uniquement ; musique plus foule ou ambiance qui apparaît ; parole avec musique en dessous ; parole uniquement. La parole génère des sous-titres (voir Sous-titres ci-dessous).
Écrivez ensuite le plan, avec "destination" défini pour que le cadre, la zone de sécurité et la limite de durée suivent. references/examples.md montre quatre briefs travaillés (reel d'afterparty, shout-out, shout-out avec images de concert, récit de voyage) comme un raisonnement, pas comme des types à copier. references/craft.md contient les règles de montage qui s'appliquent à tous.
Flux de travail
Les scripts sont dans scripts/ ; exécutez-les avec le Python de LOCAL.md, PYTHONUTF8=1 PYTHONIOENCODING=utf-8, FFmpeg et ffprobe dans le PATH. Travaillez dans un dossier de projet en dehors du skill (src/, audio/, log/, proxy/, out/, review/, edit.json).
- Brief. Qui et quoi dans les rushes, comment reconnaître chaque personne, l'événement, l'objectif, les quatre décisions ci-dessus. Écrivez-le dans
brief.txt; Gemini le lit. - Journaliser les rushes.
gemini.py log WORKDIR src/*.mp4 --context brief.txt --ratio 9:16écritlog/NOM.jsonpar clip : moments avec qui est où (x en fraction pour le recadrage), action, émotion, énergie, son, parole, qualité, si une fenêtre 9:16 contient les sujets, le meilleur centre de recadrage et un usage (ouverture, pic, réaction...). Environ un centime US par clip. Les logs sont des pistes : confirmez les visages, les centres de recadrage et les "meilleurs moments" sur des images avant de construire dessus. - Regarder.
sheet.pycrée des planches contact étiquetées en une seule exécution FFmpeg :--every 2à travers un clip,--times, comparaison de candidats aveca.mp4@3 [email protected],--crop 9:16 --cx 0.4pour voir une source telle qu'elle sera cadrée,--grid 10pour la planification des recadrages. Lisez l'image vous-même ; ne demandez jamais au propriétaire de regarder. - Planifier. Écrivez
edit.json(references/edit-format.md). Chaque plan nomme un moment différent ; donnez à chacun une note expliquant pourquoi il est là. - Vérifier.
validate.py edit.json(render.py l'exécute aussi et refuse en cas d'erreurs). Erreurs : les mêmes rushes utilisés deux fois, une source trop courte, un mouvement inconnu, unfitencadré sans permission, du texte dans les zones UI de la plateforme, des fichiers manquants, une musique trop courte. Avertissements : plans du même clip à moins de 2s d'intervalle, plans qui se ressemblent, coupes hors beat, bords noirs à l'intérieur de la source encadrée, logos près des zones UI. Lisez chaque avertissement et décidez ; ne le réduisez pas au silence. - Rendu brouillon.
render.py edit.json --out out/v1-draft.mp4 --draft(demi-taille, rapide). Ensuitesheet.py out/v1-draft.mp4 --plan edit.json --out review/v1.pngmontre le début, le milieu et la fin de chaque plan : vérifiez le cadrage, les têtes, le placement du texte et que chaque plan correspond à ce que dit la note. - Rendu final.
render.py edit.json --out out/v1.mp4. Préréglage lent, environ 5 minutes pour 30 secondes de sources 4K ; render.py vérifie ensuite la taille, la durée, le son, les barres noires par plan, les images noires et lemax_mbdu plan. - Critique.
gemini.py review out/v1.mp4 --context brief.txt --plan edit.json --out review/v1.json(moins d'un centime). Traitez chaque note comme une affirmation : vérifiez-la par rapport aux images ou au plan avant de changer quoi que ce soit. Il a déjà qualifié du texte correct de "dangereux" et une date correcte de "faute de frappe". Ses vraies prises ont été des plans qui se ressemblaient, une main bloquant un geste clé, un téléphone dans le cadre, un flash ressemblant à un artefact. - Itérer avec de nouveaux numéros de version ; n'écrasez jamais un fichier livré. Conservez
edit.jsonpar version (copiez dansedit-v2.json) pour que n'importe quelle version puisse être re-rendue. - Livrer comme le dit LOCAL.md, décrivez en mots ce qu'il y a dans le montage (plan par plan, ce que dit le texte, où la musique culmine), et remettez le fichier au skill social pour révision, sous-titres et publication. La publication nécessite toujours l'approbation explicite du propriétaire.
Sous-titres
Les sous-titres de parole sont le travail du skill social : effectuez d'abord le rendu du montage, puis exécutez son assistant de sous-titrage (pour XNP : xnp-social/scripts/captions.py transcribe sur le rendu final, pour que les temps des mots correspondent au montage), suivez son étape d'approbation obligatoire, puis incrustez. Si un fichier .srt ou .ass approuvé existe déjà pour la timeline finale, le captions.file du plan l'incruste pendant le rendu à la place.
Limites honnêtes
La vérification des similitudes est un hash d'image plus une couleur moyenne : elle attrape le même moment deux fois, pas "la même personne sous le même angle" à des moments différents. Cette vérification sémantique vient des logs et de la revue Gemini, et de la lecture de la planche contact. Il n'y a pas de détection automatique de battements : donnez le BPM et un point de départ sur un temps fort (music.start), puis la grille est exacte. Il n'y a pas de suivi de visage : les panoramiques et les centres de recadrage viennent des logs et des planches. Les timecodes de Gemini peuvent dériver sur les longs clips ; les proxies portent un timecode incrusté pour les garder honnêtes, et log prévient quand les moments dépassent la fin du clip.
Fichiers
scripts/common.py chargeur de plan, maths de timing, sonde, marque, étalonnages. scripts/render.py le rendeur en un seul passage. scripts/validate.py le vérificateur. scripts/sheet.py planches contact. scripts/gemini.py journalisation et revue. Références : formats.md, edit-format.md, craft.md, examples.md, brand.md.