Communitygithub.com

video-script-reverse-engineering

Dient dazu, eine vom Benutzer bereitgestellte Videodatei (MP4/MOV/M4A etc.) in ein detailliertes, timestamps-basiertes Skript zu zerlegen – inklusive Dialogzeilen, Stimmeigenschaften, Mimikverläufen, Blickkontakt und Handlungsdetails. Ideal für das Reverse-Engineering von Werbevideos, Kurzfilmen, Erklärvideos oder Mundpropaganda-Clips.

Was ist video-script-reverse-engineering?

Der Skill 'Video-Skript Reverse Engineering' ermöglicht es einem KI-Agenten, aus einer Videodatei ein präzises, statisches Textskript zu erstellen, das so detailliert ist, dass ein Leser die Szene 'sehen' kann, ohne das Video anzusehen. Er unterstützt die Analyse von Dialog, Stimmeigenschaften (Tonhöhe, Lautstärke, Geschwindigkeit, Atem), Mimikverläufen, Blickkontakt und Handlungsdetails. Der Skill ist für Entwickler und Content-Ersteller konzipiert, die Werbestrukturen, Schauspielanweisungen oder Storyboard-Vorlagen aus Referenzvideos extrahieren möchten. Er arbeitet auf jeder Plattform, die CLI-Tools wie ffmpeg und ffprobe sowie Funktionen zur Audio-Transkription und Bildanalyse bereitstellt. Der Prozess umfasst eine tiefgehende Analyse in sieben Schritten, von der Materialerfassung über die Erstellung eines Sekunden-taktischen Untertitelrasters bis hin zu einer mehrstufigen Kreuzvalidierung, die Sprecheridentifikationen, Pronomen und Handlungsrichtungen korrigiert. Der Skill stellt sicher, dass jede Textzeile mit den tatsächlichen Bild- und Audiodaten übereinstimmt, indem er Fehler in der automatischen Spracherkennung (ASR) und Diarisierung erkennt und behebt. Er ist besonders nützlich für die Rekonstruktion von Verkaufsskripten, die Analyse von Kurzfilmen oder die Erstellung von Schauspielanweisungen basierend auf Benchmark-Videos.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ZHIXIAO-XJY/video-script-reverse-engineering/tree/HEAD

In Ihrer bevorzugten KI fragen

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

Dokumentation

Video-Skript Reverse Engineering – Hochpräzise Zerlegung

Wandelt ein dynamisches Video in ein statisches Textskript um, das nachdrehbar ist. Kernkriterium: Der Leser soll die Szene „sehen“, ohne das Video anzusehen – was gesagt wird, wie es gesagt wird, wie sich das Gesicht verändert, wer wen anschaut und warum.

Wann dieser Skill aufgerufen wird

  • Der Benutzer stellt eine Videodatei und bittet um „Skript extrahieren / zerlegen / Frame-für-Frame-Analyse / in Textskript umwandeln / Wie wurde dieses Video gedreht?“
  • Aus einem Referenzvideo soll die Struktur eines Verkaufsgesprächs (Schmerzpunkt → Empathie → Beweis → Preis → Handlungsaufforderung) extrahiert werden
  • Ein Schauspieler oder Regisseur benötigt eine Performance-Anleitung (Tonfall, Gesichtsausdrücke, Blickkontakt)
  • Aus einem Benchmark-Video sollen Kameraeinstellungen und Schnittrhythmus abgeleitet werden

Nicht geeignet für: Reine Untertitelextraktion (dafür reicht ASR), Videobearbeitung, Musiktranskription.

