Communitygithub.com

Video-Analyse

Analysiere eine lokale Videodatei – was GESEHEN wird (Stichproben, Kontaktabzüge, Folienwechsel, Zeitpunkte) und was GESAGT wird (Offline-Transkript mit Zeitstempeln) – und beschreibe beides zeitlich referenziert.

Was ist Video-Analyse?

Das Video-Analyse-Skill ermöglicht es einem KI-Agenten, eine lokale Videodatei (z. B. MP4, MKV, Bildschirmaufnahme, Kurs, Webinar) vollständig offline auf Windows zu analysieren, ohne dass systemweites ffmpeg installiert sein muss. Es extrahiert zwei Informationsquellen: Einerseits werden in regelmäßigen Abständen Frames als Bilder gespeichert, aus denen Kontaktabzüge und reine Folienwechsel-Bilder erstellt werden (das „Gesehene“). Andererseits wird mit Hilfe von Whisper (faster-whisper) ein Transkript der Tonspur erstellt (das „Gesagte“). Die Analyse wird durch ein strenges Regelwerk geleitet: Der Agent muss Transkript und Frames in einer festgelegten Reihenfolge auswerten, Aussagen eindeutig als „AUF DEM BILDSCHIRM“, „GESAGT“ oder „SCHLUSSFOLGERUNG“ kennzeichnen und die Ergebnisse mit Zeitstempeln versehen. Das Skill eignet sich besonders für die technische Dokumentation von Schulungen oder Demos, bei denen der Sprecher oft die entscheidenden Details liefert, die nicht auf dem Bildschirm erscheinen. Es setzt auf Python-Skripte, die einmalig eingerichtet werden, und arbeitet nach der Extraktion vollständig offline.

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Video-Analyse — Was gesehen wird, was gesagt wird

Du hast keinen direkten Video- oder Audioeingang. Du liest aus dem Video extrahierte Bilder und ein Transkript des Tons. Alles unten verwandelt ein Video in diese beiden Dinge und sagt dir dann, wie du sie liest, ohne zu viel zu behaupten.

Wo die Dinge hingehen — die strenge Regel des Eigentümers

Das gesamte extrahierte Material kommt in einen Arbeitsordner neben dem Video: <Ordner des Videos>\<Videoname>.analysis\ — niemals in einen Scratchpad, ein temporäres Verzeichnis oder das Projekt. Der Eigentümer löscht ihn, wenn die Arbeit an diesem Video abgeschlossen ist, um Speicherplatz freizugeben. Lösche ihn niemals selbst. Wenn eine Bereinigung gewünscht wird, verwende das trash-Skill für genau diesen Ordner (Papierkorb, niemals rm). Deine schriftliche Analyse (das Arbeitsergebnis) gehört dorthin, wo das Projekt es haben möchte, nicht in den .analysis-Ordner, damit das Wegwerfen des Ordners nichts Wertvolles verliert.

1. Werkzeuge (einmal pro Maschine)

python ~/.claude/skills/video-analysis/scripts/setup_tools.py --check   # überprüfen
python ~/.claude/skills/video-analysis/scripts/setup_tools.py           # installieren, was fehlt

Installiert mit pip --user: imageio-ffmpeg (ein gebündeltes ffmpeg-Binary — kein systemweites ffmpeg, kein Admin, kein winget/choco), Pillow, numpy, faster-whisper und speichert das Whisper-Modell small im Cache (der einzige Netzwerkzugriff; danach ist alles offline). Exit 0 = BEREIT.

Selbsttest (synthetisches Video, 9 Prüfungen, --full fügt Whisper hinzu): python ~/.claude/skills/video-analysis/scripts/selftest.py

2. Extrahieren

python ~/.claude/skills/video-analysis/scripts/extract_video.py "<Videopfad>" --language de

Führe es bei Videos länger als ein paar Minuten im Hintergrund aus: Die Transkription läuft ~5x schneller als Echtzeit auf der CPU (ein 15-minütiges Video dauert ~3 Minuten). Optionen: --interval 5 (Sekunden zwischen den Frames; verwende 2 bei sich schnell bewegenden Bildschirmen, 10-15 bei Sprecherporträts), --model small (medium = besser, 3x langsamer), --skip-frames, --skip-transcript, --at HH:MM:SS[.mmm] (wiederholbar, Frame in voller Auflösung zu einem exakten Zeitpunkt — wird in Schritt 3d verwendet).

