Communitygithub.com

BigBeeCN/vertical-talking-head-edit

Schnitt von vertikalen Talking-Head-Kurzvideos (Windows + Codex): Aus bestehenden Aufnahmen (Talking-Head, B-Roll) wird ein 9:16 Kurzvideo für Douyin, Video Account oder Kuaishou (30–60 Sekunden) erstellt – inklusive Jianying-Entwurf, Untertitel, Soundeffekten, Musik, Cover und Schnitt von Atempausen.

Was ist vertical-talking-head-edit?

Dieses Skill dient der automatisierten Nachbearbeitung von vertikalen Kurzvideos (9:16) im Talking-Head-Stil, wie sie auf Plattformen wie Douyin, Video Account und Kuaishou üblich sind. Es ist speziell für Windows-Umgebungen mit Codex (oder kompatiblen KI-Agenten) konzipiert und nutzt Jianying (剪映) als primäre Schnittsoftware. Der Skill verarbeitet vorgefertigte Aufnahmen (Talking-Head + B-Roll), erstellt einen detaillierten Schnittplan (spec.json), schneidet Atemgeräusche und Füllwörter heraus, generiert Untertitel mit zeitgenauen Timestamps, fügt Soundeffekte und Musik hinzu, kalibriert die Lautstärke auf -14 LUFS und liefert entweder einen Jianying-Entwurf oder ein fertiges MP4 mit transparenten Overlays (ProRes 4444). Der Workflow ist stark regelbasiert mit klaren Qualitätskriterien: Jeder Text auf dem Bildschirm muss auf die Original-Aufnahme rückverfolgbar sein, Effekte sind gestaffelt (Standard vs. Highlight), und die Audiodynamik wird präzise gesteuert. Der Skill enthält umfangreiche Prüfungen (QC-Checkliste, Referenzdateien) und vermeidet typische Fallstricke wie HDR-Farbverschiebung, Whisper-Halluzinationen oder falsche Timing-Annahmen.

Funktioniert mit~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/BigBeeCN/Video-Edit-Skills/tree/HEAD/.agents/skills/vertical-talking-head-edit

In Ihrer bevorzugten KI fragen

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

Dokumentation

Schnitt von vertikalen Talking-Head-Kurzvideos (Windows + Codex + Jianying)

Anwendungsfall: Sie haben nur vorhandenes Material (Talking-Head + B-Roll) und möchten daraus ein 30–50 Sekunden langes, 1080×1920 vertikales Kurzvideo schneiden – der Cutter kann es dann in Jianying finalisieren oder direkt ausliefern.

Die harten (unveränderlichen) Regeln finden Sie in references/AGENTS_rules.md. Fügen Sie diese vor Arbeitsbeginn in Ihr AGENTS.md ein. Diese Datei beschreibt nur den Ablauf.

Eingabe

  • Materialverzeichnis (nur lesend – die Originale werden nie verändert; kopieren Sie alles zuerst in ein Arbeitsverzeichnis).
  • Die persönlichen Stil-Vorlieben des Cutters (falls vorhanden). Die vom Cutter genannten Gewohnheiten gelten als harte Standards; Referenzvideos dienen nur als Inspirationsquelle – Techniken übernehmen, aber keine Parameter – bei Konflikten zählt der Cutter.
  • Optional: Referenzvideos, Position des Markenlogos, CTA-Text für das Ende (keine ungeprüften Telefonnummern oder Adressen schreiben).

Ausgabe

  • spec.json (Shot-Liste – die einzige Schnittgrundlage), Rohschnitt oder fertiges MP4, .srt, QC-Bildkollage pro Sekunde, QC-Bericht.
  • Route A zusätzlich: Jianying-Entwurf; Route B zusätzlich: Transparente Overlays als ProRes 4444 .mov.

Schritt 0: Umgebungsprüfung (ohne Bestätigung kein Start)

Führen Sie die Prüfung gemäß references/windows_env.md durch: ffmpeg Vollversion (mit zscale, tonemap, prores_ks), Python 3.10/3.11, faster-whisper + whisperX, Playwright + Chromium + die benötigte chinesische Schriftart, optional demucs / RVM; das Jianying-Entwurfsverzeichnis muss in der Konfiguration eingetragen und zu writable_roots hinzugefügt sein. Die Codex-Sandbox ist standardmäßig offline – Modelle und Abhängigkeiten müssen vorab installiert sein. Wenn etwas fehlt, melden Sie es – führen Sie keine Schritte ohne Voraussetzungen aus. Die genauen Befehle für jeden Schritt finden Sie in references/windows_commands.md.