Feste Regeln (zuerst merken)

  1. Dialoge nicht bereinigen: „Äh / Ah / Hm / Oh / Pscht / Hmm“ bleiben erhalten – sie sind entscheidend für Authentizität und Personenverteilung. Nicht verschönern oder löschen.
  2. Blickkontakt muss spezifisch sein: Schreibe „[A]s Blick fällt auf [Bs genaue Identität/Körperteil] + Dauer“. Vermeide vage Formulierungen wie „sieht sie an“ oder „liebevoller Blick“.
  3. Mimik als Verlauf notieren: Im Format [Start] → [Mitte] → [Ende] (z.B. aufgerissene Augen → Pupillen geweitet → Augenbrauen entspannen, Lippen zusammengepresst). Kein statisches Adjektiv.
  4. Stimmeigenschaften detailliert angeben: Tonhöhe, Lautstärke, Geschwindigkeit, Atem (Hauchstimme / Brüche / Luftholen / Seufzer), betonte Wörter, Pausenlänge – mindestens drei von fünf angeben.
  5. Sprecher müssen validiert sein: ASR-Diarisierung ist fehleranfällig → Segmentweise Neutranskription (P6) → Sekundengenaues Untertitelraster (P3.5) → Lippenbewegungs-Frames entscheiden. Erst wenn alle vier Beweise passen, darf der Sprecher notiert werden.

Arbeitsablauf (P0–P7)

P0 – Materialerkundung

ffprobe -v error -show_entries format=duration,size:stream=codec_type,codec_name,width,height,r_frame_rate \
  -of default=noprint_wrappers=1 "<video>"

Basierend darauf wird die Abtastrate bestimmt (siehe Tabelle) und geprüft, ob eine Tonspur vorhanden ist (fehlt sie, wird P1 übersprungen und stattdessen aus Bildern abgeleitet).

DauerAbtaststrategieMax. FramesErläuterung
≤2 min1 Frame/2s + Schlüsselstellen 1 Frame/s60–80Kurzvideos/Werbung, alle Details
2–10 min1 Frame/5s60–100Kurzgeschichten
10–30 min1 Frame/10s + Hook-Abschnitte verdichtet80–120Kurzserien/lange Erklärvideos, ersten & letzten 90s mit 1 Frame/3s
>30 min1 Frame/20s + abschnittsweise Stichprobe100–150Nur Kapitelrekonstruktion, erst Gliederung dann tiefer eintauchen

Kostenregel: Der Aufruf von ViewImage ist auf maximal 60 Mal pro Aufgabe beschränkt, 8 Bilder parallel; falls nicht genug Frames, priorisiere „Mimikwechsel, Produkt-Nahaufnahme, Requisiten-Nahaufnahme, Untertitelfolie“.

P1 – Vollständige Audiotranskription

ffmpeg -y -v error -i "<video>" -vn -ac 1 -ar 16000 -b:a 96k audio.mp3

Transkribieren mit AudioTranscribe (unterstützt mp3/wav/m4a/mp4, ≤1 GB oder 5 Std.). Ausgabe: Text mit Zeitstempeln [Start, Ende, Sprecher-ID] – das ist das Skelett aller folgenden Zeitleisten.

Achtung: Die Sprecher-ID ist nur eine Cluster-Nummer, nicht die Rolle. Sie muss durch Semantik, Tonfall und Bild gemeinsam bestimmt werden.

P2 – Frames extrahieren

# Zuerst Szenenerkennung (für szenenreiche Videos)
ffmpeg -y -v error -i "<video>" -vf "select='gt(scene,0.15)',showinfo" -vsync vfr -q:v 3 kf_%03d.jpg 2> scene_log.txt
grep -o "pts_time:[0-9.]*" scene_log.txt | head -100
  • Falls <10 Frames erkannt → Einzelkamera-Dauerschuss (Erklärvideo/Handlung) → gleichmäßige Extraktion verwenden: -vf "fps=1/10,scale=576:-1"
  • Schwelle auf 0.08 senken und nochmals versuchen; immer noch keine Szenenwechsel → Szenenerkennung abbrechen
  • Hochkant-Kurzvideos einheitlich mit scale=576:-1, gut genug für Mimik, ohne Tokens zu verschwenden

P3 – Batchweise Bildanalyse

Pro Batch 8 Frames parallel mit ViewImage, einheitliche Query-Vorlage (für Vergleichbarkeit):

Beschreibe diesen Hochkant-Videoframe: Personendarstellung, Mimik, Handlung, Szene, Kleidung, Untertiteltext, Bildkomposition

