Export (Finales Video)
Dies ist das letzte Glied in der Kette und der einzige Teil des gesamten Produkts, der tatsächlich Pixel zeichnet.
Alles davor ist Annotation: Das Buch merkt sich „welche Wörter gesprochen werden“, die Untertitel merken sich „was auf dem Bildschirm erscheint“, die visuellen Elemente merken sich „welche Ebenen überlagert werden“. Die Vorschau zeigt diese drei Dinge in Echtzeit für den Menschen an, ohne sie zu speichern. Der Export brennt sie in eine Datei.
Benötigt edit-list.json (zwingend), subtitles.json, visuals.json + modules/
Erzeugt finalvideo.mp4
Voraussetzung: Auf dem Rechner muss Google Chrome installiert sein (zum Rendern von Untertiteln und Animationen als Bilder). Die Desktop-Installation von FFmpeg / FFprobe wird zusammen mit der App in das verwaltete Produktverzeichnis übernommen; eine reine CLI-Installation erfordert weiterhin systemweit ffmpeg ≥ 6. Fehlt Chrome, wird ein klarer Fehler ausgegeben – versuchen Sie nicht, dies zu umgehen: Ohne Chrome gibt es keine Untertitelebene und keine Animationsebene.
Lesen und führen Sie zuerst den Abschnitt „Schlussfolgerungsstufen“ aus dem Geschäfts-Skill-Phasenvertrag aus. Der Export betritt nicht den Bearbeitungszustandsautomaten: Er ändert keine Projektdateien, schreibt nicht in die CAS, treibt keine Phase voran. Die Ausgabe ist eine neue Datei; ein erneutes Ausführen überschreibt sie. Daher ist kein Bestätigungsdialog erforderlich.
0. Bereitschaft
Führen Sie zuerst die „Bereitschaftsprüfung“ aus Prüfung auf Updates aus – ob die Skills aktuell sind und die Runtime kompatibel ist; das Plugin-Stammverzeichnis wird dort auch lokalisiert (alle <plugin-root> in diesem Befehl werden durch diesen wörtlichen Pfad ersetzt). Nur bei „Bereit“ fortfahren; bei „Neue Sitzung erforderlich“ oder „Stopp“ gemäß dessen Anweisungen vorgehen (einschließlich des Verbots „keine selbstgebauten Ersatzoberflächen“). Der Geschäfts-Skill enthält keine eigene Umgebungslogik.
Wenn das Ergebnis der Bereitschaftsprüfung runtime.kind=desktop-managed ist, direkt die stabilen CLI- und Medienwerkzeuge sowie denselben launchd/windows-task-Dienst der Desktop-App wiederverwenden; nicht den Electron-Pfad auflösen, FFmpeg/Bun separat installieren oder eine zweite Runtime starten.
Befehle
node "<plugin-root>/scripts/ensure-running.cjs" --json
node "<plugin-root>/scripts/videocut-cli.cjs" export <projekt> --dry-run --json # Zuerst den Plan ansehen, nicht codieren
node "<plugin-root>/scripts/videocut-cli.cjs" export <projekt> --json # Finales Video erstellen (Standard: 2x, Quellbildrate)
node "<plugin-root>/scripts/videocut-cli.cjs" export <projekt> --out /pfad/zielvideo.mp4 --json
node "<plugin-root>/scripts/videocut-cli.cjs" export <projekt> --scale 1 --json # Nur Quellgröße
node "<plugin-root>/scripts/videocut-cli.cjs" export <projekt> --keep-work --json # Zwischendateien und Einzelbild-PNGs für die Fehlersuche behalten
Wenn ensure-running mit Identitätskonflikt, Portkonflikt oder fehlerhaftem Dienst antwortet, sofort anhalten; nicht mit einem temporären Vordergrund-Ersatz fortfahren.
Zwei Schritte, nicht nur den zweiten ausführen
① --dry-run zeigt zuerst den Plan an Dauer, Bilderanzahl, Untertitelanzahl, Ebenenanzahl, Zoomabschnitte, Ausgabegröße
Dem Benutzer vorlesen. Sind die Zahlen falsch, liegt der Fehler upstream – zehn Minuten Kodierung beheben das nicht
② Tatsächliche Ausführung montieren → überlagern → zusammensetzen → verifizieren: vier Fortschrittsabschnitte
Die warnings im --dry-run müssen wörtlich weitergegeben werden. Sie melden nur eine Sache: Bestimmte Untertitel oder Ebenenwörter wurden bereits herausgeschnitten, daher erscheinen sie nicht im finalen Video. Dies ist eine Entscheidung des upstream, nicht etwas, das der Export verschlucken sollte.
Schärfe: Die Quelle ist die Obergrenze, zuerst die Quelle betrachten, dann vergrößern
Vor dem Export die Quellauflösung prüfen (das source-Feld von --dry-run enthält sie bereits):
Quellbreite ≥2560 (Retina native Bildschirmaufnahme) → --scale 1, Ausgabe ist native Pixel, das ist der beste Fall
Quellbreite <1920 (z. B. 960×720) → kurz anhalten: Benutzer fragen, ob es einen HD-Export derselben Aufnahme gibt.
Bildschirmaufnahme-Tools können oft dieselbe Aufnahme in 3-facher Auflösung exportieren;
Quellenwechsel ist effektiver als jede Nachbearbeitung (siehe nächster Abschnitt). Falls nicht → --scale 2
Warum --scale 2 bei niedriger Quellauflösung hilft: Das Vergrößern des Grundmaterials macht es nicht schärfer, aber Untertitel und Animationen werden in der Ausgabegröße neu gezeichnet – der Betrachter liest genau diese. Wenn die Plattform erneut komprimiert, erhält das größere Bild auch eine höhere Bitrate.
Nicht --fps ändern, um „schärfer“ zu machen. Die Bildrate folgt der Quelle; eine Änderung führt dazu, dass die Animationen nicht mit der Bildschirmaufnahme synchron sind.
Quellenwechsel: Wenn der Benutzer eine HD-Version derselben Aufnahme bereitstellt
Dies ist kein Teil des Exportvorgangs – der Export selbst ist immer schreibgeschützt. Der Quellenwechsel ist ein separater Materialvorgang nach ausdrücklicher Zustimmung des Benutzers, danach wird wieder normal exportiert.
Zuerst prüfen, ob es dieselbe Aufnahme ist (die ersten beiden Kriterien sind bereits ausreichend):
ffprobe -v error -show_entries format=duration -of csv=p=0 <zwei dateien> # Dauer auf Millisekunde genau gleich
ffmpeg -v error -i <datei1> -map 0:a:0 -c copy -f md5 - # Audiostream bitweise identisch
# Dann zwei bis drei Bilder vergleichen, um den visuellen Inhalt zu prüfen, mit eigenen Augen bestätigen
Audiostream bitweise identisch = gleiche Timeline: Wortprotokoll, Buch, Untertitel und Ebenen sind alle an Wort-IDs gebunden, nichts muss geändert werden. Genau das bedeutet „Bindung an Wörter, nicht an Sekunden“ beim Quellenwechsel.
Vier Schritte für den Quellenwechsel (2026-07-29 tatsächlich durchgeführt; Schritt ③ wurde damals vergessen, die Vorschau meldete sofort „Generierung fehlgeschlagen“ – der Fingerabdruck wird nicht nur an einer Stelle gespeichert, alle alten Fingerabdrücke mit grep finden, bevor gehandelt wird):
① Datei austauschen input/source.mp4 und uploads/source.mp4 sind ein Hardlink-Paar –
beide löschen, neue Datei nach input/ kopieren, dann Hardlink zurück zu uploads/ erstellen
(macOS: ln verwenden; Windows: New-Item -ItemType HardLink)
② Fingerabdruck aktualisieren source.sha256 in project.json auf den neuen Datei-Hash ändern
③ Noch eine Stelle prüfen workbench.json speichert ebenfalls sourceSha256 als Fingerabdruck der Quelle,
der von der Vorschau-Pipeline validiert wird – wenn dies fehlt, verweigert die Vorschau die Generierung
(Dies ist das korrekte Verhalten des Produkts: bei Fingerabdruck-Konflikt lieber fehlschlagen, nicht alte Vorschau als aktuell ausgeben)
④ Erneut exportieren --scale 1 – Quellenwechsel dient der nativen Pixel, nicht erneuter Vergrößerung
Sicherheitsmaßnahme: Mit Ihrem Suchwerkzeug in allen *.json-Dateien im Projektverzeichnis nach den ersten 8 Zeichen des alten Fingerabdrucks suchen; jede gefundene Stelle muss bearbeitet werden (Cache-Einträge wie preview-edited/current.json werden automatisch neu berechnet, müssen nicht manuell geändert werden).
Wenn der Audiostream unterschiedlich ist (neu aufgenommen, geschnitten, andere Länge) – das ist kein Quellenwechsel, sondern ein neues Projekt: Das Wortprotokoll muss neu transkribiert werden, alle Annotationen verfallen. Keine Ausnahmen machen.
Abnahme: Drei Dinge, nur wenn alle erfüllt, gilt der Export als abgeschlossen
① Befehl erfolgreich zurückgekehrt Das Produkt zählt die Größe, Bildanzahl und Audiospuren des Zielvideos und vergleicht sie Punkt für Punkt mit dem Plan.
Bei Abweichung wird ein readback_mismatch-Fehler gemeldet, die Datei bleibt als Beweis auf der Festplatte,
der Export gilt nicht als abgeschlossen
② Einzelbildentnahme zur visuellen Prüfung Ein Bild aus dem Zielvideo entnehmen und mit eigenen Augen prüfen. Mindestens abdecken: einen Zoomabschnitt,
einen Vollbild-Animationsabschnitt, einen Abschnitt nur mit Untertiteln, einen Übergang zwischen Ebenen
③ Hörprüfung durch Menschen Niemand hat es wirklich gehört, immer als human listening UNVERIFIED vermerken
② Nicht durch Vorschaubilder ersetzen. Vorschau und Zielvideo sind zwei verschiedene Rendering-Pfade; die Abnahme soll genau prüfen, ob sie übereinstimmen – ein Vorschaubild als Beweis für das Zielvideo zu nehmen, setzt die zu prüfende Sache als gegeben voraus.
Zur Beurteilung von Zooms eindeutige Orientierungspunkte suchen, der Gesamteindruck kann täuschen (2026-07-29 wirklich erlebt): Bei 1,6-fachem Zoom sieht der Bildschirminhalt immer noch wie „eine ganze Seite“ aus, im Thumbnail kaum unterscheidbar von der Gesamtansicht – es wurde fälschlicherweise angenommen, der Zoom sei verloren gegangen, was zu 30 Minuten Fehlersuche und zwei erneuten Exporten führte. Die richtige Methode: Nach nur durch Beschneiden verursachten Beweisen suchen: halb abgeschnittene Elemente (Sprechblase von der Mitte getrennt), verschwundene Rand-Elemente (Seitenleiste, Titelleiste). Vergleich mit dem Quellbild desselben Zeitpunkts gibt sofortige Klarheit.
Einzelbildentnahme mit ffmpeg:
ffmpeg -v error -ss 8.84 -i zielvideo.mp4 -frames:v 1 -y frame.png
Bei Problemen: Wo nachschauen
Mit --keep-work werden im Projektverzeichnis .chengfeng-videocut/export/ drei Dinge hinterlassen,
die direkt anzeigen, „welche Hälfte falsch ist“:
assembled.mkv Nur Schnitt, ohne Überlagerungen. Fehler hier = Fehler im Buch oder Schnitt
overlay/*.png Nur die überlagerten Elemente, transparenter Hintergrund. Fehler hier = Fehler im Untertitelstil oder Modul
spans/*.mp4 Zusammengesetzte Segmente. Fehler hier = Fehler im Zoom oder Alignment
Referenztabelle:
Keine Untertitel/Animationen im Zielvideo Ist overlay PNG vollständig transparent? Hat das Modul seek nicht beantwortet?
Animation bleibt auf erstem Bild Modul hat seek nicht implementiert, oder GSAP-Timeline war nicht paused
Komplett weißes Bild Modul fehlt `:root { color-scheme: dark }`
Zoom-Rechteck ist verschoben viewBox des Moduls und zoom der Ebene sind nicht dasselbe Wertepaar
Zielvideo ist kürzer als geplant Ein span hat nicht genug Bilder; Fehlermeldung der compose-Phase prüfen
Kurzes Aufblitzen des Originalmaterials an Ebenenübergängen overlay-Bild ist veraltet (Bildmarkierungsvalidierung fehlgeschlagen). Das Produkt weist über den Bildmarkierungsstreifen oben selbst nach, zu welchem Bild jedes Bild gehört; bei Wiederholung zuerst prüfen, ob overlay PNG den Markierungsstreifen oben enthält und compose ihn mit crop entfernt hat
Chrome nicht gefunden Google Chrome installieren, keinen anderen Rendering-Pfad verwenden
Was nicht erlaubt ist
- Nicht „Export erfolgreich“ als „Abnahme bestanden“ bezeichnen – die erfolgreiche Befehlsrückgabe bedeutet nur, dass das Produkt sich selbst überprüft hat, nicht die visuelle Qualität
- Keine Vorschaubilder, DOM oder Logs als Ersatz für Zielvideo-Einzelbildentnahme verwenden
- Nicht human listening PASS melden, wenn niemand zugehört hat
- Keine Projektdateien ändern, um den Export durchzuführen (Untertitel bearbeiten, Ebenen löschen, Buch ändern). Der Export ist schreibgeschützt
- Keine Arbeit von upstream im Export nachholen: Fehlende Untertitel → Untertitel schreiben, fehlende visuelle Elemente → visuelle Elemente erstellen; in diesem Abschnitt nicht provisorisch etwas zusammenbasteln