akimov121-hub/watch

Regarde n'importe quelle vidéo par URL (YouTube, Loom, enregistrement Zoom, mp4 direct) — pas seulement la transcription, mais ce qui est réellement AFFICHÉ à l'écran. Les images sont extraites par détection de changement de scène (ffmpeg scene detection), pas sur une minuterie, pour ne rien manquer des graphiques, démos, montages ou b-roll. Audio : sous-titres via yt-dlp d'abord, Whisper en secours. Utilisez-le quand l'utilisateur écrit /watch <url> ou demande de « regarder cette vidéo », « parcourir cet enregistrement/appel/cours », « ce qui est affiché à l'écran ».

Qu'est-ce que watch ?

Cette compétence permet à Claude de regarder une vidéo de bout en bout en extrayant des images clés (via la détection de changement de scène avec ffmpeg) et une transcription (sous-titres via yt-dlp ou Whisper en secours). Elle prend en charge YouTube, Loom, les enregistrements Zoom, les fichiers mp4 directs, et plus encore. Le flux de travail télécharge d'abord les sous-titres (gratuits quand disponibles), puis la vidéo elle-même, et extrait les images aux moments de changement de scène plutôt qu'à intervalles fixes — ce qui garantit qu'aucun moment important (diapositives, code, démos) n'est manqué. La compétence lit ensuite la transcription et analyse les images pour fournir un résumé, des concepts clés avec horodatages, et ce qui est montré à l'écran mais absent du texte. Elle nécessite yt-dlp, ffmpeg, Whisper et Node.js ; un script d'installation configure tout, y compris les cookies YouTube et la gestion des défis anti-bot. Idéale pour les développeurs ou quiconque a besoin d'analyser du contenu vidéo de manière approfondie.

Compatible avec✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/akimov121-hub/watch/tree/main

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

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

Documentation

watch — Claude regarde une vidéo de bout en bout