Wichtige Aspekte:

  • Personenbeziehungen (wer zerrt wen, wer verfolgt wen, wer wird mitgenommen, wer steigt in welches Auto) müssen durch Frames bestätigt werden – ASR verrät das nie; zwei gleichgeschlechtliche Erwachsene in derselben Szene: Cluster-ID nicht direkt als Rolle übernehmen
  • Untertiteltexte sind kostenlose, hochwertige Informationen (Serienlogo-Wasserzeichen, Markenname, Produkttext, Preis, Haftungsausschluss, Dialognamen) – Frame für Frame notieren; in Untertiteln auftauchende Namen (z.B. „Gu Chuan, hör auf zu trödeln“) kombiniert mit dem Bild, wer gezerrt wird, sind harte Beweise für die Zuordnung von Dialogen
  • Konstante Elemente (Wasserzeichen, Haftungsausschluss, Logo) notieren und in den Dokumentenkopf setzen
  • Die Sekundenzahl jedes Frames merken (kf_001 = 0s, kf_002 = 10s …), später für Szenenbeschreibungen benötigt

P3.5 – Untertitel-Raster: Ein sekundengenaues Dialog-Referenzraster (Erstbeweis für Sprecherzuordnung)

Bei Videos mit eingebrannten Untertiteln (Kurzserien/Werbeclips fast immer) zuerst die „offizielle Lösung“ der Dialoge abrufen:

# Pro Sekunde einen Frame des Untertitelstreifens extrahieren (erst einen Vollbild-Frame zur Positionsbestimmung, hier y=710 Höhe=140)
ffmpeg -y -v error -i "<video>" -vf "fps=1,crop=576:140:0:710,drawtext=fontfile='<font>':text='%{pts\:hms}':x=8:y=6:fontsize=24:fontcolor=white:box=1:[email protected],tile=3x10" -q:v 3 sub/grid%02d.jpg
  • 30 Frames/Bild → bei 14-minütigem Video ca. 29 Bilder, jedes per ViewImage auslesen: „Zeitstempel → Untertiteltext“
  • Blaue/weiße Rahmen kennzeichnen meist Erzähl-Overlays (z.B. „Die beiden mussten sich trennen“) – separat kategorisieren, nicht in Dialoge mischen
  • Zweizeilige Untertitel werden oft abgeschnitten (obere Hälfte verloren) – bei Zweifel den Vollbild-Frame dieser Sekunde prüfen

Dieses sekundengenaue Raster löst auf einen Schlag vier Problemtypen: fehlende Sätze, zusätzliche Sätze, falsche Schriftzeichen (er/sie), Zuordnung von Füllwörtern – bei Konflikt zwischen ASR und Untertitel: Untertiteltext vertrauen, dann Lippenbild-Frame für Sprecherentscheidung verwenden (Untertitel geben nicht an, wer spricht).

P4 – Skelett aufbauen: Dialogfluss in Szenenabschnitte gliedern

  1. ASR-Zeitstempel als Achse, nach Szenen-/Raumwechsel segmentieren (Ortswechsel, Gegenüberwechsel, Emotionswechsel)
  2. Jeder Abschnitt benennen: ⏱️ [mm:ss - mm:ss] Ereignisname (Funktionshinweis), z.B. [04:15 - 05:10] Sondierung am Pflegetisch · Lippenbalsam-Premiere
  3. Abschnittsanfang: > Szenenbeschreibung: (Licht, Bildkomposition, Hauptobjektposition, Standorte der Personen)
  4. Dialoge innerhalb des Abschnitts zeilenweise nach Zeit ordnen; bei Überlappungen getrennte Zeilen mit „(gleichzeitig mit X)“ markieren

P5 – Fünfdimensionale Anreicherung (fünf Tags unter jedem Dialog)

TagPflichtinhalt
🎙️ StimmeigenschaftenTonhöhenverlauf / Lautstärke / Geschwindigkeit / Atem (Hauchstimme·Bruch·Luftholen·Seufzer) / Betonung auf welchem Wort / Pause in Sekunden
😐 Mimikverlauf[Start]→[Mitte]→[Ende] drei Phasen, mit konkreten Bewegungen von Stirn, Augen, Mund, Nasenflügeln, Kiefer
👀 Blickkontakt【Subjekt】s Blick fällt auf 【Objekt namentlich】, Dauer; Blickbewegungen mit Pfad notieren
🙌 HandlungsdetailsHandhaltung, Körperrichtung, Bewegungsbahn, Interaktion mit Requisiten (Fingerknöchel weiß/geballt/ Finger zittern – solche Mikrobewegungen priorisieren)
🫧 Ausdrucks-AuraEin Satz, der den psychischen Zustand der Person in diesem Moment charakterisiert (Regieperspektive, nicht Wiederholung der Mimik)