Schritt 1: Materialerfassung

  1. ffprobe für jede Datei: Auflösung, Bildrate (variabel?), Rotation, Dauer, Farbübertragung (HLG/PQ = HDR). Als inventory.csv ablegen.
  2. Keine SDR-Zwischendateien exportieren: Konvertierung bei jedem Frame-Zugriff in der Filterkette. Allen Materialien fps=30 hinzufügen; bei HDR-Material beginnt die Frame-Lese-Filterkette mit HDR->SDR-Konvertierung – sonst wirkt das Bild grau – gilt auch für Cover-Frames (Befehle in windows_commands.md Abschnitt 2).
  3. Von jedem Clip ein Thumbnail erstellen und mit Tags versehen (Inhalt, Personen, nutzbare Intervalle, Überblendungen/Schwarz/Start-Dunkelheit, fremde Marken). Nicht nutzbare Clips und Intervalle markieren.
  • Prüfen: Jeder Clip hat Tags; bei Clips mit Farbübertragung arib-std-b67 oder smpte2084 beginnt die Frame-Lese-Filterkette mit HDR-Konvertierung.

Schritt 2: Transkription und Korrektur

  1. faster-whisper grobes Transkript: medium-Modell, device='cpu', compute_type='int8', language='zh', vad_filter=True, word_timestamps=True, initial_prompt mit Fachvokabular. VAD überspringt Sätze – daher einen zweiten Durchlauf ohne VAD, mit condition_on_previous_text=False.
  2. Manuell das gesamte Transkript mit dem Audio abgleichen: Fachbegriffe, Zahlen, gleichklingende falsche Zeichen; Whisper erfindet manchmal Sätze, die nie gesprochen wurden – löschen. Unverständliche Wörter direkt aus dem Audio entfernen – nicht raten.
  3. Vor dem Transkribieren zuerst mit ffmpeg auf 16 kHz mono WAV konvertieren, dann an whisper übergeben. Danach das korrigierte Transkript mit whisperX für erzwungene Alignierung verwenden (Ergebnis in das align-Feld von spec schreiben), um wortgenaue Startpunkte zu erhalten (Toleranz 0–3 Frames). Die Endzeiten von whisperX sind unzuverlässig – Endpunkte mit Energieerkennung bestimmen.
  • Prüfen: Keine ungeprüften Fachbegriffe oder Zahlen im Transkript; jeder Satz hat einen wortgenauen Startpunkt.

Schritt 3: Narrative Neustrukturierung (erst die Story, dann die Effekte)

  1. Die erste Sekunde muss ein Hook sein: „Kontrast + Ergebnis“ – mit Originalzitat. Keine B-Roll oder Logos am Anfang.
    • Der Hook kann zwei nicht aufeinanderfolgende Originalzitate kombinieren – jeder Teil muss src_t haben; die Bedeutung darf nicht verändert werden.
    • Zwei Optionen für den Ton (in spec festhalten): Der erste Satz startet normal, der große Text liegt darüber; oder der Ergebnissatz (≤3 Sekunden) wird als Cold Open nach vorne gezogen, dann normal weiter.
  2. Sätze löschen, die die Geschichte nicht voranbringen (Slogans, Vorbereitungen, wiederholte Aussagen). Ziel: 30–50 Sekunden.
  3. 3–4 narrative Wendepunkte markieren (Anfangshook / Szenenwechsel / Höhepunkt-Ergebnis / Abschluss-Kernaussage). Highlights nur an diesen Stellen setzen; der Höhepunkt bekommt die stärkste Wirkung, der Anfang die zweitstärkste. Zwei Highlights mindestens 6 Sekunden auseinander; bei ca. 30 Sekunden 3 Highlights, bei ca. 50 Sekunden 4.
  • Prüfen: Jeder Text auf dem Bildschirm ist im Transkript mit Originalzitat und Timestamp auffindbar – Kontext prüfen (dasselbe Wort kann in verschiedenen Sätzen unterschiedliche Bedeutung haben).

Schritt 4: Shot-Liste spec.json schreiben – vom Benutzer bestätigen lassen

Felddefinitionen in references/spec_schema.md, Beispiel-Schlüsselwortkategorien in references/kw_class.example.json (Die Wörter dort stammen aus einem bestimmten Projekt – bei neuen Projekten neu schreiben). Jeder Abschnitt enthält: Quellmaterial mit In/Out-Punkten, Layout, Untertitel, kw_class, Effektvoreinstellungen, B-Roll, Soundeffekte, Musikabschnitte, src_t (Original-Timestamps). Vor dem Rendern die Shot-Liste dem Benutzer zur Bestätigung vorlegen.

