Communitygithub.com

口播动效剪辑管线(3:4 动效成片)

把已录好的中文口播素材剪成 3:4(1080×1440)动效成片,采用知识类口播常见的「真人段 ↔ 图形段」交替剪法,支持Remotion渲染和自动化质检。

Was ist 口播动效剪辑管线(3:4 动效成片)?

Diese Skill „口播动效剪辑管线“ (Mundart-Live-Motion-Editing-Pipeline) wandelt bereits aufgezeichnete chinesische Mundart-Rohmaterialien in finale 3:4 (1080×1440) Effekt-Clips um. Sie setzt auf den Basis-Skill **cangshu-koubo-wudongxiao** auf, der Schnitte von Versprechern, Pausen, Untertitelquellen und sensible Wörter übernimmt. Die Pipeline ergänzt die 3:4-Beschneidung, Grafikeinlagen, B-Roll, Hintergrundmusik (BGM) und Soundeffekte. Der Workflow umfasst: Transkription per mlx-whisper (Apple Silicon), Keying mit macOS Vision, Erstellung einer plan.json mit wortgenauen Zeitstempeln, Remotion-Rendering (Version 4.0.520) für Milchglas-Datenkarten, hochsteigende Großbuchstaben, Fortschrittsnavigation sowie handgeschriebene Grafikeinlagen („Ein Protagonist spielt eine Kette“) mit bis zu 3 Zustandsverkettungen. Die Qualitätskontrolle prüft automatisch Kollisionen, Überläufe und Lautstärke. Die Skill unterstützt 9 cartoonartige Themen, Brand-Walls und steht nur unter macOS (Apple Silicon) zur Verfügung.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/QQTangBa/cangshu-koubo-video-skills/tree/HEAD/skills/cangshu-koubo-motion-edit

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht 口播动效剪辑管线(3:4 动效成片)?

Referent spricht einen Satz, das Bild reagiert darauf; Grafikeinlagen sind „ein Hauptdarsteller spielt eine Kette“, nicht umblätternde Karten.

Diese Skill baut auf dem Basisskill cangshu-koubo-wudongxiao auf: Versprecher-, Pausen-, Schnittpunkt-, Untertitelquellen- und sensible-Wörter-Verarbeitung verwendet dessen Skripte und Regeln. Diese Skill fügt nur 3:4-Beschnitt, Grafikeinlagen, B-Roll, BGM und Soundeffekte hinzu. Beide Skills müssen im selben skills-Verzeichnis installiert sein.

Dateiübersicht

DateiWann lesen
references/style-bible.mdVor dem Schreiben des Plans Pflichtlektüre: Rhythmus, Live-Schichtüberlagerungen, Ein-/Ausgänge in Grafiken, Verkettungen, Kameraführung, Malstil, Soundeffekte
references/scene-guide.mdBeim Schreiben von Grafikeinlagen (handgeschriebene Szenen) nachschlagen: Koordinaten und Kamera, Werkzeuge Kit/Lux/Toon, Stilthemen, Kollisionsliste, Soundeffekthinweise, Beispielzerlegungen
references/plan-schema.mdBeim Schreiben von plan.json Felder nachschlagen
references/metaphor-bank.mdVor jeder Grafikeinlagen-These den Divergenzprozess durchlaufen
references/demo-patterns.mdDemomuster auswählen: Abschnitt 2 (Musterbibliothek), Abschnitt 4 (Aufmerksamkeit fangen)
references/layout-34.mdAbschnitt 2 Sicherheitszone (vor Planschreiben lesen); Abschnitt 1 Aufnahmetipps (bei Benutzerfrage „Wie filmt man 3:4 Mundart?“ antworten)
references/sfx-palette.jsonSoundeffektliste: Rolle → Material, Beschnitt, Gain
references/board-draft.mdNur beim Entwurf und bei Zeitleistenabgleich ansehen
assets/example-plan.jsonVollständiges Beispiel; Grafikeinlagen sind Vorlagen custom/stock1.tsx, stock2.tsx (weißer Kartenstil); Cartoon-Stilbeispiel ist custom/toon_panel_example.tsx. Die tag/pill-Kapseln und „Label fliegt in Grafikeinlage“ im Beispiel sind alte Methoden – nicht kopieren

Umgebung

uv venv -p 3.12 <temp-verz>/venv && VIRTUAL_ENV=<temp-verz>/venv uv pip install mlx-whisper "opencv-python-headless<5" numpy scipy pillow