Füllwörter einzeln analysieren: Ein „Hm“ muss notiert werden als nasaler oder kehliger Hauch, ob es ein höhnisches oder aufgebendes Lachen ist, und die Pause zum nächsten Satz – das entscheidet, wem es gehört.

P6 – Zweite Kreuzvalidierung (Kernwert dieses Skills, nicht überspringbar)

Problem: Eine einzige Transkription des gesamten Videos fasst oft die Worte zweier benachbarter Personen zu einem Abschnitt zusammen, schreibt er/sie als dasselbe Zeichen und wandelt Fragesätze in Aussagesätze um.

Vorgehen: 4–6 „hochriskante“ Abschnitte heraussuchen, segmentweise neu transkribieren und mit dem vollständigen Skript Zeile für Zeile vergleichen.

Merkmale eines Hochrisikoabschnitts (eins reicht zum Schneiden):

  • Abschnitt enthält Dialoge von ≥2 Figuren (insbes. Flüsternd, Streit, Menschenmenge)
  • Gleichgeschlechtliche Erwachsene in derselben Szene (Stimmen ähnlich, Cluster leicht zu einer ID zusammengefasst)
  • Vorkommen von „er/sie“ mit möglicher Verwechslung
  • Überlappende Sätze, Unterbrechungen, gleichzeitiges Sprechen
  • Abschied, Festhalten, Verfolgungsjagd, Absetzszene („wer wird mitgenommen, wer verfolgt“ werden leicht vertauscht)
  • Zeitstempelspanne >20 s und Sprecher-ID unverändert (bedeutet Zusammenfassung)
# 70–90 Sekunden-Segment schneiden (stille Grenzen vermeiden, 1 s Puffer vor und nach)
ffmpeg -y -v error -ss 15 -t 75 -i "<video>" -vn -ac 1 -ar 16000 -b:a 96k seg1.mp3

Jedes Segment mit AudioTranscribe transkribieren, dann nach folgender Tabelle auswerten:

AbweichungstypBewertungsmethodeBehandlung
Sprecher vertauschtPrüfen, ob im Segment die Sprecherpositionen abwechseln (A/B/A/B); dann mit Lippenbewegungen im Bild und Handlungslogik abgleichenMit Wechselmuster + Handlungslogik korrigieren, im Text 📌 Korrekturnotiz hinzufügen
er/sie verwechseltHomophone sind fast immer falsch, nach tatsächlichem Geschlecht der Bezugsperson umschreibenDirekt korrigieren, Originalzeichen nicht behalten
Fehlender Satz (im Gesamtskript fehlend)Im Segment tritt ein Satz auf, der im Hauptskript fehltEinfügen und Zeitlinie innerhalb des Abschnitts anpassen
Kombinierte Sätze trennenSubjekt und Prädikat in einem Satz inkonsistent („Geh schnell, hör auf zu trödeln, ich warte“)Nach Semantik in 2–3 Zeilen aufteilen, jeder Person zuordnen
Frage- vs. Aussagesatz falschEndtonhöhe steigend oder nicht, ob Semantik ein „?“ erfordertAnklagende Sätze mit „!“, nachfragende mit „?“
Überlagerung vs. gesprochene GedankenIm Segment: Ist die Tonquelle mit vorderen/hinteren Positionen durchgehend? Gibt es einen Tonspurwechsel?Durchgehende gleiche Position = gesprochene Gedanken leise, muss vermerkt werden als „Gegenüber hört nicht“ nicht als „innerer Monolog“
Handlungsrichtung vertauschtFrame prüfen: Wessen Hand hält wen fest? Wer steigt in welches Auto? Wen ruft der Untertitel an?Gesamten Abschnitt umkehren, im Text 📌 Korrekturnotiz mit Frame-Beweis angeben