Schritt 5: Schnitt

  1. In/Out-Punkte mit 10-ms-Frame-RMS-Energieerkennung (nicht Whisper-Endzeiten). Atemgeräusche sauber entfernen: Einatmungen, Füllwörter – nichts bleibt.
    • Bewährte Methode: Nach Energie schneiden, Schwellwert max(10. Perzentil + 14 dB, −48 dBFS). 3 aufeinanderfolgende 10-ms-Fenster gelten als Sprachbeginn, 0,10 s Vorlauf, 0,14 s Nachlauf; dann manuell nachjustieren. Prüfen: Die kumulierte Dauer von Abschnitten unter −42 dBFS auf beiden Seiten eines Schnitts soll ≤90 ms betragen.
    • Cutter-Gewohnheit als Ziel: Vor jedem Wortanfang nur 1–2 Frames (≤67 ms) – noch nicht getestet (ausstehend). Testmethode: Mit demucs die Stimme isolieren, vom Schnittpunkt bis zum Start von 3 aufeinanderfolgenden 10-ms-Fenstern über −42 dBFS messen; jeder Schnittpunkt ≤67 ms, der erste Konsonant wird nicht abgeschnitten, der geschnittene Abschnitt erneut durch ASR laufen lassen – ohne abgeschnittene Wörter; erst dann als Standard übernehmen.
    • Optional: Eine Vergleichsversion mit 2–3 Frames Pause zwischen Sätzen für den Cutter erstellen.
  2. Framegenauer Export jedes Segments: -ss vor -i, -vf mit fps=30, -frames:v nf für feste Länge (nf = round((Aus − Ein) × 30)), libx264 -preset veryfast -crf 12, mit BT.709 Farbkennzeichnung drei Parameter; Audio sampelgenau zusammenfügen, jedes Segment 8 ms Einblendung / 15 ms Ausblendung gegen Knackgeräusche.
  3. Bei Jump Cuts derselben Kameraposition 1,08× Zoom-in/out; beim Wechsel zu B-Roll Kameraruckler + horizontales Blur.
  4. B-Roll nur dort einfügen, wo das Originalzitat den entsprechenden Inhalt erwähnt – nicht zur Temposteigerung.

Schritt 6: Untertitel-Effekte (zwei Stufen)

Standard-Stufe: Alle 1,5–2 Sekunden ein Effekt, maximaler Abstand ≤3 Sekunden, zurückhaltend.

  • Untere Bildschirmuntertitel: Weißer Text mit schwarzem Rand, eine Zeile ≤12 Zeichen, ganzer Satz erscheint (ob Schlüsselwörter farbig hervorgehoben werden – als Parameter – entscheidet der Cutter).
  • Hervorhebung als mittlere goldene große Schrift (Schlüsselwörter 1,75×, Zahlen 2×), zeichenweises Einblenden 115%→100%, 6–8 Frames; optional handgezeichnete Unterstreichungen/Kreise, Papierstruktur, weicher Schatten.
  • Optionale Techniken: Zahlen-Scrollen, reale Objekt-Overlays mit passenden Soundeffekten, auflistende Checklisten (Schriftgröße ≥ 1,2× Basisuntertitel, nach Zusammenführung vergrößern), vertikale parallele goldene Kernsätze (bei Erscheinen den gleichen Untertitel unten ausblenden), Identitäts-Tag am Anfang (nur einmal, mit Hinweis „nicht Originalzitat“).

Highlight-Stufe: 3–4 pro Video, in die Gesamtdichte eingerechnet – jede voll ausgestattet:

  • Große Schrift 75–85% der Bildbreite (85% ist Maximum, Sicherheitszone beachten); innerhalb 4 Frames auf 1,15–1,25 zoomen; 2–3 Frames Kamera-Wackeln mit Bewegungsunschärfe; Hintergrund um 6–30% abdunkeln, angemessen entsättigen (Parameter – Ziel: auf dem Handy bleibt die Person klar erkennbar) – Personenebene nicht farbkorrigieren; vorbereiteter komplexer Heavy-Hit-Soundeffekt (zählt als 1).
  • Intensitätsstufen: Der stärkste Zoom 1,25×, Wackeln 3 Frames; alle anderen Zoom 1,15×, Wackeln 2 Frames.
  • Dieselbe Technik nur einmal pro Video: Schrift hinter Person (Keying) / Text-Masken-Übergang / Vollbild-Zahlen-Scrollen + roter Stempel / vertikaler goldener Satz mit Sweep-Licht.
  • Schrift hinter Person: Schrift oberhalb der Schulterlinie platzieren – Hände und Gegenstände vermeiden; der Kopf muss die Schrift zu 25–30% überdecken (<15% auf dem Handy unsichtbar); vor dem weißen Rand zuerst versehentlich mitkeyte Objekte (z. B. Stuhl) aus der Maske entfernen.
  • Roter Stempel: Die einzige rote Farbe im ganzen Video, 30–40% der Bildbreite, innerhalb 3 Frames 150%→100% fallen + 2 Frames Wackeln.
  • Standbild: Nur in einer natürlichen Pause nach einem Satz (Stimme < −45 dB), den Frame mit dem am nächsten geschlossenen Mund wählen, ≤0,4 Sekunden, maximal eine Stelle im gesamten Video – der Heavy-Hit-Soundeffekt liegt am Standbild-Start. Dies ist die einzige Ausnahme von der Regel „keine Atempause“.
  • Alle Einblend-Animationen 1 Frame früher beginnen.