Erzeugt in <Video>.analysis\: frames\ (jedes Intervall), sheets\ (3x3 Kontaktabzüge, jedes Bild mit mm:ss in Gelb gestempelt), keyframes.txt + keysheets\ (nur Frames, die sich sichtbar geändert haben — die Folien-/Bildschirmwechsel), audio.wav, transcript.txt ([mm:ss] Text) + transcript.json, at\, manifest.json. Ein erneuter Lauf setzt fort und überspringt abgeschlossene Phasen; geänderte Parameter oder ein anderes Video werden abgelehnt (Exit 3), anstatt die Ausgaben zu vermischen. Exit 1 = Verarbeitungsfehler, 2 = fehlerhafte Eingabe.

3. Lesen — in dieser Reihenfolge

a. Zuerst das gesamte Transkript (transcript.txt). In Kursen und Demos liegen die entscheidenden Inhalte (Zahlen, Regeln, Ausnahmen, die eigentliche Methode) sehr oft in der Stimme, nicht auf dem Bildschirm. b. Die Schlüsselbild-Kontaktabzüge (keysheets\), um jede einzelne Folie/jeden Bildschirm einmal zu sehen. c. Die Kontaktabzüge (sheets\) — alle, der Reihe nach, um zu verfolgen, was sich zwischen den Schlüsselbildern bewegt (Cursor, Zeichnungen, sich aktualisierende Diagramme). d. Heranzoomen, wenn der Sprecher darauf hinweist: Wenn der Sprecher „hier“, „diese Kerze“, „schauen Sie auf …“ sagt, erneut mit --at <Zeitstempel> und denselben Optionen wie beim ersten Lauf ausführen (andernfalls lehnt die Manifest-Prüfung mit Exit 3 ab), dann dieses Frame in voller Auflösung lesen. Die Blätter sind 640 px pro Zelle — zu klein für Diagrammbeschriftungen oder kleinen Text. e. Die Analyse schreiben (Schritt 4).

4. Bericht — halte drei Dinge auseinander

Für jede Passage Zeitstempel angeben und jede Aussage wie folgt kennzeichnen:

  • AUF DEM BILDSCHIRM — was ein Bild tatsächlich zeigt (Folientext, Diagramm, Anmerkung, Benutzeroberfläche).
  • GESAGT — was die Stimme aussagt (Zitat oder enge Paraphrase, mit [mm:ss]).
  • SCHLUSSFOLGERUNG — deine Interpretation, die beide verbindet. Niemals als gesehen oder gesagt darstellen.

Immer enthalten:

  • die Lücken zwischen dem, was geschrieben steht, und dem, was gesagt wird (z. B. eine Folie sagt das eine, und die Stimme fügt die Regel hinzu, die eigentlich wichtig ist, oder widerspricht ihr);
  • was nur einmal gezeigt wird (ein einziges demonstriertes Beispiel ist eine Veranschaulichung, kein Beleg);
  • Grenzen: Frames werden alle N s ausgewählt und können kurze Ereignisse übersehen; der Zeitstempel eines Frames ist sein Index × Intervall, also ungefähr (± ein halbes Intervall, mehr bei Aufnahmen mit variabler Bildrate); die Deduplizierung von Schlüsselbildern kann kleine Änderungen verbergen; Whisper schreibt Namen und Fachbegriffe falsch (anhand der Bilder überprüfen); keine zuverlässige Erfassung von Tonfall, Emotion, Musik, Sprecheridentität oder Bewegung.

5. Danach

Teile dem Benutzer den Pfad des Arbeitsordners und seine Größe mit (wird am Ende der Extraktion ausgegeben). Belasse ihn, bis der Benutzer sagt, dass die Arbeit an diesem Video abgeschlossen ist; dann wirf ihn mit dem trash-Skill weg.

Bekannte Fallstricke (bereits von den Skripten behandelt)

  • faster_whisper model.transcribe("<Pfad>") löst mit neuerem PyAV TypeError: open() got an unexpected keyword argument 'metadata_errors' aus. Das Skript extrahiert 16 kHz Mono PCM16 WAV mit ffmpeg und übergibt stattdessen ein float32-Array.
  • imageio-ffmpeg liefert ffmpeg, aber kein ffprobe: Dauer und Audio-Präsenz werden aus ffmpegs eigenem Banner ausgelesen.
  • Die Szenenerkennung über select='gt(scene,N)' + showinfo gibt unter -loglevel error nichts aus; Schlüsselbilder verwenden stattdessen Thumbnail-Differenzen.

Verwandte Skills