Dritte Bildüberprüfung: Schlussfolgerungen zu Handlungsrichtung und Personenbeziehung (wer wird mitgenommen/wer verfolgt/wer zerrt wen) können nicht allein durch den Textabgleich in der zweiten Runde entschieden werden – es muss auf dicht extrahierte Frames (1 Frame/s) zurückgegriffen und mit späteren Selbstreferenzen im Dialog (z.B. „Vor 15 Jahren hast du mich weggezerrt“) verriegelt werden. Reales Beispiel in references/pitfalls.md #09.

Vierte Überprüfung am Untertitelraster: Vor der Auslieferung das sekundengenaue Untertitelraster aus P3.5 mit dem Skript zeilenweise abgleichen – alle Skriptzeilen, die nicht mit dem Untertiteltext übereinstimmen, sowie Sätze, die im Untertitel stehen, aber nicht im Skript, werden korrigiert/nachgetragen; Punkte mit Zuordnungszweifel werden durch Vollbild-Frames mit Lippenbewegung entschieden (Extraktionszeitpunkt = Sekunde des Untertitels). Zwei Spezialregeln:

  • Flashback-Töne überlagern: Nach dem Ende der Rückblende kann die Originalstimme auf das aktuelle Bild übertragen werden (z.B. aktuelle Mutter mit geschlossenen Lippen, aber Untertitel zeigt Kindheits-„Pssst“) – Zuordnung folgt der Tonspur, nicht dem Bild;
  • Untertitel-„sie“ muss nicht weiblich sein: Original-Untertitel verwechseln oft er/sie, nach Semantik und späteren Referenzen entscheiden, bei Zitierung des Originals jedoch den Originaltext beibehalten und kommentieren.

Validierungsprotokoll in die Auslieferung aufnehmen (Tabelle: Zeitpunkt / Original / Nach Korrektur / Begründung + Deckungsgrad + verbleibende Unsicherheiten) – das ist der Glaubwürdigkeitsnachweis des Skripts.

P7 – Auslieferung und Selbstprüfung

Ein einzelnes Markdown-Dokument erstellen, Struktur siehe references/script-template.md; vor der Abgabe jede Position der references/qc-checklist.md durchgehen.

Abschließend mit present_files präsentieren und im Antworttext angeben: Videoerkennungsergebnis (Titel/Kategorie/Dauer), Kernhandlung in einem Satz, Verkaufsstruktur, Anzahl der Korrekturen durch die Validierung.

Hilfsskript

scripts/extract_assets.sh erledigt in einem Schritt: Erkundung → Audio → Szenenerkennung → gleichmäßige Frame-Extraktion → Hochrisikosegment-Schnitt:

bash scripts/extract_assets.sh "<video>" "<outdir>" [Abstand Sekunden]
# Beispiel: bash scripts/extract_assets.sh ./v.mp4 ./frames 10

Skriptausgabe: probe.txt, audio.mp3, kf_*.jpg (mit Nummer↔Sekunden-Tabelle), scene_log.txt und druckt eine Arbeitslasttabelle mit Framezahl/Dauer.

Referenzdateien

  • references/script-template.md — Vollständiges Dokumentengrundgerüst (Rollenarchiv / Tonfall- und Ausdrucksübersicht / Segmentweise Fünfdimensionale / Verkaufsmethodik / Performance-Anleitung / Validierungsprotokoll)
  • references/qc-checklist.md — 16-Punkte-Checkliste vor Auslieferung
  • references/pitfalls.md — 10 häufige Fehler und Maßnahmen (mit echten Beispielen)

Ausgabekonventionen

  • Zeitformat einheitlich mm:ss (über 1 Std. hh:mm:ss); Abschnittsüberschriften enthalten das Intervall, innerhalb des Dialogblocks kann auch die exakte Sekunde notiert werden
  • Rollennamen einheitlich: Erstes Auftreten vollständig, im Text mit 【】, z.B. 【Gu-Mutter】
  • Dieselbe Rolle mit unterschiedlicher Identität (Pseudonym/Kindheit/Erwachsener) muss separat archiviert werden, mit Korrespondenz klar in der Akte vermerkt
  • Produktnamen, Markennamen, Preise müssen Frame-für-Frame mit Untertiteln abgeglichen werden (ASR verwechselt Markennamen oft, z.B.: „胡萝卜素“ → „胡萝卜素“)

Verwandte Skills