Schritt 7: Audio

  • Stimme: Hochpass 80 Hz → Rauschunterdrückung → leichtes EQ → Kompression.
  • Musik: Pro Kapitel wechselnd (Cutter-Gewohnheit), Überblendung 300–600 ms; Sidechain-Ducking während Sprache. Nur lizenzierte oder selbst erstellte Musik verwenden.
  • Soundeffekte: Im gesamten Video ca. 0,5 pro Sekunde, gleichmäßig verteilt. In jedem 4-Sekunden-Fenster 1–3 Effekte, mindestens 0,25 s Abstand zwischen zwei Effekten. Lautstärke: Standardmäßig 14 dB leiser als die Stimme (RMS) (db=-14); inhaltlich passende Soundeffekte bevorzugen vor generischen Pop-Geräuschen.
  • Lautheit: Erster Durchlauf loudnorm=I=-14:TP=-1.5:LRA=11 messen; zweiter Durchlauf mit Messwerten und linear=true, danach fest aresample=48000,alimiter=limit=0.7:attack=1:release=30:level=false; abschließend mit ebur128 nachmessen, Verstärkung um g = min(−14 − I, −2.9 − Peak) ergänzen. Ziel: −14 LUFS, True Peak ≤ −1 dBTP.

Schritt 8: Rendern und Auslieferung (eine der beiden Routen oder Kombination)

  • Route A: Jianying-Entwurf (Standard, wenn der Cutter nur Jianying verwendet). Codex erstellt Rohschnitt, Untertitel, Soundeffekte und Musik-Timing; mit pyJianYingDraft einen neuen Entwurf anlegen – der Cutter öffnet ihn in Jianying für Verpackung und Export. Einschränkungen und Hinweise in references/jianying_route.md. Die gesamte Route auf einer echten Windows-Maschine validieren.
  • Route B: Overlays (zwingend für Highlights). Effektebene mit HTML/Canvas, Playwright steuert das systemweit installierte Chrome zur framegenauen Erfassung transparenter PNGs: Viewport 1080×1920, device_scale_factor=1, Startparameter --font-render-hinting=none, vor Screenshot auf window.READY und document.fonts.ready warten, omit_background=True; alle Animationen als reine Funktionen der Zeit t. PNG-Sequenz mit -framerate 30 einlesen, als ProRes 4444 encodieren (-alpha_bits 16), dann mit ffmpeg overlay zusammensetzen. Die Overlay-Spur als Videospur in den Jianying-Entwurf legen: nicht getestet, ausstehend. ffmpeg drawtext kann kein zeichenweises Einblenden oder Schrift hinter Person.
  • Fallback-Auslieferung: Rohschnitt-MP4 + SRT + Shot-Liste – Verpackung erfolgt durch den Cutter in Jianying.
  • Vor dem Overlay das Hintergrundvideo leicht farbkorrigieren: eq=contrast=1.04:saturation=1.07.
  • Finales Encoding: libx264 -profile:v high -preset slow -crf 17 -maxrate 16M -bufsize 24M -g 60 -r 30 -pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709, AAC 192k, -movflags +faststart.

Schritt 9: Qualitätskontrolle (nur ausliefern, wenn alles bestanden)

Punkt für Punkt gemäß references/qc_checklist.md. Im Bericht nur das notieren, was durch Stichproben-Frames und Audio-Überprüfung bestätigt wurde – jede Angabe mit Zahl und Einheit; bei nicht Messbarem „nicht gemessen“ schreiben.

