Analyse vidéo — ce qui est vu, ce qui est dit
Vous n'avez aucune entrée vidéo ou audio directe. Vous lisez des images extraites de la vidéo et une transcription de son audio. Tout ce qui suit transforme une vidéo en ces deux éléments, puis vous explique comment les lire sans faire d'affirmations non fondées.
Où vont les fichiers — règle stricte du propriétaire
Tout le matériel extrait va dans un seul dossier de travail à côté de la vidéo :
<dossier de la vidéo>\<nom de la vidéo>.analysis\ — jamais dans un espace de travail temporaire, un répertoire temporaire ou le projet.
Le propriétaire le supprime quand le travail sur cette vidéo est terminé, pour récupérer de l'espace disque.
Ne le supprimez jamais vous-même. Si on vous demande de nettoyer, utilisez la compétence trash sur exactement ce dossier (Corbeille, jamais rm). Votre analyse écrite (le livrable) appartient à l'endroit où le projet le souhaite, pas dans le dossier .analysis, de sorte que vider le dossier ne perde rien de valeur.
1. Outils (une fois par machine)
python ~/.claude/skills/video-analysis/scripts/setup_tools.py --check # vérifier
python ~/.claude/skills/video-analysis/scripts/setup_tools.py # installer ce qui manque
Installe avec pip --user : imageio-ffmpeg (un binaire ffmpeg intégré — pas de ffmpeg système, pas d'administrateur, pas de winget/choco), Pillow, numpy, faster-whisper, et met en cache le modèle Whisper small (le seul accès réseau ; ensuite tout est hors ligne). Code de sortie 0 = PRÊT.
Auto-test (vidéo synthétique, 9 vérifications, --full ajoute Whisper) :
python ~/.claude/skills/video-analysis/scripts/selftest.py
2. Extraction
python ~/.claude/skills/video-analysis/scripts/extract_video.py "<chemin vidéo>" --language fr
Exécutez-la en arrière-plan pour les vidéos de plus de quelques minutes : la transcription s'effectue environ 5 fois plus vite que le temps réel sur CPU (une vidéo de 15 min prend ~3 min). Options : --interval 5 (secondes entre les images ; utilisez 2 pour les écrans qui changent rapidement, 10-15 pour les têtes parlantes), --model small (medium = meilleur, 3x plus lent), --skip-frames, --skip-transcript, --at HH:MM:SS[.mmm] (répétable, image pleine résolution à un instant précis — utilisée à l'étape 3d).
Produit dans <vidéo>.analysis\ : frames\ (chaque intervalle), sheets\ (planches contacts 3×3, chaque image horodatée mm:ss en jaune), keyframes.txt + keysheets\ (uniquement les images qui ont changé visiblement — les changements de diapo/écran), audio.wav, transcript.txt ([mm:ss] texte) + transcript.json, at\, manifest.json. Une nouvelle exécution reprend et saute les étapes déjà terminées ; des paramètres modifiés ou une vidéo différente sont refusés (code de sortie 3) au lieu de mélanger les résultats. Code de sortie 1 = échec du traitement, 2 = mauvaise entrée.
3. Lecture — dans cet ordre
a. La transcription en premier (transcript.txt). Dans les cours et démonstrations, le contenu décisif (chiffres, règles, exceptions, la véritable méthode) est très souvent dans la voix, pas à l'écran.
b. Les planches contacts des images clés (keysheets\) pour voir chaque diapo/écran distinct une fois.
c. Les planches contacts (sheets\) — toutes, dans l'ordre, pour suivre ce qui bouge entre les images clés (curseur, dessins, graphiques qui se mettent à jour).
d. Zoomez là où la parole pointe : quand l'orateur dit « ici », « cette bougie », « regardez… », relancez avec --at <horodatage> et les mêmes options que la première exécution (sinon la vérification du manifeste refuse avec le code 3), puis lisez cette image pleine résolution. Les planches font 640 px par cellule — trop petites pour les étiquettes de graphiques ou les petits textes.
e. Rédigez l'analyse (étape 4).
4. Rapport — gardez trois choses séparées
Pour chaque passage, citez les horodatages et étiquetez chaque affirmation comme l'un des suivants :
- À L'ÉCRAN — ce qu'une image montre réellement (texte de diapo, graphique, annotation, interface).
- DIT — ce que la voix énonce (citation ou paraphrase proche, avec
[mm:ss]). - INFÉRENCE — votre interprétation qui relie les deux. Ne la présentez jamais comme vu ou dit.
Incluez toujours :
- les écarts entre ce qui est écrit et ce qui est dit (par exemple, une diapo dit une chose et la voix ajoute la règle qui compte vraiment, ou la contredit) ;
- ce qui n'est montré qu'une fois (un seul exemple démontré est une illustration, pas une preuve) ;
- limites : les images sont échantillonnées toutes les N secondes et peuvent manquer des événements brefs ; l'horodatage d'une image est son index × intervalle, donc il est approximatif (± un demi-intervalle, plus sur les enregistrements à débit variable) ; la déduplication des images clés peut cacher de petites modifications ; Whisper déforme les noms propres et le jargon (vérifiez avec les images) ; pas de lecture fiable du ton, de l'émotion, de la musique, de l'identité du locuteur ou du mouvement.
5. Après
Indiquez à l'utilisateur le chemin du dossier de travail et sa taille (imprimée à la fin de l'extraction). Laissez-le en place jusqu'à ce qu'il dise que le travail sur la vidéo est terminé ; ensuite videz-le avec la compétence trash.
Pièges connus (déjà gérés par les scripts)
faster_whispermodel.transcribe("<chemin>")lèveTypeError: open() got an unexpected keyword argument 'metadata_errors'avec PyAV récent. Le script extrait un WAV 16 kHz mono PCM16 avec ffmpeg et passe un tableau float32 à la place.imageio-ffmpegfournit ffmpeg mais pas ffprobe : la durée et la présence audio sont lues depuis la bannière de ffmpeg lui-même.- La détection de scène via
select='gt(scene,N)'+showinfon'affiche rien sous-loglevel error; les images clés utilisent les différences de vignettes à la place.