Communitygithub.com

montage-video

Monte une vidéo face caméra à partir des rushs bruts : dérushage (silences, hésitations « euh », prises ratées, reprises, consignes dites à voix haute pendant le tournage), puis B-rolls (ceux de la bibliothèque de la personne d'abord, des plans gratuits Pexels et Pixabay ensuite), animations de graphistes à sa charte (qui parle, liste cochée, lieu, chiffre, titre de partie, citation, appel à l'action, point clé) et illustrations maison, bruitages sous la voix, lecteur de corrections façon Frame.io et export Final Cut Pro. Reconnaît le type de vidéo (vidéo YouTube longue, short, formation, interview) et s'appuie sur le moteur de rendu de video-use au lieu de le refaire. Utiliser ce skill dès que la personne donne un rush, une prise brute ou un dossier de tournage et veut une vidéo montée, même sans dire « montage » : « monte cette vidéo », « /montage », « dérushe ce fichier », « enlève les blancs et les euh », « coupe les hésitations », « retire les mauvaises prises », « nettoie ce r...

What is montage-video?

montage-video is a Claude Code agent skill that monte une vidéo face caméra à partir des rushs bruts : dérushage (silences, hésitations « euh », prises ratées, reprises, consignes dites à voix haute pendant le tournage), puis B-rolls (ceux de la bibliothèque de la personne d'abord, des plans gratuits Pexels et Pixabay ensuite), animations de graphistes à sa charte (qui parle, liste cochée, lieu, chiffre, titre de partie, citation, appel à l'action, point clé) et illustrations maison, bruitages sous la voix, lecteur de corrections façon Frame.io et export Final Cut Pro. Reconnaît le type de vidéo (vidéo YouTube longue, short, formation, interview) et s'appuie sur le moteur de rendu de video-use au lieu de le refaire. Utiliser ce skill dès que la personne donne un rush, une prise brute ou un dossier de tournage et veut une vidéo montée, même sans dire « montage » : « monte cette vidéo », « /montage », « dérushe ce fichier », « enlève les blancs et les euh », « coupe les hésitations », « retire les mauvaises prises », « nettoie ce r...

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/fredericpuxeddu-lgtm/montage-video/tree/main

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Montage vidéo : du rush à la vidéo publiable

La personne tourne, dépose ses fichiers, et récupère une vidéo coupée serrée.

Ce que ce skill ne fait pas lui-même : le moteur de coupe et de rendu est celui de video-use (skill public, à installer à côté), les animations sont rendues par HyperFrames. Refaire ici ce qu'un de ces outils fait déjà, c'est deux versions à entretenir.

Installation (une fois par machine)

