Communitygithub.com

video-script-reverse-engineering

Utilisez cette compétence lorsque l'utilisateur fournit un fichier vidéo (mp4/mov/m4a, etc.) et demande à le rétro-ingénier en un script écrit — décomposition vidéo, analyse image par image, reconstruction de script de vente, court-métrage / contenu parlé / script narratif vidéo en texte, restitution « lire pour voir ». Produit un script Markdown horodaté avec dialogue ligne par ligne, qualité vocale (hauteur/volume/débit/respiration), trajectoires d'expressions faciales, cibles de regard nommées, détails d'action, ainsi qu'une double vérification de transcription qui corrige les erreurs d'attribution des locuteurs et des pronoms.

Qu'est-ce que video-script-reverse-engineering ?

Cette compétence vous permet de transformer n'importe quelle vidéo (courte, publicitaire, dramatique, contenu parlé) en un script textuel d'une précision extrême, adapté à la reproduction du tournage. Elle va bien au-delà d'une simple transcription ASR : elle extrait les qualités vocales (hauteur, volume, débit, souffle), les trajectoires d'expressions faciales image par image, les cibles de regard nommées, et les micro-actions. Le processus en huit étapes (P0 à P7) intègre une double vérification de transcription (P6) qui corrige les erreurs d'attribution des locuteurs, les confusions de pronoms (il/elle), et les omissions de répliques. Les résultats sont présentés dans un fichier Markdown structuré, accompagné d'une checklist de qualité. Cette compétence est idéale pour les créateurs de contenu, les scénaristes, les réalisateurs et les spécialistes du marketing qui souhaitent analyser ou reproduire des vidéos de référence.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ZHIXIAO-XJY/video-script-reverse-engineering/tree/HEAD

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Rétro-ingénierie vidéo de haute précision en script

Transformez une vidéo dynamique en un script textuel statique reproductible. Critère principal : le lecteur doit pouvoir « voir » la vidéo sans la regarder — ce qui est dit, comment c'est dit, les changements d'expression, le regard, et la raison de chaque parole.

