Que fait Compétence de Montage Vidéo ?
Un enregistrement brut de type "talking-head" contient généralement 20 à 40 % de vide : pauses, « euh », faux départs, phrases répétées. Couper cela à la main prend plus de temps que l'enregistrement lui-même. Cette compétence réalise la première édition : elle lit la transcription, planifie chaque coupe avec une raison, affiche le plan, effectue le rendu avec des punch-ins sur les jump cuts et un son propre, génère des sous-titres et des chapitres, et publie après un accord. Tout ce dont elle a besoin se trouve dans ce dossier.
Quatre engagements :
- Les paroles de l'utilisateur sont conservées. Seules les pauses, les tics de langage, les bégaiements, les reprises et les plages approuvées par l'utilisateur sont supprimés. Le sens n'est jamais modifié.
- Planifier avant de rendre. La liste des coupes est affichée et approuvée en premier.
- Rien n'est publié sans un accord.
- Seul le contenu que l'utilisateur peut utiliser. Son propre enregistrement, ou avec permission.
Sur Windows, utilisez py au lieu de python3 dans chaque commande.
Étape 0 : Configuration et source
Exécutez python3 scripts/check_setup.py : il vérifie ffmpeg, Pillow, les routes de transcription et OpenCV, avec la commande d'installation pour le système de l'utilisateur. Requis : ffmpeg et Pillow.
Demandez, en un seul message, uniquement ce que vous ne pouvez pas voir :
- Quel fichier, et est-il le sien ?
- Où va-t-il : YouTube (16:9), social (vertical), ou les deux.
- Quelle intensité : youtube (par défaut : pauses supérieures à 0,5 s coupées, rythme naturel conservé), tight (0,3 s, pour YouTube rapide et social) ou podcast (douce, sans punch-ins).
- Mots qu'il utilise par habitude et qui peuvent être coupés en toute sécurité (« genre », « donc », « tu vois », « en fait »). Ceux-ci ont un sens dans d'autres phrases, donc ils sont optionnels.
- Tout ce qui doit rester tel quel (une démo, une blague avec une pause, une lecture sponsorisée).
Étape 1 : Transcrire
python3 scripts/transcribe.py VIDEO --out work/ --terms "Nom du produit, Jargon, Nom de l'invité"
--terms liste les noms et le jargon pour qu'ils soient correctement orthographiés ; corrigez ce qui est encore mal compris avec "replace" dans edit.json avant le rendu, car les sous-titres incrustés dans une vidéo publiée ne peuvent pas être corrigés.
Les trois mêmes routes que d'habitude, avec les compromis expliqués une fois :
| Route | Comment | Coût et vitesse |
|---|---|---|
| Transcription existante | --from sous-titres.srt | Gratuit, instantané ; les horodatages des mots sont estimés et la plupart des « euh » manquent, donc la coupe des remplissages est plus faible |
| Groq ou OpenAI | GROQ_API_KEY ou OPENAI_API_KEY | Groq environ 0,04 $ par heure d'audio, une minute ou deux par heure |
| Local | pip install faster-whisper | Gratuit et privé ; environ la moitié à une fois la durée de la vidéo avec --model small |
Le transcripteur est invité à noter les tics de langage ; Whisper les omet autrement. Les sons qu'il manque encore (un « mm » que personne n'a noté, une respiration) sont détectés dans l'audio lui-même par l'éditeur.
Étape 2 : Planifier l'édition
Lisez work/transcript.txt une fois, en entier. Ensuite, écrivez edit.json (format en haut de scripts/edit_video.py) :
- Style :
"style": "youtube","tight"ou"podcast"(seuils dansreferences/editing-rules.md). Les pauses au-dessus de la limite sont réduites à un rythme naturel : plus courtes au milieu d'une phrase, plus longues après une phrase, les plus longues lors d'un changement de sujet. - Tics de langage : la liste par défaut (« euh », « hum », « er », « hmm », « mm ») est sûre. Ajoutez les mots d'habitude de l'utilisateur à
extra_fillersseulement s'il l'a demandé. - Digressions et sections mortes : une digression, un « vous m'entendez ? », une longue introduction avant le sujet. Ajoutez-les à
cutavec une raison, et informez l'utilisateur. - Protégez tout ce qui doit rester avec
keep, y compris les silences. - Interviews avec des cartes de questions ou un intervieweur visible : conservez les questions (environ 3 secondes de chaque carte dans
keep) sauf indication contraire de l'utilisateur ; sans elles, chaque réponse commence par « Donc... » et sans contexte. - Noms mal entendus :
"replace": {"Cyrus Rex": "OSIRIS-REx"}. - Chapitres (pour YouTube) : 3 à 10 chapitres basés sur les changements de sujet, le premier à 0:00, chacun d'au moins 10 secondes, nommés pour ce que le spectateur obtient (« Pourquoi la caméra a échoué », pas « Partie 2 »). Les horaires sont dans la vidéo originale ; le script les déplace.
Ensuite, créez le plan :
python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/ --plan
edited/edit-plan.md donne la nouvelle durée, combien vient de l'intérieur de la parole par rapport aux longs intervalles et aux cartes, le rythme en mots par minute, et chaque suppression de plus d'une seconde avec sa raison et ses mots. Lisez chaque ligne de reprise et de bégaiement, ainsi que la liste des « reprises possibles » : deux phrases complètes qui commencent de la même manière ne sont jamais coupées automatiquement ; décidez pour chacune et ajoutez-la à cut s'il s'agit d'une vraie reprise. Montrez à l'utilisateur le résumé, les reprises, les digressions que vous avez choisies et les chapitres, et obtenez un accord.
Étape 3 : Rendu
python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/
Ce qu'il fait :
- Coupe les pauses au-dessus de la limite à un rythme naturel, ainsi que les tics de langage, les bégaiements, les reprises et chaque plage
cut. Les suppressions plus courtes que le minimum du style (0,4 s en youtube) sont laissées telles quelles : un jump cut coûte plus qu'il ne rapporte. - Place chaque coupe en écoutant : les bords des mots se déplacent là où le son s'arrête et commence réellement, afin que les fins de mots ne soient pas coupées, et les sons manqués par la transcription (un « mm » non écrit) sont détectés.
- Regarde aussi l'image : les cartes de titre et les changements de plan sont coupés proprement, ne laissant jamais quelques images d'une carte.
- Effectue le rendu par groupes de morceaux en un seul passage chacun, afin que le son et l'image restent synchronisés quel que soit le nombre de coupes.
- Punch-ins : bascule entre le cadre complet et un punch-in à 1,1x là où un jump cut doit être masqué : toujours à une coupe ayant supprimé une seconde ou plus, sinon seulement après 4 secondes sur le même cadrage, jamais à une coupe sur un nouveau plan de caméra.
"punch_in": 0le désactive. - Audio : gain à un niveau de travail, filtre de grondement, réduction de bruit basée sur le bruit ambiant mesuré (ignorée si la pièce est déjà silencieuse), compression douce, limiteur de crête, et un passage de loudness à deux passes à -14 LUFS.
- Sous-titres : écrit toujours
captions.srt(2 lignes de 42 caractères maximum, 1 à 7 secondes chacune, pas de saut de ligne après un petit mot ou à l'intérieur d'un nom) pour téléchargement sur YouTube."captions": {"burn": true}les incruste dans la vidéo pour les réseaux sociaux, où beaucoup regardent sans son ; les versions verticales les incrustent par défaut. N'incrustez pas de sous-titres dans une vidéo YouTube qui reçoit également le SRT : les spectateurs avec sous-titres activés verraient les deux. - Vertical :
"format": "vertical"crée une version 1080x1920 recadrée surfocus_x.
Il écrit edited/edited.mp4, captions.srt, chapters.txt, edit-report.md et manifest.json.
Vérifiez avant de montrer à l'utilisateur : ouvrez cuts.jpg (images juste avant et après les plus grosses coupes : cherchez des flashs de carte, un saut dans un plan différent, une expression figée) et lisez les avertissements dans manifest.json (synchronisation, rythme supérieur à 190 mots par minute, loudness). Corrigez et refaites le rendu lorsqu'une reprise a gardé la mauvaise prise, que le rythme semble essoufflé (un style plus doux), ou qu'une coupe tombe mal (keep à cet endroit).
Étape 4 : Publier avec WoopSocial
Comment se connecter, télécharger et publier : references/woopsocial.md. Version courte :
social_accounts_list; non connecté : le seul chemin de connexion pour cet agent (forfait gratuit : 2 comptes sociaux), puisoauth_create_authorizationpar plateforme.- Téléchargez
edited.mp4avec une session de téléchargement (media_uploads_create_sessionavec la taille en octets demanifest.json,python3 scripts/upload_parts.py session.json edited/edited.mp4,media_uploads_complete_session). - YouTube :
title(mots-clés principaux en premier, moins de 70 caractères),privacy, et une description qui commence par une ligne sur ce que le spectateur obtient, puis les chapitres dechapters.txt. Téléchargezcaptions.srtdans YouTube Studio ensuite (WoopSocial n'envoie pas de fichiers de sous-titres). - Montrez la publication (fichier, titre, description, compte, heure avec fuseau horaire) et obtenez un accord clair. Ensuite
posts_createetposts_get.
Étape 5 : Lire les résultats
Après une semaine, social_account_posts_list : vues, mentions J'aime, commentaires lorsqu'ils sont rapportés, avec la date de collecte ; « non rapporté » signifie absent. La rétention et la durée moyenne de visionnage se trouvent dans YouTube Studio ; demandez-les à l'utilisateur. Si les spectateurs chutent tôt, la prochaine édition aura une ouverture plus serrée ; s'ils chutent à un chapitre, cette section était trop longue.
Niveau de qualité
Un monteur professionnel livrerait-il ce travail ? Rejetez-le si un mot est coupé, si une coupe tombe en pleine respiration avec un pop, si un punch-in change toutes les quelques secondes, si le rythme ne laisse pas le temps de réfléchir, ou si le sens a changé.
Cas particuliers
- Deux personnes à l'écran : gardez
formatà la source ; les punch-ins fonctionnent toujours sur un plan large. - Enregistrement d'écran avec une voix : définissez
"punch_in": 0. - Musique sous la voix : la détection de silence voit la musique comme du son ; définissez
"voiced_gaps": false. - Enregistrements très longs (plus d'une heure) : fonctionne, mais le temps de rendu est environ la durée de la vidéo ; planifiez d'abord, effectuez le rendu une fois.
- Pas de parole pendant un moment intentionnellement (une démo) :
keep-le.
Références
references/editing-rules.md: seuils, tics de langage, motifs de reprises, punch-ins, chaîne audio, sous-titres et chapitres, avec sources.references/woopsocial.md: connexion, téléchargement, publication et lecture des résultats.