OpenCV muss unter 5 sein (5.x hat keinen Gesichtserkenner). Im Folgenden: $SK = Verzeichnis dieser Skill, $B = scripts/-Verzeichnis des Basisskills (cangshu-koubo-wudongxiao/scripts auf gleicher Ebene), $PY = Python des obigen venv.

  • Nur unter macOS (Apple Silicon) ausführbar: Transkription mit mlx-whisper (Modell zuerst aus lokalem Cache, bei Fehlen automatisch mlx-community/whisper-large-v3-turbo herunterladen), Keying mit systemeigenem Vision (benötigt swiftc aus Xcode Command Line Tools). Außerdem ffmpeg, Node 18+.
  • Rendering mit Remotion 4.0.520: new_project.sh führt npm install durch (wenn KOUBO_REMOTION_CACHE gesetzt ist, zuerst Abhängigkeiten desselben Versions aus diesem Verzeichnis wiederverwenden). Remotion hat eigene Lizenz: Einzelnutzer und kleine Teams kostenlos; Unternehmen ab einer bestimmten Größe benötigen kommerzielle Remotion-Lizenz. Vor Baubeginn Benutzer einmal darauf hinweisen.
  • Soundeffektbibliothek wird nicht mit der Skill verteilt. Bei erster Nutzung Zustimmung des Benutzers einholen (Quelle: mixkit.co 30 + kenney.nl zwei Pakete, ca. 3,3 MB), dann python3 $SK/scripts/fetch_sfx_library.py <verzeichnis> herunterladen, danach build_sfx.py mit --library <verzeichnis> oder Umgebungsvariable KOUBO_SFX_LIB. Möchte der Benutzer nicht herunterladen, im Plan meta.autoSfx: false setzen, keine Cues schreiben – Ausgabe ohne Soundeffekte.
  • BGM, Bildbibliothek, Produktfotos, Charakter-Spritesheets werden vom Benutzer bereitgestellt, nicht aus dem Internet suchen.

Ablauf

1. Eingaben sammeln, Projekt anlegen

  • Originalvideo (Pflicht); finales Mundart-Manuskript oder aus CapCut/anderer Software exportierte SRT-Untertitel (falls vorhanden); Markenname (meta.brand, Account-Name oder Markenname des Benutzers; falls nicht vorhanden, keine Brand-Wall); Hintergrundmaterial (Datenkartenquellen); lizenzierte BGM, Bilder, Produktfotos.
  • Einmal fragen, ob dieser Clip zu einer Serie mit festen Vorgehensweisen gehört (Stil, Intro, BGM): Wenn ja, danach richten, danach nicht mehr fragen.
  • bash $SK/scripts/new_project.sh <projekt>, Projektort beim Benutzer erfragen.

2. Versprecher schneiden, Untertitel anpassen (über Basisskill), 3:4-Material ausgeben, Keying, Soundeffekte

Versprecher und Wiederholungen schneiden, Pausen kürzen, Schnittpunkte korrigieren, Untertitelquellen und sensible Wörter, Untertitelzeiten anpassen – alles mit Skripten und Regeln des Basisskills (seine references/cut-rules.md, captions.md) im <projekt>/basis/-Verzeichnis durchführen. Hier kein separates System.

