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 :
- Le skill lui-même : ce dossier
montage-videoposé dans~/.claude/skills/. - ffmpeg et ffprobe :
brew install ffmpeg(Homebrew : https://brew.sh). - uv, qui pose les environnements Python à part :
brew install uv. - 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. - Le skill video-use (moteur de coupe et de rendu), à cette version précise, celle avec laquelle
ce skill a été essayé :
Ailleurs que dansgit clone https://github.com/browser-use/video-use ~/.claude/skills/video-use git -C ~/.claude/skills/video-use checkout 87f00c6~/.claude/skills/video-use: donner son dossier parVIDEO_USE_DIR. Ce skill n'utilise que sonhelpers/render.py, qui n'a besoin que de ffmpeg : pas de clé ElevenLabs. - 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). - 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). - Final Cut Pro, seulement pour le bouton « Ouvrir dans Final Cut Pro » du lecteur.
- Playwright et son navigateur WebKit, qui cherchent les B-rolls gratuits sur Pexels et Pixabay,
sans clé ni compte :
npm install -g playwrightpuisnpx 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 dites | En 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ôle | En service, essayé sur une bibliothèque d'essai de 12 plans |
| 3. B-rolls gratuits Pexels et Pixabay, sans clé ni compte | En 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 catalogue | En 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 plan | En 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 ligne | Pas dans ce skill |
| 8. Mémoire des corrections | Manuel : 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
amorçé 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 :
| Option | Quand la prendre | Commande |
|---|---|---|
| Playwright (par défaut) | Toujours en premier : rapide, sans écran, le même résultat chez Claude comme chez ChatGPT | brolls.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.