Communitygithub.com

analyse-vidéo

Analyse un fichier vidéo local : ce qui est VU (images échantillonnées, planches contacts, changements de diapos, images à un instant précis) et ce qui est DIT (transcription horodatée hors ligne) — puis décrit les deux en les croisant par horodatage.

Qu'est-ce que analyse-vidéo ?

Cette compétence transforme un fichier vidéo local (mp4, mkv, etc.) en deux sources analysables : une série d'images extraites à intervalles réguliers et une transcription horodatée de l'audio, le tout entièrement hors ligne. Pour un développeur ou un utilisateur d'agent IA, elle permet de répondre à des demandes comme « analyse cette vidéo », « lis la vidéo », « que dit cette vidéo ? » ou « résume le cours » sans dépendre d'API cloud ni d'installation système. La compétence fonctionne sur Windows sans ffmpeg système grâce à un binaire ffmpeg embarqué via `imageio-ffmpeg`. L'extraction produit des dossiers `frames/`, `sheets/`, `keysheets/`, `at/`, un fichier `transcript.txt` et un `transcript.json`. L'analyse est guidée par une procédure stricte : lire d'abord la transcription (car le contenu décisif est souvent dans la voix), puis les planches contacts et les images clés, et enfin zoomer sur des images pleine résolution aux horodatages mentionnés par l'orateur. Le rapport final distingue clairement ce qui est visible à l'écran, ce qui est dit, et les inférences de l'analyste.

Compatible avec✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/alfibano/video-analysis/tree/HEAD/video-analysis

Demander à votre IA préférée

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

Documentation

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_whisper model.transcribe("<chemin>") lève TypeError: 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-ffmpeg fournit 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)' + showinfo n'affiche rien sous -loglevel error ; les images clés utilisent les différences de vignettes à la place.

Skills associés