$PY $B/prepare_source.py <originalvideo> <projekt>/basis/source.mov    # Schritt 0: in source.mov umwandeln; wenn Benutzer Beauty/Noise-Reduction selbst durchgeführt hat, Export mit 3-Parameter-Version (siehe Basisskill Schritt 0)
$PY $B/transcribe.py <projekt>/basis/source.mov <projekt>/basis/raw_transcript.json
#   Gemäß Basisskill cut-rules.md edl.json schreiben (source auf source.mov setzen; kein festes Serien-Intro -> "intro": false in oberster Ebene)
$PY $B/cut_takes.py <projekt>/basis
$PY $B/find_ng.py <projekt>/basis                        # Phrasenweise Transkription nach Wiederholungen suchen – Pflicht
$PY $B/edl.py rebuild <projekt>/basis --remove <start-ende>...  # Versprecher löschen, Pausen >0,4s kürzen, Schnittpunktseiten anpassen, Fragmente löschen
$PY $B/cut_takes.py <projekt>/basis && $PY $B/find_ng.py <projekt>/basis
$PY $B/transcribe.py <projekt>/basis/cut.mp4 <projekt>/basis/cut_transcript.json --prompt "Unten ist Mandarin-Mundart, ich bin <Sprechername>, Inhalt über <Bereich>."
python3 $SK/scripts/srt_captions.py <untertitel.srt> <projekt>/basis/untertitel_quelle.txt      # Benutzer hat SRT bereitgestellt: Wörter daraus für ersten Entwurf verwenden
python3 $SK/scripts/captions.py <projekt>/basis/cut_transcript.json <projekt>/basis/untertitel_quelle.txt   # Keine Untertitel: aus Transkription ersten Entwurf erstellen
#   Gemäß Basisskill captions.md Untertitelquelle bearbeiten: Tippfehler, Eigennamen, [Schlüsselwörter], sensible Wörter
$PY $B/captions.py <projekt>/basis
$PY $SK/scripts/from_base.py <projekt>/basis <projekt>/public  # Schnittpunkte korrigieren + auf 3:4 beschneiden + 8-Frame Optical Flow Fusion einbrennen, words.json, cuts.json schreiben, captions.json kopieren
bash $SK/scripts/matte.sh <projekt>/public/footage34.mp4 <projekt>/public/person.webm
python3 $SK/scripts/build_sfx.py <projekt>/public --library <soundeffekt-bibliothek-verz>
  • Danach alle Zeiten mit public/words.json-Timeline verwenden (bei unveränderter Geschwindigkeit identisch mit basis/cut.mp4). Standardmäßig keine Geschwindigkeitsänderung; nur wenn Benutzer Geschwindigkeit angibt, from_base.py --speed 1.1 verwenden (gleiche Methode wie Basisskill: Serien-Intro Originalgeschwindigkeit, danach gesamte Geschwindigkeitsänderung, Stimme ohne Tonhöhenänderung, Untertitel und Einzelwortzeiten entsprechend umrechnen). Intro-Anti-Shake, Sprachausblendung gemäß Basisskill-Regeln: nicht aktiv durchführen, erst fragen.
  • Ausgabe von from_base.py: wenn „Gesichtszentrum y“ um 0,3–0,55 abweicht, Beschneidung prüfen, mit --face-y angeben; wenn Original bereits 3:4 ist, vollflächig skalieren ohne Beschneidung.
  • Keying: Einen Frame extrahieren, auf dunkelgrauen Hintergrund legen, Haare und Schultern prüfen; bei schlechtem Keying notieren und beim Plan-Schreiben meta.person-Feld löschen (keinen leeren String setzen), Vorlage deaktiviert automatisch.
  • build_sfx.py erstellt Soundeffekte gemäß references/sfx-palette.json aus der Soundeffekt-Bibliothek, kein anderes Material suchen (Auswahlprinzip siehe style-bible Abschnitt 10).
  • Untertitel: captions.json in Plan als captions einfügen, meta.captionStyle: "pop" (Schlüsselwörter 1,32-fach vergrößert, hellgelb, beim Erscheinen elastischer Effekt, beim Verschwinden ein Frame sofort weg).
  • Schärfeeinstellungen für Material (crf 10 + leichte Schärfung), Keying (crf 18), Rendering (PNG-Frames + crf 12) sind in Skripten und Vorlagen festgelegt, nicht herabsetzen (würde unscharf wirken).
  • BGM-Test vor Festlegung (wenn Benutzer Empfehlung wünscht oder Serienkonvention keine Vorgabe): Aus lizenzierter Musiksammlung des Benutzers 6–9 stilistisch unterschiedliche Titel auswählen (bei Namensnennungspflicht in Lieferhinweis erinnern), für jeden schon im Takt liegende Position finden, auf die ersten 8 Sekunden des geschnittenen Materials setzen und in Dauerschleife abspielen, bis Benutzer auswählt:
    $PY $SK/scripts/bgm_audition.py <projekt>/public/footage34.mp4 <projekt>/bgm_test --track "Name=pfad@startsekunde" --track "Name=pfad@startsekunde"
    
    Testlautstärke ca. 11 dB leiser als Stimme (20 dB leiser kaum hörbar). Nach Auswahl die Datei per Hardlink oder Kopie nach <projekt>/public/ legen (meta.bgm.src erkennt nur Dateiname unter public); End-Clip ca. 12,5 dB leiser als Stimme: mit --rel -12.5 nur diesen Titel noch einmal ausführen, meta.bgm.volume = 10^(gedruckter Gain/20), meta.bgm.from = Startsekunde. Wenn Titel kürzer als Clip, wird er wiederholt; im Lieferhinweis erwähnen. Wenn Benutzer kein BGM hat, nicht hinzufügen.

3. Abschnitte einteilen, Informationen ergänzen

  • Gemäß style-bible Abschnitte 2 und 4 segmentieren: Mechanismus erklären, Beispiele nennen, Daten zeigen, Vergleiche in Grafiken; Aussagen, Schlussfolgerungen, Wendepunkte zurück zu Live-Segmenten; Grafikeinlagen ≤16s; chapters schreiben (Kurzvideo 3 Abschnitte).
  • Informationsmenge durch überprüfte Daten sicherstellen: Für Schlüsselthesen im Text möglichst online nach Quellen mit nachvollziehbarem Ursprung suchen für Datenkarten; bei Unsicherheit nicht verwenden; Quellenangaben auf dem Bildschirm als allgemeine Bezeichnung, echte Links in Lieferhinweis; persönliche Schätzungen im Text mit „persönliche Einschätzung“ kennzeichnen. Ergänzte Daten zuerst dem Benutzer zur Bestätigung vorlegen.

