/bb:edit
Objectif
Transformer des rushes en une vidéo courte qu'un inconnu s'arrête pour regarder, ressent quelque chose et agit : un master 1080x1920 et un master Feed 1080x1350, tous deux à environ -14 LUFS, avec un plan de montage expliquant pourquoi chaque coupe se trouve à cet endroit.
Avant tout : vérifier ce Mac
python3 "${CLAUDE_SKILL_DIR}/scripts/setup.py" --data "${CLAUDE_PLUGIN_DATA}"
Il affiche une ligne de statut par outil, avec la correction exacte, puis READY ou NOT READY. Il est sûr de relancer, et ne prend que quelques secondes une fois que tout est en place. La première exécution construit les outils Python, ce qui prend quelques minutes.
En cas de NOT READY, donnez à la personne les lignes de correction et arrêtez. Si seuls les modèles manquent, dites-lui qu'il s'agit d'environ 490 Mo, et sur son accord ajoutez --download-models à la même commande. Les lignes OPTIONAL ne bloquent rien.
Ensuite : demander ce que nous essayons de faire
La personne qui exécute ceci détient le contexte, et ce qu'elle dit ici est ce qui rend le travail bon. Une de nos publicités a échoué parce que rien n'a été demandé ; un reel a fonctionné parce que quelqu'un a donné un vrai contexte.
Regardez d'abord ce qui est là (rushes, script, brief, notes) et reformulez-le, afin qu'ils confirment plutôt que de retaper. Demandez en un seul tour court (AskUserQuestion quand vous l'avez, sinon dans le message).
Demandez d'abord, toujours, à moins qu'ils ne vous aient déjà dit :
- Qu'essayons-nous de faire, et quel type de vidéo est-ce ? Une vidéo de notoriété, un reel de démonstration, une publicité payante vendant quelque chose, un UGC ou un fondateur qui parle, des coulisses, autre chose ?
Ensuite seulement ce qui manque :
- À qui est-ce destiné, et que devraient-ils ressentir ou faire après avoir regardé ?
- Quel style ? Quelle référence est la plus proche ? Vous montrerez ensuite des options sur les vrais rushes pour choisir.
- Rushes, son ou musique, durée, et où ça tourne.
S'il s'agit d'une publicité, l'acheteur et l'étape du script sont repris, ou /bb:script s'exécute en premier. Un montage ne remplace jamais l'idée ou une affirmation ; cela retourne au script.
Mettez les réponses dans job/brief.md, puis travaillez jusqu'à la fin. Le seul autre arrêt est les options à l'étape 2. S'ils ont tout donné, ou disent simplement allez-y, ne demandez pas. Si personne ne peut répondre (une exécution sans tête), dites ce que vous auriez demandé et prenez la lecture raisonnable.
Le goût appartient au travail
La question 1 définit le travail : écrivez-le sur la première ligne de job/brief.md. Ce que quelqu'un a aimé dans une vidéo ne s'applique pas à une autre. Un reel organique et une publicité sont des travaux différents : la publicité est censée vendre. Donc une publicité est jugée sur son public cible, les arguments de vente du produit, une preuve et une raison d'acheter, pas sur les blagues ou l'ambiance d'un contenu organique. Les leçons d'une coupe organique ne lient pas une publicité, et vice versa.
Pourquoi
Les montages génériques par IA coupent sur chaque temps fort de la musique, donnent à chaque plan la même durée, zooment sur tout et s'arrêtent dès que le dernier mot se termine. Chacun de ces points a été rejeté ici (voir lessons.md). Les livres de montage répondent mieux aux mêmes questions, donc nous les consultons par décision : Murch pour la fin d'une pensée, Pearlman pour le rythme et la question ouverte, Block pour le regard. Les livres sont des questions et des passages, jamais des voix.
À quoi ressemble un bon résultat
- L'image 0 fonctionne déjà comme une photo fixe avec le son coupé : le produit, un résultat ou une surprise, pas un logo ou une salutation.
- Une question s'ouvre dans l'accroche et reste ouverte jusqu'à la récompense.
- Les coupes tombent là où une pensée ou un mouvement se termine, pas sur une grille. Au moins un plan est tenu à côté de plans plus rapides, pour qu'il soit lu comme une pause intentionnelle.
- L'élément le plus lumineux ou en mouvement dans chaque plan est ce sur quoi il faut regarder. Le texte se place sous le menton ou dans un ciel clair, jamais sur une bouche, et jamais empilé avec une autre ligne disant les mêmes mots.
- La fin est plus calme que le plan qui la précède et la demande est claire. La fin arrive : la musique se termine sur sa propre fin ou une phrase réelle, jamais un fondu sur une chanson qui continue, et jamais sur ses propres derniers impacts.
- Le son réel est présent. Les personnes dans les images sont entendues par-dessus la musique, et le plus grand moment de la chanson tombe sur le plus grand moment de l'image.
- Les rushes sont tels que filmés : les couleurs de l'iPhone, un cadrage stable, un léger zoom avant uniquement sur le produit, pas de zooms animés, pas de remplissage miroir, pas de bandes noires.
- Le 4:5 est disposé à nouveau à partir de la même EDL, de sorte que les sous-titres et les visages restent dans le cadre.
Commandes
Les fichiers de référence écrivent ces choses en abrégé. L'état du shell ne persiste pas entre les commandes, donc utilisez toujours la forme complète, et donnez-la également à un agent critique.
PYsignifie"${CLAUDE_PLUGIN_DATA}/venv/bin/python", le Python construit par setup. Exécutez tous les scripts Python ici avec lui.scripts/...signifie${CLAUDE_SKILL_DIR}/scripts/....references/...signifie${CLAUDE_SKILL_DIR}/references/....search.pysignifiepython3 "${CLAUDE_PLUGIN_ROOT}/skills/books/scripts/search.py".
Flux de travail
Dossier du travail : <client>-<travail>/ dans le dossier où se trouve la personne, ou celui que le brief nomme (job/). Les rushes restent où ils sont ; seuls les rendus sont écrits.
- Lire, et écouter. Exécutez
PY scripts/listen.py clips <rushes> --out job/soundavant de planifier : il transcrit chaque clip et trouve la parole, les rires, les cris et les pics de niveau. Lisez tout. Les répliques hors caméra sont souvent l'idée, et elles vous disent ce qu'est vraiment un plan (le plan "application" d'une publicité était un réalisateur disant "vous n'avez rien à appliquer"). Exécutez aussiPY scripts/listen.py song <piste>et lisez les paroles : elles peuvent contredire l'image ou l'aider. Ensuite, toutes les notes du client,lessons.md, le dossier des montages passés du client (ce client uniquement, voirexamples/README.md), le script ou le brief. Exécutezscripts/probe.sh <rushes> > job/footage-log.md, puis regardez les clips et ajoutez les meilleurs moments par timecode. Convertissez le HDR avecscripts/proxies.shavant toute autre chose. Un log de rushes écrit par quelqu'un d'autre est une piste, pas un fait : regardez une image de chaque sélection avant qu'elle n'entre dans l'EDL (scripts/sheet.sh <clip> <début> <durée> job/sheets, de sorte que rien ne soit écrit à côté des rushes). Listez chaque affirmation du script ou du brief par rapport au moment du clip qui la montre ; une affirmation qu'aucun clip ne montre est maintenant modifiée ou coupée, pas par le critique. Écrivez l'ambiance en une ligne, dans les mots de la personne. - Planifier. Chargez
references/plan.md,rhythm.md,eye.md,sound.md. Mesurez la musique avecPY scripts/beats.py <piste>: tempo, premier temps fort et la carte de volume, qui montre où la piste bouge déjà pourmusic.start. Par temps (accroche, tournant, récompense, fin) : quoi ressentir, le rythme, où le regard se pose, le son. Une recherche par colonne. Écrivezjob/plan.md, chaque ligne avec un identifiant de passage. - Options. Environ trois traitements par section (décontracté, moyen, extrême) sous forme de vignettes : une image et une ligne chacune. La personne choisit. Si elle n'est pas là, ou a dit allez-y, choisissez, loggez pourquoi dans
options.md, et gardez les autres visibles ; un tableau des options suffit. - Montage brut. Chargez
references/formats.md. Écrivezjob/edl.json, puismix.py(le son) etcut.py --draftsur les proxies.scripts/sheet.shsur le résultat,listen.py cutsur le résultat, et lisez le rapport et son image de forme d'onde. Regardez la feuille, la bande d'accroche et l'image 0 vous-même, et regardez-la une fois sans le son. - Critique. Un agent frais reçoit
job/brief.md(afin qu'il juge par rapport au travail), l'image 0 en pleine taille, les images, la bande, le rapport d'écoute, le log du mix, la liste des affirmations,references/critic.mdet la commande complètesearch.py. L'image 0 en premier, car une vignette peut mal interpréter. Pas vos notes ni cette conversation. Il renvoie des notes par temps, au plus trois corrections avec des identifiants de passage, et un verdict. - Final. Corrigez ce que le critique a trouvé (ou écrivez pourquoi le brief l'emporte). Pointez l'EDL vers des fichiers SDR de pleine qualité, effectuez le rendu sans
--draft, puisreframe.pypour le 4:5, puischeck_cut.pyetlisten.py cutsur le résultat. Corrigez chaque FAIL ; lisez chaque WARN. Dites clairement que personne ne l'a entendu : le rapport mesure, il n'écoute pas, donc les lignes vocales et le mix vont aux oreilles de la personne. Feuilles des deux masters. README.txt et livraison comme dansformats.md.
Répondez avec les deux fichiers, l'image 0, une ligne par temps sur ce qui a changé après le critique, et une phrase nommant les livres une fois. Les citations restent dans plan.md, jamais sur la vidéo.
Limites strictes
- Une affirmation ou une idée modifiée retourne à
/bb:script. Si les rushes ou le son tuent l'idée, arrêtez et refaites le diagnostic et le script, avec le critique ; ne remplacez jamais une ligne pendant le montage. Une de nos publicités a remplacé sa ligne dans le montage et a été livrée sans public et sans raison d'exister. - Options avant un brouillon, à chaque fois. Si personne n'est là, choisissez et loggez ; ne sautez jamais.
- Ne ralentissez ni n'accélérez jamais une voix.
cut.pycoupe le son propre d'un plan lorsque sa vitesse n'est pas 1. - Pas de débruitage, pas de flou, pas de zooms animés, pas de remplissage miroir, pas de bandes noires. Le HDR passe d'abord en SDR avec avconvert. Pas d'étalonnage sur les talking heads et les UGC. Un léger look uniquement lorsque le brief le demande (
lookdans l'EDL), dit à voix haute dans la réponse. - Ne livrez jamais avec le son du clip désactivé et aucune raison écrite dans le plan.
- Un plan ne prouve jamais plus que ce qui s'est passé : si l'audio dit qu'il a été mimé, ce n'est pas une preuve.
- Sous-titres dans la langue parlée, chaque mot qui compte, jamais sur la bouche, jamais empilés avec un appel.
- Les affirmations, prix et offres à l'écran proviennent du brief ou du site en direct du client, jamais inventés.
- Rien ne va à un client, n'est publié ou ne dépense d'argent sans le oui de la personne. La livraison sur le Drive d'un client et tout message sont rédigés pour elle ; c'est elle qui envoie.
Savoir-faire
- Texte : Le ffmpeg de Homebrew n'a pas
drawtextnilibass, donc le texte est dessiné en PNG parscripts/text_png.swift(CoreText, compilé une fois parcut.py) et superposé avecoverlay. Les polices sont dansassets/fonts/(Geist Black, Geist Bold, Playfair Display Italic) ; la police propre d'un client va dans le blocstylesde l'EDL par chemin. - Whisper est en anglais et comprend mal les voix hors caméra.
listen.pyutilise le petit modèle anglais. Vérifiez toute ligne que vous sous-titrez en lisant les images ; pour une lecture plus claire d'une ligne douteuse,setup.py --download-largeajoute un modèle plus grand (1.6 Go), quelisten.py clips --largeutilise. - Vitesse : les rendus finaux tournent à environ 3 à 5 images par seconde pour un 1080x1920 à partir de sources 1080p pendant que d'autres encodages tournent ; une publicité de 30 secondes prend 3 à 5 minutes. Utilisez
--draftpour le montage brut. Exécutez les longs rendus en tâches de fond. - Coupes alignées sur les temps forts :
beats.pymesurebpmetoffsetà partir du fichier. Mesurez toute la piste : elle vérifie que ses deux moitiés concordent, et une courte fenêtre sur une intro peut se verrouiller sur la mauvaise pulsation. Donnez à la musique unbpmet unoffset(secondes dans le fichier du premier temps fort) ou une liste debeats. Marquez les plans dont la fin doit tomber sur un temps fort avec"snap": true; par défaut, seuls ceux-ci sont alignés.cut.py --beatsimprime la grille par rapport aux coupes actuelles. Alignez le tournant et la récompense, pas chaque coupe :check_cut.pyprévient lorsque plus de 80 % des coupes se trouvent sur un temps fort. - Timing du texte : attachez le texte à un plan (
"shot": 2, "at": 0.3, "dur": 1.2) plutôt qu'à des secondes absolues, afin qu'il suive le plan lorsqu'un alignement sur un temps fort déplace une coupe. - Volume :
loudnormen deux passes à -14 LUFS en mode linéaire, puis un limiteur à 4 fois la fréquence d'échantillonnage ;cut.pymesure le fichier et ré-encode avec un plafond plus bas si AAC l'a poussé au-dessus de -1 dBTP. La musique se situe 14 dB sous l'audio du clip par défaut lorsqu'un plan conserve son propre son ; définissezmusic.gain_dbpour le modifier. - 4:5 :
reframe.pyencadre chaque plan exactement comme le 9:16 et prend une fenêtre de 1350 lignes par plan (y45, par défaut 285). Le texte conserve sa place sur l'image et est tiré de 40 px à l'intérieur. Gardez le texte 9:16 entre les lignes 330 et 1590 et le 4:5 ne nécessite aucun travail supplémentaire. - Zones de sécurité (9:16) : rien au-dessus de la ligne 270 ni en dessous de 1590, sauf les cartes plein écran ; les 12 % du bas sont le bouton de Meta.
- Feuilles :
sheet.sh <video> [début] [durée]écrit une feuille de 40 images (les horodatages dans le .txt à côté), une bande de 10 ips de l'accroche (ou de toute fenêtre) et l'image 0. Les images flash apparaissent dans la bande, pas dans la feuille. - Fins de clip :
cut.pyprévient lorsque laoutd'un plan dépasse la dernière image de l'image et maintient cette image, de sorte que le master ne soit jamais plus court que son audio. Remontezoutsi un gel apparaîtrait. - Prise de vue à main levée et zooms avant :
xest un nombre par plan, donc un sujet à main levée qui dérive sort de la fenêtre, et un zoom avant multiplie la dérive. Regardez la fenêtre de ce plan en mouvement (sheet.sh <rendu> <début du plan> <durée>donne une bande de 10 ips) avant de faire confiance au cadrage. - Les horodatages des mots dérivent : les horodatages par mot de whisper peuvent être décalés jusqu'à 2 s. Avant qu'une ligne ne soit insérée, transcrivez la tranche seule ; un mot perdu à l'une ou l'autre extrémité signifie que la coupe est fausse.
- Synchronisation labiale : les copies depuis un téléphone peuvent avoir l'audio environ 0.1 s en avance. Vérifiez un clip avant de couper ; si la voix est en avance, décalez
insur l'image, jamais les mots. - La recherche dans les livres :
search.py "<mots littéraux>" --job feel|rhythm|eye --book murch|pearlman|block --k 6, puis--show <id>pour lire une note. Les mots littéraux fonctionnent ; les questions non.
Références (charger par décision)
references/plan.md: le plan en quatre temps, une ligne par temps par colonne, et les requêtes par colonne.references/rhythm.md: où une coupe tombe, tient, change de motif, la question ouverte.references/eye.md: ce vers quoi l'œil va, placement du texte, zones de sécurité, la bande 4:5.references/sound.md: l'étape d'écoute, la voix, la musique, les effets, le volume, la fin.references/critic.md: la grille d'évaluation, chargée uniquement par l'agent critique.references/formats.md: la structure de l'EDL, les scripts dans l'ordre, les sorties, où vont les finaux.references/drawings.md: animation dessinée à la main sur une coupe, lorsque le brief le demande.
Leçons
lessons.md contient des lignes datées provenant de réactions et de résultats réels. Lisez-le à l'étape 0 ; le critique vérifie la coupe par rapport aux cinq dernières. Ce dossier est remplacé à chaque mise à jour, donc les leçons propres à un client vont dans le dossier de ce client, et une leçon pour tout le monde passe par le dépôt (CONTRIBUTING.md).