claude-real-video : extraire les images qui changent avant de les donner à un LLM
Let Claude (or any LLM) actually watch a video — scene-aware, deduplicated frames + transcript, from a URL or local file. Runs locally, MIT.
En bref
- De quoi s’agit-il ?
- crv est un outil Python en ligne de commande qui découpe une vidéo par détection de changements de scène, déduplique les images quasi identiques, transcrit l'audio et produit un dossier lisible par n'importe quel LLM. Le traitement tourne en local, sous licence MIT.
- À qui s’adresse-t-il ?
- crv convient aux développeurs et aux utilisateurs d'agents de code qui veulent donner à un LLM des images choisies par changement de scène plutôt qu'un échantillonnage à intervalle fixe, avec un traitement qui reste sur la machine locale. Il ne convient pas à qui cherche un service hébergé clé en main, ni à qui a besoin d'une compréhension native de la vidéo par le modèle : crv prépare des fichiers, il n'analyse rien lui-même.
- Puis-je l’utiliser commercialement ?
- Oui. MIT est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
- Est-il encore maintenu ?
- Oui. Les derniers commits datent d’il y a 5 jours.
- En quel langage est-il écrit ?
- Principalement Python, d’après les statistiques de langage de GitHub.
Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.
ANALYSE OPEN SOURCE APPROFONDIE
Le problème : un LLM ne regarde pas la vidéo, il lit du texte
Le README part d'un constat simple. Coller un lien YouTube dans ChatGPT fait lire la transcription, pas l'image. Claude n'accepte pas de fichier vidéo. Gemini, qui lit la vidéo nativement, doit l'envoyer chez Google et échantillonne les images à intervalle fixe, 1 image par seconde par défaut, ce qui laisse passer les montages rapides. L'outil s'adresse donc à deux publics. D'un côté, l'utilisateur d'un agent de code qui veut poser une question sur une vidéo sans quitter son terminal. De l'autre, l'ingénieur qui a besoin d'extraire des keyframes d'un enregistrement d'écran ou d'un tutoriel, sans faire appel à un modèle. Le README précise d'ailleurs que l'outil fonctionne comme extracteur de keyframes généraliste, sans modèle ML à télécharger si l'on se passe de Whisper. Cette double casquette explique une bonne partie des choix d'interface.
Ce que produit une exécution : un dossier, pas une réponse
La commande de base est `crv "https://www.youtube.com/watch?v=..."`. Le README donne la sortie attendue : `crv-out/frames/*.jpg`, un fichier `frames.json` avec les horodatages par image, `transcript.txt` et `transcript.json`, plus un `MANIFEST.txt`. L'utilisateur dépose ensuite les images et le manifeste dans Claude, ChatGPT ou Gemini. Autrement dit, crv ne répond pas à la question posée sur la vidéo. Il fabrique le matériel que le modèle lira. Cette séparation est le point central du projet : tout le traitement est local, et ce qui part chez un fournisseur de modèle est uniquement ce que vous choisissez de coller. Le README le formule sans ambiguïté, y compris pour le cas où vous collez ensuite images et transcription dans un LLM cloud. La nuance compte pour toute équipe qui manipule des enregistrements internes.
Détection de scène et déduplication : le mécanisme réel
Le README illustre la différence sur un même clip de 58 secondes. Un échantillonnage à 1 image par seconde fixe produit 58 images. crv n'en garde que 26, celles qui diffèrent réellement, et l'option `--grid` les regroupe en 3 planches contact. La sélection repose sur la détection de changement de scène, pas sur un quota. Une image est retenue quand le contenu change, et les quasi-doublons sont écartés. Deux réglages corrigent les cas où ce principe atteint ses limites. `--adaptive` compare chaque image à son voisinage glissant au lieu d'un seuil fixe, ce qui permet d'attraper un mouvement lent, un squash-and-stretch de 2 à 3 secondes qui ne déclenche aucun pic sur une image isolée. `--text-anchors` force des images supplémentaires aux horodatages des sous-titres, pour que chaque segment parlé ait une image correspondante même si la scène bouge à peine. Ce second mode exige un fichier `.srt` ou `.vtt` annexe, ou une piste de sous-titres intégrée. Des sous-titres incrustés dans les pixels ne sont pas détectables, et le README fixe la limite à une image forcée par seconde au maximum, la détection de scène restant intacte.
Fenêtrer, agrandir, séparer les voix
Trois options répondent à des situations précises. `--from 28:00 --to 43:00` restreint le travail à une plage : ffmpeg fait un seek au lieu de décoder tout le fichier, Whisper n'entend que la fenêtre, et le budget d'images est dépensé à l'intérieur. Le README insiste sur un point utile : les horodatages rapportés restent des timecodes source, donc citables tels quels à un collègue. `--frame-width 1600` augmente la résolution des images extraites, argument avancé pour les contenus où le sens tient dans du petit texte, un terminal, un tableur, un IDE. Le raisonnement du README mérite d'être cité : la sélection d'images est la partie difficile et crv la fait déjà, mais à 640 px sur un enregistrement d'écran de 1920 px, le bon moment est trouvé puis le détail qui le rendait intéressant est perdu. `--speakers` ajoute une étiquette `[SPEAKER_00]`, `[SPEAKER_01]` à chaque ligne de transcription, via un modèle de diarisation local de 45 Mo téléchargé une fois, sans compte ni jeton. Il s'installe séparément avec `pip install "claude-real-video[speakers]"`.
Installation : pip, skill d'agent, ou page locale
Le README propose trois chemins. Pour la CLI seule, `pip install "claude-real-video[whisper]"` suffit, puis `crv "<url>"`. Pour un agent de code, `npx skills add HUANGCHIHHUNGLeo/claude-real-video` installe le skill dans Claude Code, Cursor, Codex, Copilot, Gemini CLI et d'autres hôtes compatibles agentskills.io. Une installation manuelle est documentée en repli : cloner le dépôt puis copier `claude-real-video/skills/claude-real-video` dans `~/.claude/skills/`. Pour Claude Code, un marketplace de plugin est également décrit avec `/plugin marketplace add` et `/plugin install`. Enfin, `crv-web` ouvre une page locale en chinois traditionnel, chinois simplifié ou anglais, où l'on colle un lien ou un chemin de fichier, puis Analyze. L'option `--viewer` écrit un `viewer.html` local contenant la vidéo, la grille de keyframes et la transcription, à ouvrir par double-clic, sans réseau ni installation supplémentaire. Le README signale aussi que l'extra n'est pas anodin : `[whisper]` pour la transcription, `[speakers]` pour la diarisation.
Limites assumées et cas où l'outil ne sert à rien
La première limite est structurelle : crv produit des fichiers, il n'interprète pas la vidéo. Le README va jusqu'à opposer la version gratuite, qui laisse l'IA voir la vidéo, à une offre payante crv Pro, vendue 29 dollars sur Capafy et Lemon Squeezy, qui ajoute le rythme de montage, les mouvements de caméra et une chronologie horodatée de ce que les images ne montrent pas, gestes, expressions, variations de hauteur de voix, émotion, événements sonores. Autrement dit, le positionnement de l'auteur lui-même place la compréhension hors du périmètre de cette version. Deuxième limite : `--text-anchors` dépend de sous-titres exploitables et plafonne à une image forcée par seconde. Troisième : la transcription et la diarisation supposent des extras installés et des modèles téléchargés, ce qui alourdit une installation sur machine contrainte. Enfin, un lecteur qui veut une réponse directe à une question sur une vidéo, sans gérer un dossier de fichiers ni choisir quoi coller dans le modèle, se trompe d'outil. crv déplace la charge de travail vers l'utilisateur, volontairement.
Face à un échantillonnage à intervalle fixe
L'alternative la plus directe n'est pas un autre paquet Python mais le chemin natif d'un modèle multimodal. Gemini accepte une vidéo et l'échantillonne à intervalle régulier, 1 image par seconde par défaut selon le README. La différence d'approche est nette. L'intervalle fixe garantit une couverture temporelle uniforme et ne demande aucun prétraitement, mais il dépense le budget d'images sans rapport avec le contenu : un plan statique de trente secondes consomme trente images identiques, et une coupe rapide entre deux images échantillonnées peut disparaître. crv fait l'inverse, il lie le nombre d'images aux changements réels, au prix d'un traitement local, d'une étape ffmpeg et d'un choix manuel de ce qui sera transmis au modèle. Aucune des deux méthodes n'est meilleure dans l'absolu. Si vous voulez poser une question et obtenir une réponse sans manipuler de fichiers, l'échantillonnage natif est plus court. Si vous voulez maîtriser ce qui sort de votre machine et éviter les images redondantes, crv est conçu pour cela.
Suivi des versions et portée de la licence MIT
Le rythme de publication est soutenu. Trois versions apparaissent sur la période couverte : v0.10.1 sur des correctifs de fenêtre, v0.10.2 qui fait utiliser les sous-titres propres à la source pour les exécutions sur URL, v0.10.3 sur un en-tête de légende qui n'ouvre plus la transcription. Ce sont des correctifs d'interface et de comportement, pas des refontes, ce qui suggère un projet en phase de finition plutôt qu'en reconstruction. La licence MIT du dépôt couvre le code. Elle ne dit rien du modèle Whisper, du modèle de diarisation de 45 Mo, ni des conditions d'utilisation des plateformes dont vous extrayez des vidéos. Le README mentionne aussi un marketplace de plugin Claude Code avec mise à jour automatique activable dans `/plugin` puis Marketplaces, ce qui déplace la question de la mise à jour vers l'hôte plutôt que vers pip. Sur ce point, le matériel fourni ne permet pas de trancher si les deux canaux d'installation restent synchronisés. Vérifiez-le avant de standardiser sur le plugin.
Conclusion éditoriale
crv convient aux développeurs et aux utilisateurs d'agents de code qui veulent donner à un LLM des images choisies par changement de scène plutôt qu'un échantillonnage à intervalle fixe, avec un traitement qui reste sur la machine locale. Il ne convient pas à qui cherche un service hébergé clé en main, ni à qui a besoin d'une compréhension native de la vidéo par le modèle : crv prépare des fichiers, il n'analyse rien lui-même. Avant d'adopter, vérifiez que ffmpeg est présent sur la machine, que le disque accepte le cache du modèle de diarisation de 45 Mo si vous activez --speakers, et que votre cas d'usage tolère la limite documentée d'une image forcée par seconde avec --text-anchors.
Notes de la communauté