3.5 Stil, Intro (zuerst Richtung festlegen)

  • Zwei Stilrichtungen: lux.tsx Weiße-Karte-Eleganz (feste Farbpalette, kein Thema), oder toon.tsx Szenen schreiben, mit meta.style unter 9 Themen wählen (style-bible Abschnitt 7). Serienkonvention vorhanden? Danach richten; sonst zunächst mit toon schreiben, nach Fertigstellung der ersten Grafikeinlage in Schritt 5 Stil-Beispiel-Clip erstellen, Benutzer auswählen lassen. Bei Stilwechsel nur Elemente und Animationen austauschen, Hintergrundfarbe und Textwand unverändert.
  • wall-Thema verwendet Farbe der realen Hintergrundwand: Vor Verwendung aus public/footage34.mp4 einen Frame extrahieren, Hintergrundwandfarbe messen, in toon.tsx-Thementabelle wall-Hintergrundfarbe anpassen; entleerter Raum wird bei Ausblendung in Grafik-Hintergrund nur dann farblich konsistent, wenn die Wandfarbe übereinstimmt.
  • Textwand hinter Grafikeinlagen (zeilenweise Markenname links-rechts wechselnd) aktivieren mit meta.wall: true (dark-Thema standardmäßig aktiv, nur für toon-Szenen wirksam), Text aus meta.brand.
  • Charakterfigur: Standardmäßig Kid aus toon.tsx mit Code gezeichnet. Nur wenn Benutzer eigenes Charakter-Spritesheet (transparentes PNG) bereitstellt, meta.qkid: true setzen: Bilder nach public/ipq/ legen, Maße in src/scenes/custom/ipq.json registrieren (Format siehe scripts/split_sheet.py). Verwandlung Live ↔ Figur (host: "morph") benötigt ebenfalls Spritesheet; ohne nicht verwenden, plan_check.py stoppt.
  • Serialisierte Serien („Willkommen zur XX. Ausgabe Nr. N“) mit custom/intro.tsx als festes Intro: meta.series mit Serienname, Ausgabe-Nr., Thema, im Plan an dieser Stelle einen Abschnitt B von ca. 3,2s einfügen; Registrierungsmethode siehe custom/index.ts-Kommentare.

4. Für jede Grafikeinlage zuerst klären, was sie darstellt

  • Gemäß metaphor-bank Abschnitt 1 für jede These je einen Kandidaten in jeder der vier Stufen „Direkt/Metapher/Übertrieben/Absurd“ schreiben, bewerten, einen auswählen; mindestens die Hälfte der Videos auf übertrieben oder absurd setzen (unter der Bedingung, dass es in 1 Sekunde verständlich ist). Tabelle als kreativ_divergenz.md im Projekt speichern.
  • „Hauptfigur + Kette + Verkettungstabelle“ festlegen (style-bible Abschnitt 5): Dieselbe Hauptfigur durchgehend transformieren; mindestens 3 Zustandsverkettungen; über Abschnitte oder Welten hinweg mindestens 1 Bezug; Datenkarten seitlich aus der Hauptfigur herauswachsen als Randnotiz, nach Erklärung wieder einziehen.

5. Handgeschriebene Szenen schreiben

Nach scene-guide src/scenes/custom/<name>.tsx schreiben und registrieren. Wichtige Punkte:

  • Kamera nur an Satzgrenzen bewegen; Standzeit-Median ≥2s (einzelne nicht unter 1,4s) und völlig statisch, eine Bewegung 0,6–0,9s, meist Zoom-in/out; Camera3D + orbitAt für gesamte Leinwand 3D-Perspektive.
  • Stil noch nicht festgelegt: Zuerst erste Grafikeinlage (toon) schreiben, diesen Abschnitt im Plan vorbereiten, ausführen:
    $PY $SK/scripts/style_reel.py <projekt> <start-s> <ende-s> --themes dark,white,chalk,news
    
    Stil-Dauerschleife für Benutzerauswahl; bei „noch ein paar“ andere Themen (blue, neon, water, toon, wall) verwenden. Nur Malstil ändern, Aktionen und Text unverändert. Nach Auswahl in meta.style eintragen, restliche Abschnitte schreiben.
  • Stil gemäß 3.5: Weiße-Karte-Eleganz mit lux.tsx, sonst mit toon.tsx (Stage umschließt Szene, Farben nur T.*, direkt auf Hintergrund geschriebener Text und Linien mit T.onBg/T.onBgSoft); flache Bilder nur mit Tilt versehen.
  • Objekte mit Code zeichnen (custom/objs.tsx flache Vektoren, fehlende nach gleichem Muster hinzufügen), keine realistischen Icons.
  • Timing: Verben Abweichung ≤0,1s, Nomen 0,3–1s vorher, Zahlen 0,4s vor Start.
  • Erstes Element erst nach contentStart(seg) erscheinen (während Schnittanimationsphase keine Elemente zeigen); jedes Element innerhalb von 5–7s ein neues Element oder eine Änderung erfahren (style-bible Abschnitt 5 Informationsdichte).
  • B-Roll: Nur wenn Informationen einer Bildschirmseite nicht auf einmal passen, in mehrere Blöcke aufteilen, Kamera zwischen Blöcken bewegen (halbe Bildschirmbreite verschieben, jede Leinwand füllen – style-bible Abschnitt 6 „Mehrfachleinwände innerhalb eines Abschnitts“); wenn eine Leinwand ausreicht, nicht teilen.
  • Wenn der Text über ein konkretes Objekt spricht (ein Bild, eine PPT-Seite, eine Mini-App, ein Manuskript), können echte Bilder eingefügt werden: Nur lizenzierte Bilder des Benutzers verwenden, nach public/real/ legen; KI-generierte mit „KI-generiert“-Wasserzeichen kennzeichnen; nur Bilder, keine aus dem Internet gesuchten Videos (style-bible Abschnitt 7). Wenn Benutzer keine Bilder bereitstellt, mit Code zeichnen.
  • Bereits bei Platzierung gemäß scene-guide Abschnitt 5 Kollisionen, Überläufe vermeiden; cues nur für Schlüsselverkettungen Soundeffekte setzen.