Quand l'utiliser

  • L'utilisateur fournit un fichier vidéo et demande « décomposer le script / analyser image par image / transcrire en script / comment cette vidéo a été tournée »
  • Besoin d'extraire la structure de discours de vente d'une vidéo de référence (problème → empathie → preuve → prix → appel à l'action)
  • Besoin de fournir aux acteurs/réalisateurs une fiche de jeu (tonalité, changements d'expression, regard)
  • Besoin de déduire le storyboard et le rythme de montage d'une vidéo concurrente

Ne convient pas : simple extraction de sous-titres (utiliser ASR), édition vidéo elle-même, transcription musicale.

Règles absolues (à mémoriser en premier)

  1. Aucun nettoyage des répliques : conservez « euh / ah / mm / oh / eh / hmm », ils sont essentiels pour le réalisme et l'attribution des personnages ; ne les supprimez ni ne les modifiez.
  2. Les regards doivent être nommés : écrivez « [A] regarde [l'identité/la partie spécifique de B] + durée », interdisez les formulations vagues comme « regarde l'autre » ou « regard profond ».
  3. Les expressions doivent décrire une trajectoire : suivez [début] → [milieu] → [fin] (ex : yeux écarquillés → pupilles dilatées → sourcils détendus, lèvres pincées), jamais un seul adjectif statique.
  4. La tonalité doit décrire la qualité vocale : hauteur, volume, débit, souffle (voix soufflée/éraillée/expiration), accent tonique, durée des pauses — au moins trois des cinq éléments.
  5. Le locuteur doit passer par une chaîne de validation : la diarisation ASR est forcément erronée → re-transcription par segments (P6) → tableau de référence des sous-titres seconde par seconde (P3.5) → vérification des mouvements de lèvres. Les quatre couches de preuves doivent être vérifiées avant d'écrire [Locuteur].

Processus d'exécution (P0–P7)

P0 Sonde de fichier

ffprobe -v error -show_entries format=duration,size:stream=codec_type,codec_name,width,height,r_frame_rate \
  -of default=noprint_wrappers=1 "<video>"

Déterminez la densité d'échantillonnage (voir tableau ci-dessous) et vérifiez si une piste audio existe (si absente, sautez P1, utilisez uniquement l'image).

DuréeStratégie d'extraction d'imagesNombre maximum d'imagesDescription
≤2 min1 image/2s + segments clés 1 image/s60–80Vidéo courte / publicité, tous les détails nécessaires
2–10 min1 image/5s60–100Court métrage
10–30 min1 image/10s + segments d'accroche renforcés80–120Court métrage / long contenu parlé, les 90 premières et dernières secondes nécessitent 1 image/3s
>30 min1 image/20s + échantillonnage par segments100–150Restitution au niveau des chapitres uniquement, d'abord un plan puis approfondir

Règle de coût : limitez le nombre total d'appels ViewImage par tâche à 60, par lots de 8 images en parallèle ; en cas de nombre insuffisant, priorisez « points de changement d'expression, plans produits, plans accessoires, cartes de sous-titres ».

P1 Transcription audio complète

ffmpeg -y -v error -i "<video>" -vn -ac 1 -ar 16000 -b:a 96k audio.mp3

Utilisez AudioTranscribe (supporte mp3/wav/m4a/mp4, ≤1 Go ou 5 heures). Produit un texte horodaté avec [début, fin, ID du locuteur] — c'est le squelette de toutes les timelines suivantes.

Remarque : l'ID du locuteur retourné est un simple numéro de cluster, pas un personnage ; il doit être déterminé conjointement par le sens, la tonalité et l'image.

P2 Extraction d'images

# Essayez d'abord la détection de changement de scène (pour les vidéos avec de nombreux transitions)
ffmpeg -y -v error -i "<video>" -vf "select='gt(scene,0.15)',showinfo" -vsync vfr -q:v 3 kf_%03d.jpg 2> scene_log.txt
grep -o "pts_time:[0-9.]*" scene_log.txt | head -100
  • Si <10 images sont trouvées → il s'agit d'un tournage continu à une seule caméra (contenu parlé / scène), utilisez une extraction uniforme : -vf "fps=1/10,scale=576:-1"
  • Vous pouvez abaisser le seuil à 0.08 et réessayer ; si toujours aucune transition, abandonnez la détection de scène
  • Pour les vidéos verticales courtes, utilisez uniformément scale=576:-1, assez pour voir les expressions sans gaspiller de tokens

P3 Examen par lots des images

Par lots de 8 images en parallèle avec ViewImage, modèle de requête uniforme (pour garantir la comparabilité) :

Décrivez cette image vidéo verticale : apparence des personnages, expressions, actions, scène, vêtements, texte des sous-titres, composition

Points clés pour l'analyse des images :

  • Direction des relations entre personnages (qui tire qui, qui poursuit qui, qui est emmené, qui monte dans quelle voiture) doit être confirmée par l'image — l'ASR ne vous le dira jamais ; lorsque deux adultes du même sexe sont dans la même scène, l'ID de cluster ne peut pas être directement utilisé comme personnage
  • Le texte des sous-titres est une information de grande valeur gratuite (filigrane du titre, nom de marque, sous-titre produit, prix, avertissement, nom des personnages dans les répliques) — recopiez-le image par image ; les noms apparaissant dans les sous-titres (ex : « Gu Chuan, ne traîne pas ») combinés à l'image de « qui est tiré par qui » constituent une preuve solide de l'attribution des répliques
  • Notez les éléments constants (filigrane, sous-titre d'avertissement, logo), écrivez-les en en-tête du document
  • Rappelez-vous les secondes correspondant à chaque image (kf_001 = 0s, kf_002 = 10s...), vous en aurez besoin pour décrire les scènes

P3.5 Grille de sous-titres de la vidéo entière : établir un tableau de référence des répliques seconde par seconde (première preuve de l'attribution du locuteur)

Pour les vidéos avec sous-titres incrustés (courts métrages / vidéos de vente, presque toutes), obtenez d'abord la « réponse officielle » des répliques :

# Découpez les bandes de sous-titres à raison d'une image par seconde (extrayez d'abord une image pleine pour confirmer la position verticale des sous-titres, ex : y=710 hauteur=140)
ffmpeg -y -v error -i "<video>" -vf "fps=1,crop=576:140:0:710,drawtext=fontfile='<font>':text='%{pts\:hms}':x=8:y=6:fontsize=24:fontcolor=white:box=1:[email protected],tile=3x10" -q:v 3 sub/grid%02d.jpg
  • 30 images par grille → pour une vidéo de 14 minutes, environ 29 grilles ; lisez chaque grille via ViewImage pour obtenir « horodatage → texte du sous-titre »
  • Les sous-titres avec bordure bleue/blanche sont généralement des sous-titres de transition de narration (ex : « les deux ont été forcés de se séparer »), classez-les séparément, ne les mélangez pas aux répliques
  • Les sous-titres sur deux lignes peuvent être rognés et perdre la moitié supérieure — en cas de doute, revoyez l'image complète de cette seconde

Ce tableau de référence seconde par seconde résout en une seule fois quatre types de problèmes : répliques manquantes, répliques en trop, erreurs de texte (il/elle), attribution des mots d'intonation — en cas de conflit entre l'ASR et le sous-titre, faites d'abord confiance au texte du sous-titre, puis utilisez les images des mouvements de lèvres pour trancher l'attribution du locuteur (le sous-titre n'indique pas qui parle).

P4 Construire le squelette : diviser le flux de répliques en segments de scène

  1. En utilisant les horodatages ASR comme axe, découpez par changement de scène/espace (changement de décor, changement d'interlocuteur, changement d'ambiance émotionnelle)
  2. Format de nommage de chaque segment : ⏱️ [mm:ss - mm:ss] Nom de l'événement (annotation fonctionnelle), ex : [04:15 - 05:10] Tentative sur la table de soins · Première apparition du baume à lèvres
  3. Au début de chaque segment, écrivez > Description de la scène : (lumière, composition, position des objets principaux, placement des personnages)
  4. Les répliques à l'intérieur du segment sont disposées ligne par ligne dans l'ordre chronologique ; en cas de chevauchement entre plusieurs personnes, écrivez sur des lignes séparées et notez « (ici en même temps que X) »

P5 Remplissage des cinq dimensions (cinq étiquettes sous chaque réplique)

ÉtiquetteContenu obligatoire
🎙️ Qualité vocaleDirection de la hauteur / Volume / Débit / Souffle (voix soufflée·éraillée·expiration·soupir) / Mot accentué / Durée de la pause
😐 Trajectoire des changements d'expression[début]→[milieu]→[fin] en trois étapes, actions spécifiques des sourcils, yeux, bouche, ailes du nez, mâchoire inférieure
👀 Interaction du regardLe regard de [sujet] se dirige vers [objet nommé], durée du regard ; les mouvements du regard doivent être décrits
🙌 Détails d'actionPosture des mains, orientation du corps, trajectoire de déplacement, interaction avec les accessoires (micro-actions comme jointures blanchies/poings serrés/doigts tremblants en priorité)
🫧 Attitude et ambianceUne phrase pour qualifier l'état psychologique du personnage à cet instant (point de vue du réalisateur, pas une redite de l'expression)

Les mots d'intonation doivent être analysés comme des phrases à part entière : un « hmm » doit préciser s'il s'agit d'une expiration nasale ou d'un son guttural, d'un rire froid ou d'un signe de défaite, et l'intervalle avec la phrase suivante — cela détermine si c'est sa réplique ou non.

P6 Deuxième vérification croisée (valeur centrale de cette compétence, ne pas sauter)

Problème : la transcription unique de la vidéo entière fusionne les paroles de deux personnes adjacentes en un seul segment, écrit « il » et « elle » comme le même caractère, et transforme les questions en déclarations.

Méthode : sélectionnez 4 à 6 « segments à haut risque » et retranscrivez-les par tranches, puis comparez ligne par ligne avec le script complet.

Caractéristiques des segments à haut risque (trancher si une seule est présente) :

  • Un segment contient ≥2 dialogues de personnages (surtout les segments whisper, disputes, foules)
  • Deux adultes du même sexe apparaissent dans la même scène (timbres vocaux proches, le cluster est facilement fusionné en un seul ID)
  • Apparition de « il/elle » avec risque de confusion de référence
  • Apparition de chevauchements, interruptions, paroles simultanées
  • Apparition de mots d'intonation isolés (hum/oh/eh/ah)
  • Scènes de séparation, lutte, poursuite, gare (« qui est emmené, qui poursuit » est souvent écrit à l'envers)
  • Intervalle de temps >20 secondes sans changement d'ID de locuteur (indique une fusion)
# Coupez un segment de 70–90 secondes (évitez les limites silencieuses, 1s de marge de chaque côté)
ffmpeg -y -v error -ss 15 -t 75 -i "<video>" -vn -ac 1 -ar 16000 -b:a 96k seg1.mp3

Pour chaque segment, exécutez AudioTranscribe, puis déterminez selon le tableau :

Type de différenceMéthode de déterminationTraitement
Inversion des locuteursVérifiez si les positions de parole dans la tranche alternent (A/B/A/B) ; puis combinez avec les mouvements de lèvres et la causalité du scénarioÀ corriger selon l'alternance et la logique du scénario, ajoutez 📌 Note de correction dans le texte
Confusion il/elleLes homophones sont forcément faux, corrigez selon le vrai genre de la personne référéeCorrigez directement, ne conservez pas le caractère d'origine
Phrase manquante (absente du script complet)Les phrases apparaissant dans la tranche mais absentes du texte principalAjoutez-les, ajustez la timeline du segment en conséquence
Nécessité de diviser une phrase fusionnéeIncohérence sujet-verbe dans une même phrase (« Va-t-en, ne traîne pas, j'attends »)Divisez en 2-3 lignes selon le sens, attribuez à chaque personne
Erreur question/déclarationVérifiez si la fin de la phrase monte, s'il y a un sens interrogatifUtilisez « ! » pour les phrases accusatrices, « ? » pour les questions de suivi
Hors-champ vs voix audibleVérifiez si dans la tranche la position vocale est continue avec le reste, s'il y a un changement de piste audioContinu sur la même position = murmure audible, doit être annoté « l'autre n'a pas entendu » et non « monologue intérieur »
Inversion de direction d'actionRegardez les images : quelle main tient qui, qui monte dans quelle voiture, le sous-titre appelle qui par quel nomInversez complètement le segment, réécrivez, ajoutez 📌 Note de correction avec preuve par image

Troisième vérification par l'image : pour les conclusions concernant la direction d'action et les relations entre personnages (qui est emmené/qui poursuit/qui tire qui), la simple comparaison textuelle de la deuxième étape ne suffit pas — il faut revenir à une extraction dense (1 image/s) pour vérifier les images, et utiliser des répliques ultérieures (ex : « Il y a 15 ans, tu m'as emmené ») pour recouper. Voir cas réel dans references/pitfalls.md #9.

Quatrième vérification par le tableau de sous-titres : avant la livraison, alignez chaque réplique du script avec le tableau de sous-titres seconde par seconde de P3.5 — chaque fois que le script ne correspond pas au sous-titre, ou qu'une phrase apparaît dans le sous-titre mais pas dans le script, corrigez/ajoutez ligne par ligne ; pour les points d'attribution douteux, utilisez l'image complète pour vérifier les mouvements de lèvres (moment d'extraction = seconde d'apparition du sous-titre). Deux règles spéciales :

  • Le son d'un flashback peut déborder : après la fin du flashback, le son d'origine peut se prolonger sur le plan réel (ex : dans le plan réel, la mère a les lèvres fermées, mais le sous-titre montre un « chut » d'enfance) — l'attribution suit la piste audio, pas l'image ;
  • Le « elle » du sous-titre n'est pas forcément une femme : le sous-titre de la vidéo originale peut confondre il/elle, déterminez la vraie référence selon le sens et les références ultérieures, mais en citant le sous-titre original, conservez le texte d'origine et précisez-le.

Les enregistrements de vérification doivent être inclus dans la livraison (tableau : moment / texte original / texte après vérification / base de décision + taux de concordance + incertitudes restantes) — c'est la preuve de la crédibilité du script.

P7 Livraison et auto-vérification

Produisez un seul fichier Markdown, structure selon references/script-template.md ; avant la livraison, passez en revue chaque élément de references/qc-checklist.md.

Enfin, utilisez present_files pour présenter, et dans la réponse, donnez : la conclusion d'identification de la vidéo (titre/catégorie/durée), l'intrigue principale en une phrase, la structure de vente, le nombre de corrections apportées par la vérification.

Outils de script

scripts/extract_assets.sh réalise en une commande : sonde → audio → détection de scène → extraction uniforme → découpe des segments à haut risque :

bash scripts/extract_assets.sh "<video>" "<outdir>" [intervalle en secondes entre les images]
# Ex : bash scripts/extract_assets.sh ./v.mp4 ./frames 10

Le script génère probe.txt, audio.mp3, kf_*.jpg (avec correspondance numéro ↔ seconde), scene_log.txt, et affiche le nombre d'images et la durée sous forme d'un tableau de charge de travail.

Fichiers de référence

  • references/script-template.md — squelette complet de la livraison (fiche personnage / tableau des tonalités et ambiances / cinq dimensions par segment / méthodologie de vente / fiche de jeu / enregistrement de vérification)
  • references/qc-checklist.md — liste de 16 points d'auto-vérification avant livraison
  • references/pitfalls.md — 10 catégories d'erreurs fréquentes et solutions (avec cas réels)

Conventions de sortie

  • Format heure uniforme mm:ss (plus d'une heure : hh:mm:ss), écrivez l'intervalle dans les titres de paragraphe, et indiquez le second unique dans les blocs de répliques
  • Nom des personnages uniforme : nom complet à la première apparition, puis encadré par 【】 dans le texte, ex : 【Mère Gu】
  • Un même personnage avec des identités différentes (pseudonyme/enfant/adulte) doit avoir des fiches distinctes, avec la correspondance clairement indiquée
  • Les noms de produits, marques et prix doivent être vérifiés image par image avec les sous-titres (l'ASR confond souvent les noms de marques, ex : « hú luó wèn sù » → « carotène »)

Skills associés