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_whispermodel.transcribe("<Pfad>")löst mit neuerem PyAVTypeError: 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-ffmpegliefert ffmpeg, aber kein ffprobe: Dauer und Audio-Präsenz werden aus ffmpegs eigenem Banner ausgelesen.- Die Szenenerkennung über
select='gt(scene,N)'+showinfogibt unter-loglevel errornichts aus; Schlüsselbilder verwenden stattdessen Thumbnail-Differenzen.