6. plan.json schreiben

Nach plan-schema segments, captions, chapters, Live-Segment-Überlagerungen schreiben. Zahlen im Live-Segment in linke obere Datenkarte (metric), Schlussfolgerungen mit Vordergrund-Großbuchstaben, parallele Schlüsselwörter mit Kopf-Text (sideWords), Abschluss einer Argumentation mit Haftnotiz (sticker); zwei- bis dreistellige Schlüsselwörter gelegentlich mit großem Zeichen hinter dem Kopf (topWord, look: "steel"), wichtige Listen gelegentlich mit linker oberer Informationsbox (infoBox); wenn beide am Anfang gleichzeitig erscheinen, zuerst großes Zeichen fliegt zu InfoBox-Eckenmarkierung. Ein-/Ausgänge in Grafiken gemäß style-bible Abschnitt 9 mit enter/host/exit schreiben: Raumtrennung mit Ecken-Halbportrait, Ausblendung mit Kugel, nicht mischen; Raumtrennung nur wenn im Hintergrund links und rechts deutlich Objekte vorhanden sind, sonst Ausblendung; wenn B-Roll-Anfang oder -Ende die kleine Figur ist und Spritesheet vorhanden, Verwandlung hinzufügen (host: "morph" + hostPath); exit nicht schreiben = harter Schnitt. Live-Abschnitte nicht kürzer als ca. 2,2s. Keine kleinen Kapseln (tag, pill) oben links/rechts verwenden – wirkt KI-artig; Hinweise, Haftnotizen, Nachrichtenstreifen, Blumen-Text, bewegungslose Effekthinweise standardmäßig nicht verwenden.

$PY $SK/scripts/fit_bigtext.py <projekt>
python3 $SK/scripts/plan_check.py <projekt>/src/plan.json

Bei Abschnitten mit Raumtrennung entsprechendes Material generieren (vom Schnittbild-Frame aus: leere Wand / linkes Objekt / rechtes Objekt als drei Schichten): $PY $SK/scripts/split_plates.py <projekt>, bei geänderten Abschnittsgrenzen neu ausführen; wenn Trennung nicht korrekt, eigene Hintergrund-Schwellwerte im Skript anpassen; falls nicht gut, auf Ausblendung umstellen. fit_bigtext.py berechnet für große Zeichen hinter dem Kopf Ein-Wort-Überlappung (≤35%), nicht gegen Fortschrittsbalken stoßen; bei Platzmangel vor die Person verschieben; plan_check.py-„Muss geändert werden“ auf null setzen, „Vorschlag“-Einträge einzeln bearbeiten oder begründen.

7. Bildschirmtext-Selbstprüfung

python3 $SK/scripts/screen_text.py <projekt>/src/plan.json --with-captions

Text aus handgeschriebenen Szenen wird ebenfalls extrahiert; Text in eingefügten echten Bildern kann nicht extrahiert werden – manuell jedes Bild durchsehen. Wenn im Projekt ein Skill zur Compliance-/Sensitiv-Wort-Prüfung installiert ist, diesem nur Lese-Prüfung übergeben (Zielplattform und ob kommerzielle Werbung angeben, Textkarten und Untertitel getrennt pro Zeile melden); falls nicht, selbstständig die sensible-Wort-Liste aus Basisskill captions.md sowie häufige Verstöße der Zielplattform durchgehen und extrahierten Text dem Benutzer zur Prüfung vorlegen. Bei Risiko zuerst korrigieren, dann erneut extrahieren und prüfen. Wenn später nur Positionen geändert, Text unverändert, erneut extrahieren und zeilenweise mit vorheriger Runde vergleichen; bei völliger Übereinstimmung Ergebnis übernehmen.

