Video Use
Grundsatz
- LLM denkt aus rohem Transkript + visuellen Elementen bei Bedarf. Das einzige abgeleitete Artefakt, das seinen Platz verdient, ist ein dichtes phrasenbasiertes Transkript (
takes_packed.md). Alles andere – Füllwörter-Tagging, Retake-Erkennung, Shot-Klassifizierung, Betonungsbewertung – leitest Du zum Entscheidungszeitpunkt ab. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis. - Audio ist primär, Visuelles folgt. Schnittkandidaten stammen von Sprachgrenzen und Stillelücken. Tauche nur an Entscheidungspunkten ins Visuelle ein. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis.
- Fragen → Bestätigen → Ausführen → Iterieren → Speichern. Rühre den Schnitt nicht an, bis der Benutzer die Strategie in einfachem Englisch bestätigt hat.
- Verallgemeinern. Gehe nicht von einer bestimmten Videoart aus. Schaue Dir das Material an, frage den Benutzer und editiere dann. → Überprüfen: Diff entspricht gewünschter Änderung.
- Künstlerische Freiheit ist der Standard. Jeder spezifische Wert, Preset, Schriftart, Farbe, Dauer, Tonhöhenstruktur und Technik in diesem Dokument ist ein ausgearbeitetes Beispiel aus einem bewährten Video – keine Vorschrift. Lies sie, um zu verstehen, was möglich ist und warum jedes funktioniert hat. Triff dann Deine eigenen geschmacklichen Entscheidungen basierend auf dem, was das Material tatsächlich ist und was der Benutzer tatsächlich will. Die einzigen Dinge, die Du UNBEDINGT tun musst, stehen im Abschnitt Harte Regeln. Alles andere liegt bei Dir. → Überprüfen: Datei-Inhalt entspricht erwarteter Struktur.
- Erfinde frei. Wenn das Material eine hier nicht beschriebene Technik erfordert – Split-Screen, Bild-im-Bild, Identitätskarten im unteren Drittel, Reaktionsschnitte, Speed Ramps, Standbilder, Überblendungen, Match Cuts, L-Cuts, J-Cuts, Speed Ramps über Atem, was auch immer – baue sie ein. Die Helfer sind ffmpeg und PIL. Sie können alles tun, was das Format unterstützt. Warte nicht auf Erlaubnis. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis.
- Überprüfe Deine eigene Ausgabe, bevor Du sie dem Benutzer zeigst. Wenn Du es nicht ausliefern würdest, zeige es nicht.
Harte Regeln (Produktionskorrektheit – nicht verhandelbar)
Dies sind die Dinge, bei denen Abweichungen zu stillen Fehlern oder fehlerhaften Ausgaben führen. Sie sind kein Geschmack, sondern Korrektheit. Merke sie Dir.
- Untertitel werden ZULETZT in der Filterkette angewendet, nach jedem Overlay. Sonst verstecken Overlays die Untertitel. Stiller Fehler. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis.
- Segmentweises Extrahieren → verlustfreies
-c copy-Konkatenieren, nicht Single-Pass-Filtergraph. Sonst kodiert man jedes Segment doppelt, wenn Overlays hinzugefügt werden. - 30ms Audio-Fades an jeder Segmentgrenze (
afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03). Sonst hörbare Knackser an jedem Schnitt. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis. - Overlays verwenden
setpts=PTS-STARTPTS+T/TB, um das Frame 0 des Overlays auf seinen Fensterstart zu verschieben. Sonst siehst Du die Mitte der Animation während des Overlay-Fensters. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis. - Master-SRT verwendet Ausgabe-Zeitachsen-Offsets:
output_time = word.start - segment_start + segment_offset. Sonst sind Untertitel nach dem Segment-Konkat verschoben. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis. - Schneide niemals innerhalb eines Wortes. Raste jeden Schnittrand auf eine Wortgrenze aus dem Scribe-Transkript ein. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis.
- Polstere jeden Schnittrand. Arbeitsfenster: 30–200 ms. Scribe-Zeitstempel driften 50–100 ms – Polsterung absorbiert die Drift. Enger für temporeiche, lockerer für filmische Schnitte. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis.
- Nur wortgenaue ASR (wörtlich). Niemals SRT-/Phrasen-Modus (verliert Sub-Sekunden-Lückendaten). Niemals normalisierte Füllwörter (verliert redaktionelles Signal). → Überprüfen: Diff entspricht gewünschter Änderung.
- Cache Transkripte pro Quelle. Niemals neu transkribieren, es sei denn, die Quelldatei selbst hat sich geändert. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis.
- Parallele Sub-Agenten für mehrere Animationen. Niemals sequentiell. Spawne N auf einmal über das
Agent-Tool; die Gesamtzeit ≈ die langsamste Animation. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis. - Strategiebestätigung vor der Ausführung. Rühre den Schnitt nicht an, bis der Benutzer den Plan in einfachem Englisch genehmigt hat. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis.
- Alle Sitzungsausgaben in
<videos_dir>/edit/. Niemals innerhalb desvideo-use/-Projektverzeichnisses schreiben. → Überprüfen: Ausgabe existiert + fehlerfreies Parsen.
Alles andere in diesem Dokument ist ein ausgearbeitetes Beispiel. Weiche ab, wenn das Material es erfordert.
Verzeichnislayout
Die Fähigkeit lebt in video-use/. Das Benutzermaterial liegt dort, wo der Benutzer es ablegt. Alle Sitzungsausgaben gehen nach <videos_dir>/edit/.
<videos_dir>/
├── <Quelldateien, unberührt>
└── edit/
├── project.md ← Gedächtnis; wird bei jeder Sitzung ergänzt
├── takes_packed.md ← phrasenbasierte Transkripte, primäre Leseansicht des LLMs
├── edl.json ← Schnittentscheidungen
├── transcripts/<name>.json ← gecachtes rohes Scribe-JSON
├── animations/slot_<id>/ ← Quellen + Render + Begründung pro Animation
├── clips_graded/ ← segmentweise Extrakte mit Grading + Fades
├── master.srt ← Untertitel auf Ausgabe-Zeitachse
├── downloads/ ← yt-dlp-Ausgaben
├── verify/ ← Debug-Frames / Timeline-PNGs
├── preview.mp4
└── final.mp4
Einrichtung
ELEVENLABS_API_KEYin.envim Projektstamm oder als Umgebungsvariable. Frage und schreibe.env, falls fehlend.ffmpeg+ffprobeim PATH.- Python-Abhängigkeiten:
pip install -e .. yt-dlp,manim, Remotion werden nur bei erster Nutzung installiert.- Diese Fähigkeit enthält
skills/manim-video/. Lese dessen SKILL.md, wenn Du einen Manim-Slot baust.
Helfer
transcribe.py <video>– einzelner Scribe-Aufruf.--num-speakers Noptional. Gecached.transcribe_batch.py <videos_dir>– parallele Transkription mit 4 Workern. Für mehrere Takes.pack_transcripts.py --edit-dir <dir>–transcripts/*.json→takes_packed.md(phrasenbasiert, Bruch bei Stille ≥ 0,5 s).timeline_view.py <video> <start> <end>– Filmstreifen + Wellenform-PNG. Bei Bedarf visuelles Detail. Kein Scan-Tool – verwende es an Entscheidungspunkten, nicht ständig.render.py <edl.json> -o <out>– segmentweise Extraktion → Konkatenation → Overlays (PTS-verschoben) → Untertitel ZULETZT.--previewfür schnelles 720p.--build-subtitleszum Erzeugen von master.srt inline.grade.py <in> -o <out>– ffmpeg-Filterketten-Grading. Presets +--filter '<raw>'für benutzerdefinierte.
Erstelle für Animationen <edit>/animations/slot_<id>/ mit Bash und starte einen Sub-Agenten über das Agent-Tool.
Der Prozess
-
Inventur.
ffprobefür jede Quelle.transcribe_batch.pyauf dem Verzeichnis.pack_transcripts.pyzur Erstellung vontakes_packed.md. Muster von ein oder zweitimeline_views für einen visuellen ersten Eindruck. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis. -
Vorscan auf Probleme. Ein Durchlauf von
takes_packed.md, um verbale Ausrutscher, offensichtliche Versprecher oder zu vermeidende Formulierungen zu notieren. Einfache Liste, einfließen lassen in das Editor-Briefing. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis. -
Gespräch. Beschreibe, was Du siehst, in einfachem Englisch. Stelle durch das Material geprägte Fragen. Sammle: Inhaltstyp, Ziellänge/Seitenverhältnis, ästhetische/markenspezifische Ausrichtung, Pacing-Gefühl, Momente die unbedingt erhalten bleiben müssen, Momente die unbedingt geschnitten werden müssen, Animations- und Grading-Präferenzen, Untertitel-Bedarf. Verwende keine feste Checkliste – die richtigen Fragen sind jedes Mal anders. → Überprüfen: alle Tests bestanden.
-
Strategie vorschlagen. 4–8 Sätze: Form, Take-Auswahl, Schnittrichtung, Animationsplan, Grading-Richtung, Untertitel-Stil, Längenschätzung. Warte auf Bestätigung. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis.
-
Ausführen. Erstelle
edl.jsonüber das Editor-Sub-Agenten-Briefing. Tauche bei mehrdeutigen Momenten intimeline_viewein. Baue Animationen in parallelen Sub-Agenten. Wende Grading segmentweise an. Komponiere überrender.py. → Überprüfen: Befehls-Exit-Code 0. -
Vorschau.
render.py --preview. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis. -
Selbstbewertung (bevor Du es dem Benutzer zeigst). Führe
timeline_viewauf dem gerenderten Output (nicht den Quellen) an jeder Schnittgrenze aus (±1,5 s Fenster). Überprüfe jedes Bild auf: → Überprüfen: Befehls-Exit-Code 0- Visuelle Diskontinuität / Blitz / Sprung am Schnitt
- Wellenform-Spitze an der Grenze (Audiopop, der am 30-ms-Fade vorbeigeschlüpft ist)
- Untertitel hinter einem Overlay versteckt (Regel-1-Verstoß)
- Overlay falsch ausgerichtet oder falsche Frames zeigend (Regel-4-Verstoß)
Überprüfe auch Stichproben: erste 2 s, letzte 2 s und 2–3 Zwischenpunkte – auf Grading-Konsistenz, Untertitel-Lesbarkeit, Gesamtkohärenz. Führe
ffprobeauf dem Output aus, um zu prüfen, ob die Dauer der EDL-Erwartung entspricht.Wenn etwas fehlschlägt: reparieren → neu rendern → neu bewerten. Begrenze auf 3 Selbstbewertungsdurchläufe – wenn nach 3 Durchläufen immer noch Probleme bestehen, melde sie dem Benutzer, anstatt ewig zu schleifen. Zeige die Vorschau erst, wenn die Selbstbewertung bestanden ist.
-
Iterieren + Speichern. Feedback in natürlicher Sprache, Neuplanung, Neurendern. Niemals neu transkribieren. Finales Rendern nach Bestätigung. Anhängen an
project.md. → Überprüfen: Schritt-Output entspricht erwartetem Ergebnis.
Schnitt-Handwerk (Techniken)
- Audio-zuerst. Schnittkandidaten von Wortgrenzen und Stillelücken.
- Höhepunkte erhalten. Lachen, Pointen, Betonungsmomente. Verlängere über Pointen hinaus, um Reaktionen einzuschließen – das Lachen IST der Takt.
- Sprecherwechsel profitieren von Luft zwischen den Äußerungen. Übliche Werte: 400–600 ms. Weniger für temporeiche, mehr für filmische Schnitte. Geschmackssache.
- Audio-Ereignisse als Signale.
(lacht),(seufzt),(Applaus)markieren Takte. Verlängere darüber hinaus. - Stillelücken sind Schnittkandidaten. Stille ≥400 ms ist meistens der sauberste Schnitt. 150–400 ms Phrasengrenzen sind mit einem visuellen Check nutzbar. <150 ms ist unsicher (mitten in einer Phrase).
- Beispiel für Schnittpolsterung (das mitgelieferte Launch-Video): 50 ms vor dem ersten behaltenen Wort, 80 ms nach dem letzten. Enger für temporeiche Montage, lockerer für Dokumentation. Bleibe im 30–200 ms Arbeitsfenster (Harte Regel 7).
- Bewerte Audio und Video niemals unabhängig. Jeder Schnitt muss auf beiden Spuren funktionieren.
Das gepackte Transkript (primäre Leseansicht)
pack_transcripts.py liest alle transcripts/*.json und erzeugt eine Markdown-Datei, in der jeder Take als Liste von phrasenbasierten Zeilen dargestellt wird, jede mit ihrem [Start-Ende]-Zeitbereich. Phrasen werden bei jeder Stille ≥ 0,5 s ODER Sprecherwechsel unterbrochen. Dies ist das Artefakt, das der Editor-Sub-Agent liest, um Schnitte auszuwählen – es bietet Wortgrenzen-Genauigkeit allein aus Text bei 1/10 der Token des rohen JSONs.
Beispielzeile:
## C0103 (Dauer: 43,0s, 8 Phrasen)
[002.52-005.36] S0 Neunzig Prozent von dem, was ein Web-Agent tut, ist völlig verschwendet.
[006.08-006.74] S0 Wir haben das behoben.
Editor-Sub-Agenten-Briefing (für Multi-Take-Auswahl)
Wenn die Aufgabe darin besteht, "den besten Take jedes Beats über mehrere Clips hinweg auszuwählen", starte einen dedizierten Sub-Agenten mit einem Briefing, das wie folgt geformt ist. Die Struktur ist tragend; das Pitch-Shape-Beispiel ist es nicht.
Du editierst ein <Typ>-Video. Wähle den besten Take jedes Beats aus und
setze sie chronologisch nach Beat zusammen, nicht nach Quellclip-Reihenfolge.
EINGABEN:
- takes_packed.md (zeitannotierte phrasenbasierte Transkripte aller Takes)
- Produkt-/Erzählkontext: <2 Sätze vom Benutzer>
- Sprecher: <Name, Rolle, Stilhinweis zur Vortragsweise>
- Erwartete Struktur: <wähle einen Archetyp oder erfinde einen>
- Zu vermeidende verbale Ausrutscher: <Liste aus dem Vorscan-Durchlauf>
- Ziellaufzeit: <Sekunden>
Häufige Struktur-Archetypen (wähle, passe an oder erfinde):
- Tech-Launch / Demo: HOOK → PROBLEM → LÖSUNG → NUTZEN → BEISPIEL → CTA
- Tutorial: EINFÜHRUNG → EINRICHTUNG → SCHRITTE → FALLSTRICKE → ZUSAMMENFASSUNG
- Interview: (FRAGE → ANTWORT → NACHFRAGE) wiederholen
- Reise / Event: ANKUNFT → HÖHEPUNKTE → RUHIGE MOMENTE → ABREISE
- Dokumentation: THESE → BEWEISE → GEGENPOSITION → FAZIT
- Musik / Performance: EINFÜHRUNG → STROPHE → REFRAIN → BRÜCKE → OUTRO
- Oder erfinde Deinen eigenen.
REGELN:
- Start-/Endzeiten müssen auf Wortgrenzen des Transkripts fallen.
- Polstere Schnittränder (Arbeitsfenster 30–200 ms).
- Bevorzuge Takes mit natürlicher Betonung und gutem Tempo.
- Fülle Lücken mit B-Roll oder Animationen, wenn es die Struktur erfordert.
- Gib am Ende einen JSON-ähnlichen Ausgabeplan aus mit: Quellclip, Start, Ende, vorgeschlagenem Overlay/Animation.
Animationen
- Lege pro Animation ein eigenes Verzeichnis
<edit>/animations/slot_<id>/an. - Jeder Slot kann ein
Bash-Tool mit einem Manim- oder Remotion-Skript verwenden – starte es mit&für Parallelität. - Verwende Sub-Agenten für Animationen über das
Agent-Tool mit einem Briefing. Weise den Sub-Agenten an, "eine Animation zu erstellen, die zeigt, in ein Verzeichnis zu rendern und dem Benutzer die Ausgabe zu zeigen". Der Hauptagent kann sich dann auf den Schnitt konzentrieren. - Die
SKILL.mdinskills/manim-video/beschreibt die Manim-Integration.
Skalierung / Qualitätssicherung
- Vorlage für
verify/-Ausgaben:timeline_view.pyerzeugt PNG-Filmstreifen + Wellenform. Prüfe an den Schnittgrenzen auf visuelle und auditive Fehler. - Parallelität der Animationen: Alle Slots gleichzeitig starten. Warte dann auf alle. Ergebnis: Die Gesamtzeit ≈ der langsamste Slot, nicht die Summe.
- Überprüfung der Ausgabezeitachse:
ffprobe+ffmpeg -f null -auf der gerenderten Datei. Prüfe, ob die Dauer der EDL + Padding entspricht. - Grenzfälle: Keine Stille (durchgehendes Sprechen) → weiche Schnitte bei Atempausen oder Phrasengrenzen. Stille am Anfang/Ende → trimme auf die erste/letzte Äußerung. Sehr lange Takes → unterteile in logische Beats.
Die Rolle von project.md
project.md im edit/-Verzeichnis ist das Sitzungsgedächtnis. Bei jedem Ausführen dieses Skills (oder jedes Editor-Sub-Agenten) wird eine kurze Zusammenfassung dessen, was getan wurde und warum, angehängt. Dies verhindert, dass der Agent den Kontext zwischen Sitzungen verliert und vermeidet redundante Fragen.
Dieses Skill-Dokument wurde mit dem Anspruch erstellt, eine vollständige, aber flexible Videobearbeitungsfähigkeit für KI-Agenten zu definieren. Feedback und Verbesserungen sind willkommen.