Divise une vidéo en ce que Claude lit nativement : images (frames) (vues avec l'outil Read) + transcription (texte). Le résultat est une compréhension non seulement des mots, mais aussi de ce qui se passe à l'écran.

Bilingue. Ceci est la version anglaise. Un miroir russe complet est SKILL.ru.md. Travaillez dans la langue que l'utilisateur utilise ; le flux de travail et les commandes sont identiques.

Dépendances (installées une fois via install.sh)

Vérifiez avec : command -v yt-dlp ffmpeg whisper node.

  • yt-dlp → ~/.local/bin/yt-dlp (sous Python 3.12 dans ~/.local/python312 — le Python système est généralement trop vieux ; les versions récentes de yt-dlp nécessitent 3.10+) ;
  • ffmpeg → depuis imageio-ffmpeg, lié symboliquement vers ~/.local/bin/ffmpeg ;
  • whisper → openai-whisper (sous le Python système ; le modèle se télécharge à la première utilisation) ;
  • node → ~/.local/node (v24) — nécessaire pour contourner les défenses de YouTube.

Pour YouTube spécifiquement, install.sh configure également :

  • un fournisseur de PO-token (bgutil), construit en mode script sous ~/.local/bgutil-pot/server/build/ ;
  • un runtime Node.js + un composant EJS, pour résoudre le n-challenge de YouTube ;
  • des cookies provenant d'un compte YouTube connecté, à ~/.config/watch/cookies.txt.

Si les cookies deviennent obsolètes (YouTube demande à nouveau de « confirmer que vous n'êtes pas un robot »), demandez à l'utilisateur de ré-exporter cookies.txt avec une extension de navigateur comme "Get cookies.txt LOCALLY" et de le placer dans ~/.config/watch/cookies.txt.

Téléchargez toujours via le wrapper bash ~/.claude/skills/watch/yt.sh … — il ajoute automatiquement les bons indicateurs YouTube. Pour les URLs mp4/Loom/Zoom directes, les indicateurs supplémentaires sont inoffensifs.

Flux de travail

1. Configuration

  • Créez un dossier de travail : mkdir -p /tmp/watch/<slug> (slug = un nom court provenant de l'URL/du sujet).
  • Analysez l'URL (YouTube / Loom / un lien de partage Zoom / un fichier vidéo direct). Un fichier local ignore les étapes de téléchargement — travaillez directement avec.

2. Transcription — sous-titres d'abord (gratuits, quand disponibles)

bash ~/.claude/skills/watch/yt.sh --write-subs --write-auto-subs --sub-langs "en,ru" \
  --skip-download --convert-subs srt -o "/tmp/watch/<slug>/subs.%(ext)s" "<URL>"

Si un fichier .srt apparaît, c'est une transcription prête avec horodatages — utilisez-la.

3. Téléchargement de la vidéo (nécessaire à la fois pour les images et comme secours Whisper)

bash ~/.claude/skills/watch/yt.sh -f "bv*[height<=480]+ba/b[height<=480]/18/best" \
  -o "/tmp/watch/<slug>/video.%(ext)s" "<URL>"

Vous obtiendrez un fichier .mp4 ou .webm — utilisez le vrai nom de fichier à partir de maintenant (video.*). S'il n'y avait pas de sous-titres, transcrivez l'audio avec Whisper (modèle small ; base est plus rapide pour un test rapide) :

whisper "/tmp/watch/<slug>/video.webm" --model small --language en \
  --output_format srt --output_dir "/tmp/watch/<slug>/"

La première exécution télécharge le modèle (~460 Mo pour small) — c'est normal, une seule fois. Supprimez --language en pour un audio non anglais, ou définissez le code de langue approprié. Whisper est lent : un clip de 34 minutes prend plusieurs minutes — exécutez-le en arrière-plan.

4. Images PAR CHANGEMENT DE SCÈNE (l'étape clé — pas sur une minuterie)

ffmpeg -i "/tmp/watch/<slug>/video.webm" -vf "select='gt(scene,0.3)',showinfo" \
  -vsync vfr "/tmp/watch/<slug>/frames/frame_%04d.png" 2> "/tmp/watch/<slug>/scenes.log"
  • Seuil 0.3 — ajustez 0.2–0.4 pour la densité des scènes (un seuil plus bas = plus d'images).
  • Obtenez l'horodatage de chaque image à partir du journal showinfo (pts_time) dans scenes.log.
  • S'il y a trop d'images (une vidéo longue), conservez environ 60–150 des plus informatives, en éliminant les images trop rapprochées dans le temps. Décoder une vidéo longue prend du temps — exécutez-le en arrière-plan.

SECOURS — s'il y a trop peu de scènes (0–2 images). Un métrage lisse et non coupé (un seul plan continu, un drone, une tête parlante) produit peu de changements de scène. Dans ce cas, échantillonnez à intervalle fixe à la place :

ffmpeg -i "/tmp/watch/<slug>/video.webm" -vf "fps=1/5,scale=960:-1,showinfo" \
  -vsync vfr "/tmp/watch/<slug>/frames/frame_%04d.png" 2> "/tmp/watch/<slug>/scenes.log"

Ajustez l'intervalle (1/5 = une image toutes les 5 s) à la longueur de la vidéo pour rester à environ ~150 images. L'horodatage de la i-ème image = i × intervalle.

4a. YouTube : pourquoi tout passe par yt.sh

YouTube (2025+) nécessite ces trois éléments à la fois, sinon vous obtenez HTTP 403 / « pas un robot » / « seulement des images » :

  1. cookies d'un compte connecté (~/.config/watch/cookies.txt) ;
  2. un PO-token (proof-of-origin) — généré localement par bgutil (mode script, Node) ;
  3. résoudre le n-challenge — un runtime Node + un composant EJS (--remote-components ejs:github). Tout ceci est déjà intégré dans yt.sh — appelez-le simplement. Les sources mp4/Loom/Zoom directes n'ont pas ces défenses. Si cela demande à nouveau de « confirmer que vous n'êtes pas un robot », les cookies ont expiré — demandez un nouveau cookies.txt.

5. Analyse

  • Lisez la transcription (.srt).
  • Regardez les images extraites (vision, via l'outil Read) : diapositives, code, démos, graphiques.
  • Liez les visuels à la transcription à l'aide des horodatages.

6. Rapport

Fournissez :

  • un TL;DR (3–5 lignes) ;
  • les concepts clés avec horodatages ;
  • ce qui est affiché À L'ÉCRAN qui n'est pas dans le texte (graphiques, interfaces, démos) ;
  • moments / citations notables avec horodatages.

7. Sauvegarde dans une base de connaissances (demandez d'abord)

Demandez : « Enregistrer cette analyse dans votre base de connaissances (Obsidian) ? » Si oui, écrivez une note markdown dans le dossier approprié avec des liens vers des notes connexes. Ne sauvegardez pas sans confirmation.

Règles

  • Les fichiers de travail vont dans un dossier temporaire /tmp/watch/<slug> — ne encombrez pas le projet.
  • Ne publiez ni n'envoyez quoi que ce soit à l'extérieur sans une demande explicite.
  • Ne contournez pas une vidéo privée derrière une connexion — informez-en l'utilisateur.

Skills associés