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)
- 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.
- 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 ».
- 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. - 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.
- 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ée | Stratégie d'extraction d'images | Nombre maximum d'images | Description |
|---|---|---|---|
| ≤2 min | 1 image/2s + segments clés 1 image/s | 60–80 | Vidéo courte / publicité, tous les détails nécessaires |
| 2–10 min | 1 image/5s | 60–100 | Court métrage |
| 10–30 min | 1 image/10s + segments d'accroche renforcés | 80–120 | Court métrage / long contenu parlé, les 90 premières et dernières secondes nécessitent 1 image/3s |
| >30 min | 1 image/20s + échantillonnage par segments | 100–150 | Restitution 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.08et 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
ViewImagepour 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
- 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)
- 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 - Au début de chaque segment, écrivez
> Description de la scène :(lumière, composition, position des objets principaux, placement des personnages) - 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)
| Étiquette | Contenu obligatoire |
|---|---|
| 🎙️ Qualité vocale | Direction 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 regard | Le regard de [sujet] se dirige vers [objet nommé], durée du regard ; les mouvements du regard doivent être décrits |
| 🙌 Détails d'action | Posture 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 ambiance | Une 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érence | Méthode de détermination | Traitement |
|---|---|---|
| Inversion des locuteurs | Vé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/elle | Les homophones sont forcément faux, corrigez selon le vrai genre de la personne référée | Corrigez 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 principal | Ajoutez-les, ajustez la timeline du segment en conséquence |
| Nécessité de diviser une phrase fusionnée | Incohé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éclaration | Vérifiez si la fin de la phrase monte, s'il y a un sens interrogatif | Utilisez « ! » pour les phrases accusatrices, « ? » pour les questions de suivi |
| Hors-champ vs voix audible | Vérifiez si dans la tranche la position vocale est continue avec le reste, s'il y a un changement de piste audio | Continu 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'action | Regardez les images : quelle main tient qui, qui monte dans quelle voiture, le sous-titre appelle qui par quel nom | Inversez 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 livraisonreferences/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 »)