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)
- 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.
- 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“.
- Mimik als Verlauf notieren: Im Format
[Start] → [Mitte] → [Ende](z.B. aufgerissene Augen → Pupillen geweitet → Augenbrauen entspannen, Lippen zusammengepresst). Kein statisches Adjektiv. - 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.
- 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).
| Dauer | Abtaststrategie | Max. Frames | Erläuterung |
|---|---|---|---|
| ≤2 min | 1 Frame/2s + Schlüsselstellen 1 Frame/s | 60–80 | Kurzvideos/Werbung, alle Details |
| 2–10 min | 1 Frame/5s | 60–100 | Kurzgeschichten |
| 10–30 min | 1 Frame/10s + Hook-Abschnitte verdichtet | 80–120 | Kurzserien/lange Erklärvideos, ersten & letzten 90s mit 1 Frame/3s |
| >30 min | 1 Frame/20s + abschnittsweise Stichprobe | 100–150 | Nur 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.08senken 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
ViewImageauslesen: „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
- ASR-Zeitstempel als Achse, nach Szenen-/Raumwechsel segmentieren (Ortswechsel, Gegenüberwechsel, Emotionswechsel)
- Jeder Abschnitt benennen:
⏱️ [mm:ss - mm:ss] Ereignisname (Funktionshinweis), z.B.[04:15 - 05:10] Sondierung am Pflegetisch · Lippenbalsam-Premiere - Abschnittsanfang:
> Szenenbeschreibung:(Licht, Bildkomposition, Hauptobjektposition, Standorte der Personen) - 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)
| Tag | Pflichtinhalt |
|---|---|
| 🎙️ Stimmeigenschaften | Tonhö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 |
| 🙌 Handlungsdetails | Handhaltung, Körperrichtung, Bewegungsbahn, Interaktion mit Requisiten (Fingerknöchel weiß/geballt/ Finger zittern – solche Mikrobewegungen priorisieren) |
| 🫧 Ausdrucks-Aura | Ein 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:
| Abweichungstyp | Bewertungsmethode | Behandlung |
|---|---|---|
| Sprecher vertauscht | Prüfen, ob im Segment die Sprecherpositionen abwechseln (A/B/A/B); dann mit Lippenbewegungen im Bild und Handlungslogik abgleichen | Mit Wechselmuster + Handlungslogik korrigieren, im Text 📌 Korrekturnotiz hinzufügen |
| er/sie verwechselt | Homophone sind fast immer falsch, nach tatsächlichem Geschlecht der Bezugsperson umschreiben | Direkt korrigieren, Originalzeichen nicht behalten |
| Fehlender Satz (im Gesamtskript fehlend) | Im Segment tritt ein Satz auf, der im Hauptskript fehlt | Einfügen und Zeitlinie innerhalb des Abschnitts anpassen |
| Kombinierte Sätze trennen | Subjekt 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 falsch | Endtonhöhe steigend oder nicht, ob Semantik ein „?“ erfordert | Anklagende Sätze mit „!“, nachfragende mit „?“ |
| Überlagerung vs. gesprochene Gedanken | Im 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 vertauscht | Frame 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 Auslieferungreferences/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.: „胡萝卜素“ → „胡萝卜素“)