8. Vorschau

cd <projekt> && npx tsc --noEmit -p . && npm run preview
bash $SK/scripts/stills.sh <projekt> <name> <s> <s>

stills.sh erzeugt horizontale Zusammensetzung in halber Auflösung; beim Schreiben jeder Szene für jede Kameraposition und Elementübergänge ansehen. Halbe Auflösung dem Benutzer zeigen, nach Feedback Szenen und Plan anpassen und erneut ausgeben. Wenn Benutzer mehrere Varianten vergleichen möchte: Verwandlung mit Morph-<dissolve|iris|flip|poof>, große Zeichen hinter Kopf mit Top-<steel|extrude|…> gemischt rendern und denselben Abschnitt ausgeben.

  • Informationsdichte-Selbstprüfung: Abschnittsweise Bildänderungen messen (Untertitel-Leiste und Fortschrittsbalken entfernen); Leerstellen über 4s ohne neue Ereignisse mit Inhalt füllen.
  • Falls nach Planerstellung noch Versprecher gefunden werden (gleicher Satz zweimal gesagt): Planzeit nicht ändern, sondern python3 $SK/scripts/cut_slips.py <projekt> <start-ende>... ausführen, Material ausschneiden; gemäß gedruckten Werten meta.cuts usw. eintragen (plan-schema Abschnitt 1), dann einige Sekunden vor und nach Schnittpunkt neu transkribieren, um sicherzustellen, dass nur eine Version übrig ist. Wenn dunkles Thema gewählt, gesamten Clip abschnittsweise auf „dunkler Text auf dunklem Hintergrund“ oder „weißer Text auf weißer Karte“ prüfen.

9. Finales Rendering + Qualitätskontrolle

python3 $SK/scripts/render_final.py <projekt> --ver v1 --py $PY

Ein Befehl führt aus: Rendering → gemessene Audio-Verzögerung durch Rendering abziehen (bei Begrenzung abziehen) → Lippen-Synchronität messen (qa/lippen.txt, Median-Abweichung >20ms gilt als behandlungsbedürftig) → finale Audio-Gesamtprüfung → reine Soundeffekt-Spuren rendern, einzeln Lautstärke messen → Storyboard-Bilder ausgeben (Grafikabschnitte und Kapitelwechsel: 5 Frames/s, Live-Abschnitte: 2 Frames/s), Zusammenfassung in out/<ver>/qa/qualitaet.txt schreiben. Dann:

  • Jedes qa/sb_*.jpg einzeln durchsehen und vier Fehlerarten finden: Elemente ragen über rote Linie (Fortschrittsbalkenbereich), werden durch Bildrahmen abgeschnitten, zwei Elemente durchdringen einander, zwei Textschichten überlappen. Bei Verdacht großes Bild extrahieren: $PY $SK/scripts/storyboard.py <final-clip> --at 25.1,25.25,25.4 --w 405 --hud --out <bild>.jpg.
  • „Behandlungsbedürftig“ auf null setzen: Gesamtlautstärke zu laut/leise: meta.sfxVolume anpassen; einzelne zu laut/leise: deren Cue vol anpassen; zusammengedrängte löschen. Restliche Abweichung innerhalb 0,3dB ist Messungenauigkeit, nach Erklärung nicht weiter anpassen.
  • Nach Änderung mit neuer Versionsnummer neu rendern. Nur Audio geändert (sfxVolume, cue-vol, BGM-Lautstärke): Bild nicht neu rendern: bash $SK/scripts/remix_audio.sh <projekt> v1 v2 --py $PY (nur Audiospur rendern, mit Originalbild mischen, erneut Qualitätsprüfung); bei jeder Bildänderung gesamten Clip neu rendern.

10. Lieferung

Ausgabepfad und -dauer, Anteile der Welten, Anzahl Soundeffekte und Einzellautstärkenspannen, Gesamtlautstärke (alles in qualitaet.txt), dazu Ergebnis der Bildschirmtext-Selbstprüfung und ob manuelle Überprüfung erforderlich. Direkt Pfad der Klarversion angeben, keine extra komprimierte Handyversion. Bei Bedarf 3:4-Cover: Screenshot nach public/ legen, meta.cover mit zwei Textzeilen, npx remotion still src/index.ts Cover out/cover/cover_3-4.png --frame=0 ausführen; Cover-Text ebenfalls Schritt 7-Prüfung unterziehen. Wenn Benutzer Soundeffekte wechseln möchte, Kandidatenmaterial direkt auflisten, Benutzer selbst hören lassen, nach Auswahl Quellenliste $SK/references/sfx-palette.json aktualisieren (für alle zukünftigen Projekte), dann build_sfx.py neu ausführen; soll nur dieser Clip geändert werden, Quellenliste in Projekt kopieren, anpassen, build_sfx.py <projekt>/public --palette <jene-liste> neu aufbauen. Die src/sfx-palette.json im Projekt ist ein generiertes Artefakt, nicht manuell bearbeiten.