Ce skill tourne sur un Mac à puce Apple (M1 ou plus récent), macOS 14 ou plus. Tout reste sur la machine : aucune vidéo n'est envoyée en ligne. À vérifier dans l'ordre, et à installer ce qui manque :

  1. Le skill lui-même : ce dossier montage-video posé dans ~/.claude/skills/.
  2. ffmpeg et ffprobe : brew install ffmpeg (Homebrew : https://brew.sh).
  3. uv, qui pose les environnements Python à part : brew install uv.
  4. Node.js 18 ou plus récent (avec npx) : brew install node. HyperFrames, qui rend les illustrations, se télécharge tout seul au premier rendu (npx [email protected]), avec son navigateur de rendu.
  5. Le skill video-use (moteur de coupe et de rendu), à cette version précise, celle avec laquelle ce skill a été essayé :
    git clone https://github.com/browser-use/video-use ~/.claude/skills/video-use
    git -C ~/.claude/skills/video-use checkout 87f00c6
    
    Ailleurs que dans ~/.claude/skills/video-use : donner son dossier par VIDEO_USE_DIR. Ce skill n'utilise que son helpers/render.py, qui n'a besoin que de ffmpeg : pas de clé ElevenLabs.
  6. CrisperWhisper, le transcripteur qui entend les « euh » : python3 scripts/derush.py installer (2,2 Go, hors du skill, refuse sous 5 Go libres ; voir l'étape 0 du dérushage).
  7. Le modèle de vision qui classe la bibliothèque de B-rolls : rien à faire, il se télécharge au premier brolls.py indexer (mlx-vlm, par uv).
  8. Final Cut Pro, seulement pour le bouton « Ouvrir dans Final Cut Pro » du lecteur.
  9. Playwright et son navigateur WebKit, qui cherchent les B-rolls gratuits sur Pexels et Pixabay, sans clé ni compte : npm install -g playwright puis npx playwright install webkit. Sans eux, l'agent cherche avec son propre navigateur (voir « B-rolls »).

On vérifie l'installation sur une vraie vidéo courte (une minute suffit) : derush.py analyser, puis monter, puis verifier. Une installation n'est faite que quand ces trois commandes ont tourné.

Où vont les fichiers

Tout ce qui sert au montage d'une vidéo va sur le Bureau, dans un dossier à son nom : ~/Desktop/Fichiers de montage <nom de la vidéo> (à supprimer à la fin) ; dans ce nom, une apostrophe s'écrit ’ (typographique), jamais ' : le moteur de coupe ne lit pas un dossier qui en contient une droite, le skill s'arrête et le dit (transcriptions, listes de coupes, plans, versions, projet du lecteur de corrections, projet Final Cut). On le crée au premier geste, on ne demande pas où le mettre. Les rushs d'origine ne sont jamais déplacés ni modifiés. L'export final va aussi sur le Bureau, à côté, sous un nom lisible (« <nom de la vidéo> monté.mp4 »).

Rien ne s'efface tout seul : c'est la personne qui supprime le dossier de travail quand la vidéo lui convient. Tant qu'il est là, on peut reprendre une correction ou rouvrir le projet Final Cut, qui pointe sur ses fichiers. À la fin du montage, on lui dit où sont les deux : l'export final, et le dossier de travail qu'elle pourra mettre à la Corbeille quand elle n'aura plus de correction à faire. Un dossier du Bureau synchronisé par iCloud peut refuser mv : le copier (cp -Rc), puis mettre l'original à la Corbeille.

Où en est le skill (dire la vérité à celui qui l'invoque)

BriqueÉtat au 11/11/2026
1. Dérushage : silences, hésitations, reprises, consignes ditesEn service, hésitations entendues par CrisperWhisper 2.0 rapide depuis le 11/11/2026, essayé sur quatre rushs réels
2. B-rolls de la bibliothèque : classement local, choix, incrustation, contrôleEn service, essayé sur une bibliothèque d'essai de 12 plans
3. B-rolls gratuits Pexels et Pixabay, sans clé ni compteEn service depuis le 11/11/2026 : recherche par Playwright ou par le navigateur de l'agent (computer use), essayé sur un montage réel (trois plans posés)
4. Animations à la charte : 38 de graphistes (la façon par défaut depuis le 11/11/2026) et 24 maison, leur catalogueEn service en 16:9, essayé sur un montage réel (trois animations de graphistes) ; le format vertical n'est pas essayé
5. Lecteur de corrections (commentaires à l'image près, un point par commentaire sur la barre, commentaire rattaché à une animation, plages, dessin, versions, comparaison)En service, essayé de bout en bout sur une vidéo réelle (3 corrections, une V3) ; étude dans references/lecteur-facon-frame-io.md
6. Bruitages : souffle à l'entrée d'une animation, clic par coche, swoosh par planEn service depuis le 11/11/2026, posés seuls à l'incrustation, essayé sur un montage réel (huit bruitages)
6 bis. Musique selon l'émotionÀ construire (pas de bibliothèque de musiques)
7. Clips verticaux, sous-titres, mise en lignePas dans ce skill
8. Mémoire des correctionsManuel : une règle datée en bas de ce fichier après chaque retour
9. Export Final Cut Pro (bouton du lecteur, pistes séparées)En service : projet fabriqué et conforme au format de Final Cut ; bruitages sur leur piste ; sans étalonnage ni musique. Premiere et DaVinci : à construire

Une demande qui touche une brique « à construire » se dit telle quelle dans la livraison : on livre ce qui marche, on nomme ce qui manque. On n'annonce pas « vidéo montée » pour une vidéo seulement dérushée.

Les réglages de la machine (à la première utilisation)

Rien de propre à une personne n'est écrit dans ce skill : il sert à plusieurs. Le dossier de B-rolls, le cache et la charte des illustrations vivent dans un fichier de réglages de la machine, ~/.config/montage-video/reglages.json, hors du skill.

python3 scripts/brolls.py reglage            # montre où on en est

À la première demande de B-rolls, si « bibliotheque » vaut « aucune », demander une fois à la personne : « As-tu un dossier de B-rolls à toi ? Donne-moi son emplacement. » Puis brolls.py reglage --bibliotheque <dossier>. Elle n'en a pas : on continue avec les banques seules, sans insister. Même logique pour la charte : sans réglage, les illustrations sortent dans le style par défaut, et on lui montre le catalogue pour qu'elle choisisse le sien.

Le dérushage, pas à pas

scripts/derush.py porte les trois gestes. Tout tourne sur le Mac, rien n'est envoyé en ligne.

0. Une fois par machine : installer le transcripteur. Les hésitations sont entendues par CrisperWhisper 2.0 dans sa version rapide (turbo), un Whisper réentraîné pour écrire les « euh ». Il vit hors du skill, dans ~/.local/share/montage-video/crisper (ou $MONTAGE_VIDEO_DONNEES) :

python3 scripts/derush.py installer          # 2,2 Go, refuse sous 5 Go libres

Sans lui, analyser s'arrête et le dit : il ne retombe jamais en silence sur une autre méthode.

1. Analyser.

python3 scripts/derush.py analyser <video> --edit-dir <dossier de travail>/edit

Le script transcrit mot à mot par CrisperWhisper, repère les silences au son, et écrit edit/derush/<nom>.json (les données) et edit/derush/<nom>.md (le texte mot pour mot, phrase par phrase, horodaté). Le dossier de travail est celui de la vidéo sur le Bureau (voir « Où vont les fichiers »).

Pourquoi CrisperWhisper : un transcripteur ordinaire rend un texte propre, donc sans les « euh », et on ne coupe pas ce qu'on ne voit pas. Mesuré le 11/11/2026 sur quatre rushs réels (296 s de son, 11 hésitations vérifiées au son) : CrisperWhisper rapide en trouve 10, l'ancienne méthode (Whisper amorcé par une phrase pleine d'hésitations, gardée en --moteur amorce) 5 ; aucun mot réel perdu d'un côté comme de l'autre ; environ 4 fois plus lent (152 s contre 35 s). On coupe seulement l'intervalle entre le mot réel d'avant et le mot réel d'après : une hésitation inventée ne coupe rien.

Le modèle rapide date parfois mal le mot qui suit un « euh » (durée nulle, posé au milieu de l'hésitation) : sur un rush d'essai, deux « que », et 0,2 s de « euh » restée au rendu. crisper.py le redate au son (voix tenue jusqu'à un creux, recherche bornée à 0,4 s et au mot suivant) et écrit chaque correction dans corrige_au_son de la transcription.

2. Lire le texte et décider des reprises. C'est le travail de l'agent, pas d'un script : lire <nom>.md en entier et écrire un fichier retirer.json, une liste de {"debut", "fin", "raison"}. On y met :

  • la reprise : une phrase recommencée. On garde la dernière version complète, on retire les précédentes, du début de la première tentative jusqu'au début de la bonne ;
  • la consigne dite à voix haute : « je reprends », « coupe ça », « on la refait ». On retire la consigne et ce qu'elle désigne ;
  • la phrase abandonnée en cours de route, le faux départ, l'aparté hors sujet (« attends », un bruit, quelqu'un qui entre).

Les bornes se posent sur les horodatages du texte, avec 0,1 s de marge avant le premier mot gardé. Dans le doute sur une reprise (deux versions qui disent deux choses différentes), on garde les deux et on le signale : couper une idée est plus grave que laisser une redite.

Les « voix sans mot » listées en tête du texte ne sont pas coupées d'office : c'est un son parlé qu'aucun mot ne couvre. Souvent une hésitation que le transcripteur a ratée, parfois un rire, un mot mal entendu, ou un « euh » dit exprès (un rush d'essai en contenait un : « c'était un euh assez long »). L'agent regarde le contexte et l'ajoute à retirer.json seulement si c'est du déchet.

3. Monter.

python3 scripts/derush.py monter edit/derush/<nom>.json --retirer retirer.json -o <sortie>.mp4

Le script écrit la liste de coupes au format de video-use et la fait rendre par son moteur (extraits, fondu son de 30 ms à chaque coupe, collage sans réencodage). --apercu rend en 720p, plus vite, pour une première lecture. Il s'arrête si la durée rendue s'écarte de la durée attendue.

4. Vérifier, puis seulement livrer.

python3 scripts/derush.py verifier <sortie>.mp4

Le rendu est retranscrit par le même transcripteur. On livre quand hesitations_restantes vaut 0, qu'il n'y a plus de silence de plus de 0,6 s, et que le texte rendu se lit d'une traite, sans phrase amputée ni mot coupé. Une phrase amputée se corrige dans retirer.json, pas en élargissant les marges pour tout le monde. On regarde aussi deux ou trois coupes à l'image (video-use, helpers/timeline_view.py) : un saut de cadre trop visible appellera un zoom à la brique 3, en attendant on le dit.

Les B-rolls, pas à pas

Un B-roll est un plan qui montre ce que la personne dit pendant qu'on continue de l'entendre. scripts/brolls.py porte les gestes ; le rendu reste celui de video-use.

1. Classer la bibliothèque, une fois.

python3 scripts/brolls.py indexer

Chaque plan est décrit sur la machine par un petit modèle de vision (trois images du plan, deux phrases), le thème est le nom du sous-dossier. Compter 3 secondes par plan ; seuls les fichiers nouveaux ou changés sont refaits, donc on relance sans crainte avant chaque montage. Un fichier de plus de 40 s est découpé en plans de 20 s. Les images fixes comptent aussi. La bibliothèque n'est jamais modifiée : l'index est rangé avec les réglages.

Le modèle de vision décrit bien le sujet, mal le détail : il lui arrive de compter « trois horloges » parce qu'il voit trois images du même plan. La description sert à trouver, pas à décider : on regarde la planche du contrôle avant de livrer.

2. Lire la vidéo dérushée, phrase par phrase.

python3 scripts/brolls.py phrases <video dérushée>

3. Choisir : c'est le travail de l'agent, pas d'un script. Lire la bibliothèque entière (brolls.py lister) quand elle tient en quelques dizaines de plans ; au-delà, brolls.py chercher "<mots>" avec des mots de ce qu'on veut VOIR (« clavier », « horloge », « caméra »), pas la phrase dite : « je laisse tourner 45 minutes » ne contient aucun mot d'une horloge, c'est à l'agent de faire le pont entre l'idée et l'image.

L'ordre : la bibliothèque de la personne d'abord (ses images lui ressemblent, personne d'autre ne les a), une banque gratuite seulement quand rien n'y colle :

Les banques gratuites se prennent sans clé ni compte, de deux façons. L'agent choisit :

OptionQuand la prendreCommande
Playwright (par défaut)Toujours en premier : rapide, sans écran, le même résultat chez Claude comme chez ChatGPTbrolls.py banque "<mots>"
Computer use (le navigateur de l'agent : Claude in Chrome, computer use, l'agent de ChatGPT)Playwright manque sur la machine ou ne rend rien qui colle ; ou le plan demande un vrai coup d'œil (une ambiance, un geste précis)l'agent cherche et choisit à l'image, puis brolls.py banque --prendre <adresse de la page>
python3 scripts/brolls.py banque "typing laptop" -n 3            # mots en ANGLAIS, deux ou trois, concrets
python3 scripts/brolls.py banque "film camera" -n 2 --chaque     # au moins un plan de chaque site
python3 scripts/brolls.py banque --prendre "https://pixabay.com/videos/keyboard-hands-writing-computer-1046/"

Playwright. Le script ouvre la page de recherche de Pexels, puis de Pixabay, dans le navigateur WebKit de Playwright, sans fenêtre, muet, profil jetable fermé à la sortie. Un simple programme reçoit un refus des deux sites, et le Chromium de Playwright reste bloqué sur leur page de vérification : WebKit passe (mesuré le 11/11/2026). S'il manque : npm install -g playwright puis npx playwright install webkit ; sans ça, la commande le dit et renvoie vers l'autre option.

Computer use. L'agent ouvre pexels.com ou pixabay.com dans son navigateur, cherche avec les mêmes mots en anglais, regarde les vignettes et ouvre la meilleure. Il laisse de côté les rangées « Sponsored » ou iStock : elles sont payantes. Il donne ensuite à --prendre l'adresse de la page de la vidéo (elle finit par un numéro) : une page Pexels se télécharge directement, une page Pixabay est lue par Playwright. Sans Playwright sur la machine, sur Pixabay : cliquer « Free download », puis --prendre <fichier téléchargé> --page <adresse de la page>. --prendre accepte aussi le lien du fichier lui-même (videos.pexels.com, cdn.pixabay.com). Tout autre site est refusé : sa licence n'est pas connue.

Dans les deux cas, Pexels passe d'abord et Pixabay ensuite. Les plans vont dans le cache avec leur fiche (page d'origine, auteur, licence, date, trouve_par : playwright ou agent) et sont décrits comme ceux de la bibliothèque. Les deux licences, relues le 11/11/2026, permettent l'usage commercial sans mention et la modification ; elles interdisent de montrer une personne reconnaissable sous un mauvais jour, de laisser croire qu'elle recommande le produit, et les marques visibles pour vendre. Un plan de banque avec un visage en gros plan ne se pose donc pas sur une phrase négative (« ceux qui échouent », « l'arnaque »). Chaque plan pris se regarde à l'image (la planche .jpg à côté du fichier) avant d'être posé : on ne monte pas un plan qu'on n'a pas vu.

Ce qui fait un bon choix :

  • Le plan montre l'idée, pas le mot. « Ça m'a pris une minute » : une horloge, pas le chiffre 1.
  • Pas partout. Un B-roll toutes les deux ou trois phrases, sur ce qui se voit. Une vidéo couverte à plus de 60 % ne montre plus qui parle : le script refuse.
  • Jamais sur l'accroche. Les deux premières secondes restent sur la personne.
  • De 1,2 à 8 secondes, calé sur la phrase : on entre sur le premier mot de l'idée, on sort à la fin de la phrase. Deux plans qui se suivent se collent (même instant) ; entre deux plans, soit rien, soit au moins une seconde de visage, sinon c'est un flash.
  • Sur une coupe. Un plan posé à cheval sur une coupe du dérushage cache le saut d'image : c'est le meilleur endroit quand on a le choix.
  • Net, stable, bien cadré. Dans les rushs d'une personne, écarter le plan flou, celui qui tremble, celui où quelqu'un regarde l'objectif par erreur. depart choisit le meilleur moment du fichier.

4. Écrire le plan (brolls.json, dans le dossier de travail) :

{"incrustations": [
  {"debut": 6.85, "fin": 8.55, "fichier": "/chemin/plan.mp4", "depart": 1.0,
   "origine": "bibliotheque", "phrase": "mes rushs, ils sont bruts", "raison": "des caméras de tournage"}
 ],
 "illustrations": [
  {"debut": 14.4, "fin": 18.0, "modele": "phrase", "titre": "Le résultat en *45 minutes*"}
 ]}

Les temps sont ceux de la vidéo DÉRUSHÉE. origine vaut bibliotheque, pexels ou pixabay.

5. Incruster, en une seule passe avec le dérushage.

python3 scripts/brolls.py incruster --edl edit/edl-<nom>.json --plan brolls.json -o <sortie>.mp4

--edl est la liste de coupes écrite par derush.py monter : coupes, B-rolls et illustrations sont rendus ensemble, la vidéo n'est encodée qu'une fois. Sans --edl, le plan porte "video": "<fichier>" et la vidéo déjà montée est reprise telle quelle. Le plan est recadré plein écran, muet ; la voix continue dessous. Le script refuse un plan qui enfreint les règles ci-dessus et dit laquelle.

6. Contrôler, puis regarder.

python3 scripts/brolls.py controler <sortie>.mp4 --plan brolls.json --edl edit/edl-<nom>.json

Il prouve que chaque plan est à l'écran au milieu de sa plage et absent juste avant, que le son est là, et il écrit une planche (trois images par plan, trois par illustration). Regarder la planche : le contrôle dit que le plan est posé, pas qu'il est bon. Puis derush.py verifier sur la sortie : le texte ne doit pas avoir bougé.

Les animations de graphistes (la façon par défaut)

Trente-huit animations dessinées par des graphistes de LottieFiles (Lottie Simple License, relue le 11/11/2026 : usage commercial et modification permis, mention non obligatoire, interdit d'en faire une collection concurrente), recolorées seules à la charte de la personne, ses textes dans ses polices. On les prend d'abord ; les modèles maison ci-dessous servent quand aucun geste de graphiste ne convient. La fiche de chacune (auteur, lien d'origine) est dans assets/illustrations/graphistes.json ; le fichier de l'animation n'est pas dans le skill, il se prend chez LottieFiles à la première utilisation et reste au cache de la machine (~/.cache/montage-video/graphistes).

python3 scripts/illustrations.py graphistes                 # toutes, par geste
python3 scripts/illustrations.py graphistes --geste liste   # celles d'un geste

Dans le plan, une animation de graphiste est le modèle graphiste et son nom :

GesteNomsQuandChamps
quibandeau-1, -2présenter qui parletitre (le nom), sous_titre (le métier, \n pour une deuxième ligne)
listecoche-1, -2, -10, -11une énumération : une coche se pose sur chaque pointtitre, points (|, cinq au plus), instants (secondes depuis le début de l'animation, une par point : caler chaque coche sur le mot dit), cote
lieurepere-1, -3, -8une adresse, un lieutitre, sous_titre, cote
chiffregraphique-1, -4, -8, -9un nombre dit : il grimpe jusqu'à sa valeurtitre (« 12 400 € »), sous_titre, cote
partiepartie-1, -2, -6une nouvelle partie, plein écrantitre, sous_titre (« Partie 2 »)
citationbulle-6 à -8la phrase d'un client ou d'un auteurtitre (la phrase), sous_titre (qui), cote
actionappel-1, -3, -4, -6 à -8inviter à cliquer, réserver, s'abonnertitre (le bouton, court), sous_titre, cote
iconeicone-1 à -14 (sauf 5)un point clé, une alerte, un rendez-voustitre, sous_titre, cote
{"debut": 9.4, "fin": 15.0, "modele": "graphiste", "animation": "coche-1", "titre": "Soins *ayurvédiques*",
 "points": "Femmes enceintes|Post-partum|Bébé", "instants": [2.82, 3.76, 4.78]}

Les animations du geste partie couvrent tout l'écran : elles seules, avec chapitre, ecriture et message, peuvent se poser sur un B-roll. Toutes les règles d'une bonne illustration (plus bas) valent ici.

Les bruitages

Posés seuls par brolls.py incruster, sous la voix : un souffle quand une animation entre, un clic sur chaque coche d'une liste de graphiste, un swoosh au début de chaque plan d'illustration. Trois sons de Mixkit (licence relue le 11/11/2026 : usage commercial permis, sans mention ni compte), pris à la première utilisation et gardés au cache (~/.cache/montage-video/bruitages), tous ramenés au même niveau, de 11 à 13 dB sous une voix normale : on les entend, ils ne couvrent rien. Dans le projet Final Cut, ils ont leur piste. Le plan les règle : "bruitages": false pour n'en mettre aucun (une vidéo grave, un témoignage intime), "bruitages": {"entree": "2364"} pour changer un son par un autre numéro Mixkit (scripts/bruitages.py sons montre ceux en service).

Les illustrations maison

Vingt-quatre modèles à fond transparent, posés sur la personne qui parle, à sa charte (scripts/illustrations.py, composition HyperFrames dans assets/illustrations/). Les six de base :

ModèleQuandChamps
titreprésenter qui parle, nommer le sujet qui commencetitre, sous_titre, cote
phrasela phrase à retenir, au moment où elle est ditetitre (un mot entre *étoiles* prend l'accent)
listeune énumération, les points arrivent un par untitre, points (séparés par |, cinq au plus), cote
chiffrele nombre qu'on vient d'entendretitre (le nombre), sous_titre (sa légende), cote
etapesun parcours, une méthode, un avant et un aprèstitre, points (quatre au plus)
chapitrele passage à une nouvelle partie, plein écrantitre, sous_titre (« PARTIE 2 »)

Sept gestes relevés dans les vidéos face caméra des créateurs :

ModèleQuandChamps
ecriturela phrase clé, sur fond noir, écrite mot à mot au rythme de la voixtitre (les mots entre *étoiles* sont surlignés) ; les instants viennent seuls des mots horodatés (brolls.py phrases)
intertitrele titre d'une partie, en bas, sans cacher la personnetitre (*étoiles* pour surligner)
ficheune petite carte claire en coin, ses lignes arrivent une à unetitre, points (video:Les rushs met un petit dessin devant), sous_titre (la définition, s'il n'y a pas de points), cote
partagel'image se pousse, un panneau prend la moitié de l'écran (40 s au plus)contenu : dossier, coches, grille, mosaique ou icones ; titre, points, choisis (grille), images (mosaïque), cote
messageun message reçu, surligné passage après passage, plein écranpoints (les paragraphes, *étoiles* pour les passages), sous_titre (d'où il vient)
imageun document ou une photo en carte dans un coinimage (le fichier), sous_titre, cote
cadreun filet fin autour de l'image, pour marquer un passageaucun

Onze classiques des vidéos parlées :

ModèleQuandChamps
compteurun chiffre qu'on veut faire sentir : il grimpe jusqu'à sa valeurtitre (« 12 400 € »), sous_titre, cote
barresun écart, une évolutiontitre, points (Janvier=1 200|*Mars=9 800, l'étoile marque la barre qui compte ; cinq au plus)
anneauune parttitre (« 70 % »), sous_titre, cote
comparaisonavant et après, sans et avectitre, points (deux colonnes : Avant : ligne ; ligne|Après : ligne ; ligne)
citationla phrase d'un client ou d'un auteurtitre (la phrase), sous_titre (qui), note (étoiles, 0 à 5)
notificationune vente, un message, un rendez-vous qui arrivepoints (euro:Paiement reçu : 490 €, trois au plus)
discussionun échange de messagespoints (lui: ...|moi: ..., cinq au plus), cote
annotationentourer un détail de l'image et le nommertitre (le mot), position (« 62,40 » : pour cent de la largeur, de la hauteur), taille
abonnementrappeler de s'abonnertitre (la chaîne), sous_titre, points (les deux libellés du bouton, « S'abonner|Abonné » par défaut)
progressiondire où on en est, à chaque changement de partiepoints (les parties, huit au plus), choisis (le rang de la partie en cours)
motun seul mot, très grand, sur le mot forttitre

Les dessins disponibles devant un point : coche, croix, video, texte, image, dossier, personne, horloge, message, lettre, musique, idee, etoile, coeur, euro, reglage, fleche, cloche, telephone, panier. D'où vient chaque geste : references/animations-relevees.md (à lire avant d'en retoucher un ; on reproduit un geste, jamais un fichier). Un texte, un chiffre ou un nom qui n'est pas dans la vidéo ne s'invente pas : une citation, une notification ou un compteur reprennent ce que la personne a dit ou fourni.

Elles se déclarent dans le même plan que les B-rolls (clé illustrations) et se rendent toutes seules à l'incrustation, à la taille de la vidéo. Compter 15 à 20 secondes de calcul par illustration.

Ce qui fait une bonne illustration : elle reprend les mots de la personne, raccourcis, jamais une phrase qu'elle n'a pas dite ; elle reste de 2 à 12 secondes, le temps de la lire deux fois ; elle arrive quand l'idée est dite, pas avant ; elle ne se pose pas sur un B-roll (le script refuse, sauf pour les trois modèles plein écran : chapitre, ecriture, message). Une par idée forte : trois illustrations dans une vidéo d'une minute, c'est déjà beaucoup. Sur une liste, caler debut sur l'annonce (« il y a trois choses ») et fin après le dernier point.

La charte se règle une fois par personne, pas par vidéo :

python3 scripts/illustrations.py style                       # la charte en cours
python3 scripts/illustrations.py style --accent "#19C37D" --police-titre "Unbounded"
python3 scripts/illustrations.py style --fichier reglage.json   # le bloc recopié du catalogue
python3 scripts/illustrations.py catalogue -o <dossier>/catalogue.html

Ouvrir le catalogue quand la personne le demande (« montre-moi le catalogue des animations ») : le fabriquer hors de tout montage, puis l'ouvrir dans son navigateur.

python3 scripts/illustrations.py catalogue -o ~/.config/montage-video/catalogue/catalogue.html
open ~/.config/montage-video/catalogue/catalogue.html

Puis lui dire en deux phrases quoi faire : changer les couleurs, les polices et l'arrondi en haut de la page, et quand le résultat lui plaît, cliquer « Copier le réglage » en bas de page et le coller ici. On le pose alors avec style --fichier (le bloc collé, écrit dans un fichier) : il vaut pour toutes ses vidéos.

Le catalogue est une page à ouvrir dans un navigateur : les animations de graphistes par geste, puis les modèles maison, joués en boucle, les couleurs, les polices et l'arrondi à changer en direct, et le réglage à recopier. C'est ce qu'on montre à la personne qui demande « à quoi ça ressemble » ou « je veux mes couleurs ». Les polices proposées sont celles embarquées dans assets/illustrations/fonts (le rendu ne dépend pas du réseau) ; pour une police de marque, déposer son .woff2 dans ce dossier, la déclarer dans index.html et l'ajouter à la liste de illustrations.py.

Le catalogue ne montre qu'une animation par rendu : deux animations qu'on ne distingue pas une fois à la charte (même forme, même mouvement) n'y restent pas ensemble. Une animation qu'on y ajoute passe ce tri. Les modèles maison chiffre et partage en mosaique restent posables, le catalogue les montre par compteur et par la grille de partage.

Le catalogue s'ouvre section par section : chaque geste et chaque groupe maison a sa flèche, toutes les sections sont repliées au chargement, et une section repliée ne charge ni ne joue aucune animation (la page de l'animation est déchargée à la fermeture). Une section qu'on ajoute au catalogue suit la même règle.

Le lecteur de corrections

Une première version n'est jamais la bonne. Plutôt que d'écrire « à 1 minute 12, enlève le plan », la personne regarde le montage dans son navigateur, met en pause là où quelque chose ne va pas, et écrit. scripts/lecteur.py porte les gestes ; l'idée vient de Frame.io (references/lecteur-facon-frame-io.md, à lire avant de le modifier).

1. Ouvrir la version.

python3 scripts/lecteur.py ouvrir <montage>.mp4 --projet <dossier de travail>/corrections \
    --titre "<nom de la vidéo>" --edl edit/edl-<nom>.json

Le script ajoute la vidéo comme version suivante du projet (V1, V2...), lance le lecteur sur la machine et affiche son adresse : on l'ouvre dans son navigateur (open <adresse>) et on la lui donne, avec en deux phrases ce qu'elle peut faire (mettre en pause et écrire, puis dire « j'ai fini mes commentaires sur mon montage » quand elle a tout noté). Il tourne tant qu'on ne l'arrête pas, donc on le lance en tâche de fond et on garde son numéro de programme. --edl (la liste de coupes, celle de l'incrustation si la version a des plans et des animations) sert à retrouver l'instant d'un commentaire dans le rush, à repérer sous la barre chaque animation et chaque plan, et à fabriquer le projet Final Cut. Pour relancer le lecteur sans changer l'adresse déjà donnée : --meme-adresse.

Ce que la personne peut faire : commenter l'image à l'arrêt, ou une plage (touches I et O), dessiner sur l'image, répondre, marquer terminé, comparer deux versions côte à côte, valider la version. Chaque commentaire pose un point au-dessus de la barre de lecture (vert une fois terminé) : un clic y mène, les touches virgule et point passent de l'un à l'autre. Sous la barre, les animations et les plans du montage sont repérés ; un commentaire écrit pendant une animation s'y rattache (case décochable), et corrections le dit (« porte sur l'animation ... »). Les raccourcis sont écrits sous le lecteur.

Ouvrir dans Final Cut Pro. Le bouton du lecteur (visible si Final Cut est installé et si la version a sa liste de coupes) fabrique le projet de la version affichée et l'ouvre : rushs d'origine coupés aux mêmes endroits sur la piste principale, plans d'illustration et animations chacun sur sa piste, tous déplaçables, et les corrections à faire en repères à cocher. Aucun sous-titre. Rien n'est aplati, les médias ne sont pas copiés. Chaque temps tombe sur une image entière de la séquence, l'offset d'un élément accroché se compte dans le temps de sa coupe (son start compris) : sinon Final Cut avertit « pas une limite des modifications du cadre » (rush à 25 images par seconde dans une séquence à 24). Le projet entre dans la bibliothèque ouverte ; si Final Cut n'en a aucune (lu dans ses fichiers ouverts, sans lui envoyer de commande), il range le projet dans une bibliothèque « Montages » du dossier Vidéos, qu'il crée. À la main : python3 scripts/final_cut.py exporter edit/edl-<nom>.json -o <projet>.fcpxml --ouvrir. Ce que Final Cut ne reçoit pas : l'étalonnage et le niveau sonore du rendu, et l'image poussée sous un écran partagé (un repère dit où la pousser).

2. Lire les corrections, quand elle dit qu'elle a fini.

python3 scripts/lecteur.py corrections <dossier>/corrections

Chaque ligne donne l'identifiant, l'instant dans le montage, le texte, et l'instant dans le rush. « Avec dessin » : tirer l'image de cet instant et la regarder avant d'agir, le dessin est dans corrections.json (points de 0 à 1, largeur puis hauteur). Une correction qu'on ne comprend pas se demande, on ne la devine pas.

3. Corriger, rendre la version suivante, la rouvrir (étape 1 avec le nouveau fichier), puis dire ce qui a été fait, correction par correction :

python3 scripts/lecteur.py traiter <dossier>/corrections <id> --note "Le bandeau sort à 24,6 s."

La personne retrouve la note sous son commentaire et vérifie avec la comparaison. Un retour qui vaudra pour les prochaines vidéos (« jamais de B-roll sur ma première phrase ») devient une règle datée en bas de ce fichier : c'est la mémoire des corrections.

4. Arrêter le lecteur par son numéro de programme quand la version est validée. Il n'écoute que sur la machine, derrière une adresse tirée au hasard à chaque lancement ; rien ne part en ligne. Pour un essai sans le son : ajouter ?muet=1 à l'adresse.

L'adresse est un secret : qui l'a peut écrire dans le projet et ouvrir Final Cut. Elle ne s'écrit donc dans aucun dossier sauvegardé, synchronisé ou partagé : ne jamais rediriger la sortie du lecteur vers un fichier du dossier de travail (la mettre dans ~/.config/montage-video/adresses/, où --meme-adresse garde déjà son jeton, hors du projet). Une adresse partie par erreur se change en supprimant le fichier du jeton et en relançant le lecteur.

Régler selon le type de vidéo

Le type se déduit de la durée, du cadre et du contenu ; on ne le demande que s'il est ambigu.

TypeSignesDérushage
Vidéo YouTube longue16:9, 5 à 30 min, une personne face caméraRéglages par défaut
Short, reel9:16 ou moins de 90 sPlus serré : --pause-max 0.3 --marge-apres 0.06
FormationLong, écran partagé ou face caméra, ton poséPlus souple : --pause-max 0.7, on garde les respirations
InterviewDeux voixNe pas couper les silences entre question et réponse sous 0,6 s ; passer par montage-interview si c'est une interview MTS

Un tournage en plusieurs fichiers : analyser chaque fichier, lire tous les textes avant de décider (une reprise peut être dans le fichier suivant), monter fichier par fichier puis coller.

Ce qu'on rend à la personne

L'export final sur son Bureau, et en mots simples : où sont l'export final et le dossier de travail (« Fichiers de montage ... (à supprimer à la fin) », à mettre à la Corbeille quand tout lui va), la durée avant et après, le nombre d'hésitations et de reprises retirées, les B-rolls posés (d'où ils viennent : sa bibliothèque ou une banque), les illustrations, ce qui a été laissé exprès, ce qui reste à faire à la main. Avant de livrer, la vidéo finale se regarde de bout en bout (images tirées à intervalle régulier, et helpers/timeline_view.py de video-use autour des coupes), pas seulement sa transcription. Quand la personne veut corriger, on lui ouvre le lecteur de corrections plutôt que de lui demander des minutages.

La barre de qualité (elle vaut pour toutes les briques)

Cinq critères : simple, élégant, personnel, cohérent, utile. Pas de montage « sapin de Noël » : une animation qui n'apporte rien à ce qui est dit ne se pose pas. Et léger : un montage qui prend deux heures de calcul ne sert pas, on mesure le temps de chaque brique avant de l'ajouter.

Fait à connaître sur les hésitations

CrisperWhisper 2.0 : son code est sous licence MIT, mais ses poids et ce qu'ils produisent sont sous licence non commerciale de nyra health (relu le 11/11/2026 sur la fiche du modèle) ; un usage commercial demande une licence de l'éditeur. C'est la version rapide (turbo) qui est utilisée. Les « E » dits comme un nom (« sur le E ») sont parfois écrits [UH] à la relecture du rendu : à regarder avant de compter un reste.

Règles datées (une ligne par retour de la personne, la plus récente en bas)

  • Rien encore. Chaque retour qui vaudra pour les prochaines vidéos s'écrit ici, daté.

Related Skills