Cover

  • Arbeitsteilung: Der Redakteur erstellt Textvorschlag und Kandidaten-Frames (in das cover-Feld von spec schreiben), der Cutter Layout und Export (1080×1920 und 3:4).
  • Haupttitel aus Originalzitat kondensiert, Wortstellung anpassbar (z. B. „Eineinhalb Monate Schrauben drehen“) – keine Fakten hinzufügen, die nicht im Originalzitat stehen; ≤7 Zeichen, maximal 2 Zeilen. Unterer Tag: Ergebnis-Zahlen, 2–3 Sticker.
  • Titel und Gesicht im mittleren Bereich 1080×1440 (y 240–1680) platzieren – auf Douyin-Homepage wird das Raster auf 3:4 zugeschnitten.
  • Mindestens 3 Kandidaten-Frames mit Timestamp und Begründung – Skizze mit Hinweis „nicht endgültig“.
  • Den gesamten Clip in 0,5-Sekunden-Schritten nach Seitenprofil oder Gesichtsausdrücken scannen; Blickrichtung bestimmt das Layout (Person schaut nach links oben → Person unten rechts, Titel oben links); wenn Kleidung oder Hintergrund Text enthalten – kein Spiegelbild.

Erfolgskriterien

  • Dauer 30–50 Sekunden, die erste Sekunde ist ein Hook aus Originalzitat; jeder Text auf dem Bildschirm ist 100% auf das Originalzitat rückverfolgbar.
  • Standardeffekte maximaler Abstand ≤3 Sekunden; Highlights 3–4 mit abgestufter Intensität und einmaligen Techniken.
  • Soundeffekte ≈0,5 pro Sekunde, keine gleichzeitigen Überlagerungen; Timing-Treffer ≤2 Frames; −14 LUFS ±1, True Peak ≤ −1 dBTP.
  • Sicherheitszone: keine Überschreitungen; keine unerwarteten schwarzen Frames / eingefrorenen Frames; Text überdeckt keine Gesichter oder Markenlogos.
  • Der Benutzer hat die Shot-Liste bestätigt; alle Liefergegenstände vollständig.

Häufige Fallstricke → Gegenmaßnahmen

FallstrickGegenmaßnahme
HLG-Material wirkt grauzscale + tonemap=hable zu SDR konvertieren, Gamma etwa 1.12
Whisper-Wort-Timings zu früh / Endzeit ragt in StilleStartpunkt mit whisperX Align, Endpunkt mit Energieerkennung
VAD überspringt SätzeEinen zweiten Durchlauf ohne VAD laufen lassen
Text auf Bildschirm ist nicht Originalzitat / falscher KontextJeder Eintrag hat src_t, QC prüft einzeln gegen Transkript
Alle Effekte gleich intensiv – wirkt langweiligAufteilen in Standard- und Highlight-Stufe, Highlight voll ausgestattet
Schrift hinter Person nicht sichtbarÜberdeckungsanteil messen – Kopf überdeckt 25–30%
Stuhl wird mit in die Person keyedSchrift oberhalb Schulterlinie; vor dem weißen Rand entfernen
Timing-Treffer falsch gemessenVom „ersten sichtbaren Frame“ messen; Einblend-Animationen 1 Frame früher starten
Zischlaute werden als Soundeffekte erkanntNach demucs-Stimmtreinnung nur auf der Begleitspur messen
Soundeffekte gehäuftPro 4-Sekunden-Fenster 1–3, komplexe Sequenz zählt als 1
Kapitel oder große Schrift gelangt in den Douyin-Button-BereichRechte Grenze ≤ x 930
Standbild während Sprache – Lippenbewegung passt nichtStandbild nur in Stille, ≤0,4 Sekunden
Animation gleitet ins Bild und überdeckt Gesicht oder BildrandStattdessen: an Ort und Stelle ausblenden + an Zielposition vergrößert einblenden
Prüfwerkzeug zeigt veraltete Bilder basierend auf Pfad-CacheJedes Prüfungsbild mit neuem Dateinamen versehen
Chinesische Pfade oder Leerzeichen lassen Befehle fehlschlagenPython subprocess mit Parameterliste verwenden; Dateizugriffe explizit utf-8
Whisper halluziniert nie gesprochene SätzeVor dem Align das gesamte Transkript manuell mit Audio abgleichen
Alternative Render-Lösung (z. B. Remotion) ausprobieren wollenNicht validiert – nicht selbst ersetzen; Effektebene nur HTML/Canvas + Playwright
Neuer Entwurf wird nicht in Jianying-Liste angezeigt / falsche SchriftIn vorhandenen Entwurf wechseln oder Jianying neustarten; Entwurf zweimal öffnen

Verwandte Skills