Harte Regeln (jede hat schon Ärger gemacht)

  1. Text auf dem Bildschirm nur aus Dialogtext, Manuskript oder benutzerbereitgestellten Informationen verwenden; keine Zahlen, Kommentare, Quellen erfinden; Wasserzeichen mit Benutzermarke.
  2. Grafikeinlagen länger als 6s immer als handgeschriebene Szene umsetzen; Board-Zeichenfläche nur für Entwurf (automatisches Layout kann durcheinandergeraten, wirkt wie PPT-Umblättern).
  3. Grafikeinlage: Ein Hauptdarsteller, eine Kette, mindestens 3 Zustandsverkettungen; nicht zwischen isolierten Requisiten hin- und herschalten (wie PPT-Umblättern).
  4. Kamera bleibt stehen: Standzeit-Median ≥2s, Minimum 1,4s, während des Stands völlig statisch, kein „langsames Zoomen während des Stands“ (zu schnelle Schnitte: Zuschauer sehen nicht klar).
  5. Schräge Perspektive nur für flache Bilder, nicht jede Karte schräg stellen.
  6. Live-Segment-Text: Milchglas-Datenkarten, linke obere Informationsbox, zeichenweise aufsteigende große Zeichen, Kopf-Text und Haftnotizen; keine kleinen Kapseln in Ecken; große Zeichen hinter dem Kopf nur gelegentlich (weniger edel, zu viel vom Kopf verdeckt, kleine Kapseln wirken KI-artig).
  7. Keine Kollisionen, keine Überläufe: gesamter Pfad innerhalb Sicherheitszone, nicht oberen Fortschrittsbalken durchdringen, nicht einander durchdringen, Rohre/Wasserströme/Lichtstrahlen bis zur Kontaktfläche reichen, bei Transformationen zwei Textebenen nicht überlappen.
  8. Soundeffekte wenige und leise: Nur Schlüsselverkettungen, Grafikeinlage 0,3–0,7 pro Sekunde, Abstand ≥0,5s, jeder 1–6dB leiser als Sprachmedian, helles Real-Material verwenden (zu dicht, zu laut = Verschmutzung, KI-artig).
  9. Vorlagenänderungen nur mit bash $SK/scripts/sync_template.sh <projekt> ins Projekt synchronisieren: Es berührt nicht projekteigenes plan.json, sfx-palette.json, handgeschriebene Szenen-Registrierungstabelle scenes/custom/index.ts und eigene Szenendateien (rsync hatte einmal die Soundeffektliste leer überschrieben, zwei Versionen hatten keinen Soundeffekt); aber remotion.config.ts und Werkzeugdateien unter custom/ wie toon.tsx, lbkit.tsx, intro.tsx, qkid.tsx, ep.tsx, real.tsx werden jedes Mal überschrieben; projektspezifische Requisiten in separate Dateien schreiben. new_project.sh lehnt ab, wenn Projekt bereits existiert. Im Projekt verbesserte Vorlagencode mit sync_back.sh <projekt> <datei-relativ-zu-src>... zurück ins Vorlagenverzeichnis kopieren; in bestehendes Projekt synchronisieren mit sync_template.sh.
  10. Problem gefunden → sofort beheben → neu rendern → Ergebnis liefern, nicht nur Ideen berichten.
  11. Live-Segment-Vordergrundtext auf hellem Hintergrund benötigt dunkle Kontur (Vorlage BigText, SideWords hat bereits zweifachen Textschatten + weichen Schatten, nicht entfernen); in dunklem Thema direkt auf Hintergrund geschriebener Text und Linien mit T.onBg, graue Schrift auf Karten mit T.inkSoft (weiße Schrift auf weißem Hintergrund unsichtbar).
  12. Mehrere Audio-/Video-Abschnitte (BGM-Test, Stil-Muster, Dauerschleife) immer auf 48k resampeln und mit concat-Filter neu codieren, nicht -c copy verwenden (44,1k/48k gemischt hebt die Sprachtonhöhe an); Zusammenfügen mit Python-Skript, da in zsh $i:a als Pfadmodifikator interpretiert wird und set -- $x nicht nach Leerzeichen trennt.
  13. Remotions statischer Dateidienst erkennt keine symbolischen Links: Material aus anderen Projekten in public/ mit Hardlink (ln) oder Kopie einfügen. Beim Rendern remotion still timeout; selbstprüfende Einzelbilder immer über stills.sh (alte Bilder zuerst löschen, bei Fehler abbrechen), sonst werden alte Bilder als neue betrachtet.
  14. Bewegungseffekte dienen dem Inhalt: Schnittanimationen verdecken nicht den Inhalt (Rückkehr zu Live standardmäßig harter Schnitt), Elemente nicht durch Keying, Kugel oder Untertitel verdeckt; zwei verschiedene Schnitt-Eintrittstechniken nicht mischen (Raumtrennung nicht mit Kugel kombinieren).
  15. Informationsdichte: Jedes Element muss innerhalb von 5–7s ein neues Element oder eine Änderung erfahren, es sei denn, es liefert selbst massenhaft Informationen. Kleine Figur ist Nebenfigur, Bewegungseffekte nicht um die kleine Figur herum gestalten.
  16. Nicht um der Kamerafahrt willen fahren: Wenn eine Leinwand ausreicht, nicht teilen; Teilung nur innerhalb einer B-Roll-Strecke, um halbe Bildschirmbreite verschieben, jede Leinwand füllen (verschiedene B-Rolls durch Umblättern ergänzen ergibt keinen Sinn).
  17. In Grafikeinlagen eingefügtes echtes Material nur benutzerbereitgestellte Bilder, keine aus dem Internet gesuchten Videos; Bild muss das im Text genannte Objekt zeigen; KI-generierte mit „KI-generiert“-Wasserzeichen kennzeichnen (echte Videos wirken fehl am Platz, passen nicht zum Stil). Vom Benutzer selbst bereitgestellte lizenzierte echte Fotos laufen weiterhin im Live-Segment (Welt S) und unterliegen dieser Einschränkung nicht.
  18. Audio und Bild nicht trennen: Material, Schnitte alle mit derselben source.mov und derselben Schnittliste; Vorlage mischt BGM und Soundeffekte, Audio kann nur separat gelegt werden, von render_final.py gemessene Verzögerung abziehen, nicht manuell verschieben (Rendering kann Audio um einige zehn Millisekunden verzögern, Lippen-Synchronisation geht verloren).

Vorlage ändern

Vorlage in assets/remotion-template/src/: Film.tsx (Weltenwechsel, Raumtrennung/Ausblendung/Verwandlungsschnitt, Sprecher, Audio; sfxOnly nur Soundeffekte), timing.ts (Schnitt-Zeitplan, contentStart, Zeitumrechnung für Versprecher-Schnitt), morph.tsx + morphState.ts (Verwandlung Live ↔ kleine Figur, benötigt Spritesheet), components/ (base Grundbausteine, overlays Live-Segment-Überlagerungen, hud Fortschrittsnavigation, extra linke obere Informationsbox und obere große Zeichen), scenes/kit.tsx und lux.tsx (Handschrift-Szenen-Werkzeuge und Weiße-Karte-Stil), scenes/custom/ (types.ts Typen, index.ts Registrierungstabelle, Beispiele stock1 und stock2; toon.tsx Zeichentrick-Werkzeuge + 9 Themen + Marken-Textwand, qkid.tsx optionales Charakter-Spritesheet (Bilder in public/ipq/, Maße ipq.json, standardmäßig leer), ep.tsx Produktschnittstellen-Requisiten, objs.tsx flache Vektorobjekte, real.tsx echte Bilder und Mehreinzel-Leinwände innerhalb Abschnitts, lbkit.tsx Zeichentrick-Requisiten, intro.tsx Serien-Intro, toon_panel_example.tsx Beispiel), Root.tsx (Koubo34 gemäß meta.style Final-Clip ausgeben, Style-<thema> Stil-Beispiel-Clip ausgeben, Morph-<methode> / Top-<stil> Verwandlung und große Zeichen hinten vergleichen, Cover Cover ausgeben), Cover.tsx, scenes/scenes.tsx (Einzelkarten-Layout), sfx.tsx (automatische Soundeffekte), scenes/board.tsx (für Entwurf), scenes/props.tsx (für Zeichentrick-Requisiten-Entwurf, enthaltenes TablerIcon auch im Final-Clip verwendbar). Schriftart in theme.ts unter F (Standard PingFang, Avenir etc. macOS-Systemschriften; vor kommerzieller Nutzung gegen lizenzierte Schriftart austauschen). Neue Felder zuerst in plan.ts ergänzen, dann in plan-schema.md eine Zeile hinzufügen. Im Projekt verbesserte Vorlage für zukünftige Projekte mit bash $SK/scripts/sync_back.sh <projekt> <datei-relativ-zu-src>... zurück ins Vorlagenverzeichnis kopieren; in vorhandenes Projekt synchronisieren mit sync_template.sh.

Verwandte Skills