Zhati · Beziehungs-Videoessays
Dies ist ein wiederverwendbarer Workflow, der aus dem fertigen Film „Warum treffen manche gute Menschen die falschen Partner?“ destilliert wurde. Ziel ist es, nicht dasselbe Skript zu kopieren, sondern für jede neue Episode dieselbe Produktionsmethode beizubehalten:
Eine Beziehungsgeschichte mit einem konkreten Gegenstand + Songti-Großschrift + Film-/Realfilm-/Fotoästhetik + zurückhaltende Erzählung + 3:4-Cover.
Festgelegt ist die Methode, nicht das Material
Festgelegt: 16-Takt-Erzählgrammatik, Schriftart/Farbpalette/Bewegung/Ton-Standards, 3:4-Cover, Quellen- und Ethik-Richtlinien, QA.
Variabel: Drehbuch, Erzählung, Musik, Filme/Kundenaufnahmen/Produkte/Fotos/lizenzierte Stockmedien, Personenporträts, Cover-Hintergrund, Veröffentlichungstexte.
Die KI kann selbst Hintergrundvideos suchen: Wenn der Kunde kein Material hat, durchsucht scripts/stock_search.py Mixkit/Coverr/Pexels/Pixabay, wählt 3 Kandidaten aus, lädt sie mit scripts/fetch_stock.py herunter, entfernt Tonspuren, normalisiert sie und schreibt ein Manifest. Siehe references/stock-sources.md für Details.
Der Referenzfilm „Der siebte Himmel“ sowie Freud/Aristoteles/Kant sind nur Referenzimplementierungen, kein festes Material, das in jeder Episode erscheinen muss. Wenn der Kunde echte Filialen zeigt, verwende Kundenmaterial; wenn der Kunde Filmbeispiele aus der Geschichte möchte, wechsle zu 2–3 Public-Domain-Filmen; wenn der Kunde kein Material hat, erstelle reinen Text/Grafiken. Erzwinge kein bestimmtes Film- oder Gesichtsmaterial um der „Serienkonsistenz“ willen.
Detaillierte Auswahl siehe references/client-brief.md und references/asset-strategy.md.
Prüfe zuerst die Anwendbarkeit
Anwendbar:
- Chinesische emotionale Themen wie Beziehungen zwischen Mann und Frau, Liebe, Intimität, Grenzen, Selbstwert, Geben und Nehmen, Trennung und Versöhnung.
- Kundengeschichten von Marken/Organisationen, die „Beziehung, Grenzen, Respekt, Begleitung“ vermitteln wollen und sich für einen essayistischen Ausdruck eignen.
- Nutzer wünschen sich ein horizontales Videoessay von 2:40–3:40 mit Erzählung, Untertiteln und filmischem Look.
- Nutzer sagen explizit „im Stil von ‚Gute Menschen und die falschen Menschen‘“, „verwende die vorherige Vorlage“ oder „mach es als Serie“.
Nicht anwendbar:
- Reine Produkteinführungen/Verkaufsförderung/schnelle Schnittmischungen/Funktionserklärungen; diese Formate sind für andere Vorlagen besser geeignet.
- Nutzer verlangen die Verwendung von urheberrechtlich geschützten Ausschnitten wie „Casablanca“, „In the Mood for Love“ usw. ohne Lizenz. Erkläre zuerst die Risiken und wechsle zu Public-Domain-Filmen oder lasse den Kunden lizenziertes Material bereitstellen.
- Nutzer wünschen ein 9:16-Hochformat für das Hauptvideo. Diese Vorlage ist für 16:9-Hauptvideo + 3:4-Cover ausgelegt; Hochformat erfordert ein neues Layout, einfaches Zuschneiden funktioniert nicht.
Standardspezifikationen (Standard)
| Element | Standard |
|---|---|
| Hauptvideo | 1920×1080 / 30fps / 2:40–3:40 |
| Seitenverhältnis | 16:9 |
| Sprache | Mandarin-Erzählung + eingebrannte Untertitel + SRT |
| Cover | 1080×1440 (3:4), PNG + JPG |
| Ton | Erzählung +原创 Musik + Regen, ca. −15 LUFS, True Peak ≤ −1.5 dBFS |
| Untertitel | Im Bild eingebrannt, zusätzlich .srt Datei |
| Lieferumfang | MP4, SRT, 3:4-Cover, Veröffentlichungstext, Quellenverzeichnis, bearbeitbares Projekt |
| Kundenbestätigung | Drei Meilensteine: Brief → Erster Standbild → Finale Version |
Referenzimplementierung
Referenzmaster (wird nicht mit dem Repository verteilt; dient nur als Asset-/Strukturreferenz):
- Bei lokaler Entwicklung:
~/Desktop/自媒体/good-people-wrong-person - Auf anderen Rechnern: Verwende
--ref, um auf dein eigenes Master-Projekt zu verweisen
Eine neue Episode sollte nicht standardmäßig die Assets des Masters übernehmen. Die Verwendung von --ref dient nur dazu, vendor/, Schriftarten, Texturen und eine Platzhalter-Tonspur zu beziehen; Filme, Porträts, Standbilder, Drehbücher und Ton müssen gemäß dem Kundenbrief ausgetauscht werden.
Das Master enthält:
index.html: Vollständige Huashu-Motion-Komposition des 201,37-Sekunden-Films.cover/cover.html: Quellcode des 1080×1440 3:4-Covers.assets/movies/: Überprüfte, von Tonspuren befreite und auf ganze Frames ergänzte Ausschnitte aus „Der siebte Himmel“ (1927).assets/portraits/: Gemeinfreie Porträts von Freud, Aristoteles und Kant.assets/stills/,assets/textures/,assets/fonts/,vendor/.assets/score.wav: Fertiger Mix aus Erzählung, Musik und Regen der vorherigen Episode. Muss für neue Episoden ersetzt werden, darf nicht direkt verwendet werden.output/: Liefergegenstände der vorherigen Episode, nur als Referenz, nicht kopieren.
Wenn das Master nicht mehr existiert: Verwende templates/index.template.html und templates/cover-3x4.template.html, um den Code wiederherzustellen; Filme und Porträts müssen gemäß references/rights-and-ethics.md neu beschafft und überprüft werden.
Wie beginnt eine neue Episode
SKILL="$HOME/.agents/skills/zhati-relationship-film"
$SKILL/scripts/new_episode.sh my-episode-slug --base "$HOME/relationship-films"
Das Skript wird:
- Ein neues Projektverzeichnis unter
$BASE_DIR/my-episode-slugerstellen (Standard ist$HOME/relationship-films, änderbar mit--base); - Den neuesten Vorlagencode des Skills (
index.html,cover/cover.html) sowievendor/, Schriftarten, Texturen und einen Satz Start-Assets vom Master kopieren; - Die
assets/score.wavdes Masters als Platzhalter-Tonspur kopieren (damit die Seite zuerst ausgeführt werden kann); - Vorlagen für
BRIEF.md,文稿.txt,字幕.srt,treatment.md,素材来源.md,发布文案.md,assets.manifest.jsongenerieren; - Das Verzeichnis
assets/imported/erstellen und die nächsten Schritte sowie die auszutauschenden Text-/Asset-Platzhalter ausgeben.
Folge dann der untenstehenden Pipeline. Überspringe nicht das Schreiben der neuen Erzählung und der neuen Untertitel.
Pipeline
0. Lies den Kundenbrief, fixiere Inhalt + Material
Lies zuerst references/client-brief.md und destilliere die Kundenanforderungen in einen 10-Punkte-Inhaltsplan:
Zielgruppe / Plattform / Dauer / Ein-Satz-Thema / Haken-Frage / Zwei Konzepte / Gedankliche oder psychologische Perspektive / Ethische Wende / Ein kleiner Satz / Material-Modus und -Quelle
Lies dann references/beat-sheet.md und setze das Thema in die 16 Erzähltakte ein. Der Materialmodus muss vor dem Schreiben der Erzählung festgelegt werden: Kundenaufnahmen / Public-Domain-Filme / lizenzierte Stockmedien / Fotos / reiner Text / gemischt. Warte nicht, bis die 3 Minuten vollgeschrieben sind, um den Kunden nach Material zu fragen.
Standardstruktur:
- Haken (eine Frage)
- Konkrete Geschichte (Regen/Schirm; kann durch ein anderes konkretes Objekt ersetzt werden, muss aber ein durchgehendes Objekt sein)
- Einschränkung wie „Dies ist eine fiktive Geschichte“
- Unterscheidung zweier Konzepte (Gutheit vs. Passung, oder das entsprechende Paar dieser Episode)
- Philosophische Perspektive A (Freundschaft/Gegenseitigkeit/Respekt usw.)
- Die Grenzen eines Menschen („Die Anstrengung eines Einzelnen kann eine Beziehung nicht allein tragen“)
- Emotionale Wendefrage (Warum freut man sich auf das nächste Mal, obwohl man traurig ist?)
- Psychologische Perspektive (Wiederholung/Muster; verwende „Eine Verstehensweise“, keine Diagnose)
- Mustererkennung (Einsatz, um Anerkennung zu bekommen)
- Kälte und Selbstzweifel
- Ethische Wende (Der Schaden wurde nicht von dir verursacht; die Verantwortung liegt beim Schädiger)
- Einschränkungen und Ausnahmen (Täuschung, Veränderung, Sehen nach dem Zusammensein)
- Selbstreflexion (zwei Fragen; Spiegel/Spiegelbild)
- Philosophische Perspektive B (Selbstrespekt)
- Ein sehr kleiner Satz (ausführbare Handlung)
- Übung und Abschluss (Bewahre die Sanftheit, aber lasse auch Platz für dich)
- Abspann/Quellenangaben
Wenn das neue Thema keine zwei Philosophen benötigt, kann nur einer verwendet werden; wenn keine psychologische Perspektive benötigt wird, können die Punkte 8–9 zu einem Absatz zusammengefasst werden. Erfinde keine Zitate oder Diagnosen, um die Struktur zu füllen.
1. Schreibe die neue Erzählung
- Ziel 950–1150 chinesische Schriftzeichen, bei normaler Sprechgeschwindigkeit etwa 3 Minuten; wenn der Nutzer einen Text bereitstellt, bearbeite ihn zuerst auf „atembare“ Länge, ohne die Aussage zu verändern.
- Behalte einschränkende Formulierungen bei: Eine Verstehensweise / Keine Erklärung für alle / Die Verantwortung für den Schaden kann nicht auf andere abgewälzt werden.
- Das Ende sollte einen einprägsamen „kleinen Akt“ oder „kleinen Satz“ enthalten, z. B. „Mir ist auch kalt, ich brauche auch diesen Schirm“.
- Schreibe in
文稿.txt, ein Absatz pro Zeile, zur einfachen Generierung von Untertiteln.
2. Generiere die neue Erzählung und die neue Zeitleiste
Verwende bevorzugt die lokale Sprachklonierung des Benutzers (siehe macos-local-voice Skill), lade kein Referenzaudio hoch. Wenn keine Stimme verfügbar ist, frage den Benutzer klar: Eigene Aufnahme / Lokaler Klon / Systemstimme / Ohne Ton.
Ergebnisse:
- Eine vollständige Erzählungsdatei
assets/voice.wav(48 kHz, nach Möglichkeit 24-Bit); - Start- und Endzeiten für jeden Satz (JSON oder CSV), genau auf 0,01s;
- Ein neues
CUES-Array ([start, end, text]).
Verwende nicht die 194-Sekunden-Erzählung des Masters. Die Zeitleiste des Masters dient nur zum Verständnis des Rhythmus, nicht als Audio für die neue Episode.
3. Musik und Abmischung
- Behalte die Ausrichtung auf „Klavier/Streicher/leichte Atmosphäre + Regen“, verwende keine kostenpflichtigen Songs.
- Abmischungsziel: Erzählung klar, Musik bei etwa −28~−32 LUFS, insgesamt etwa −15 LUFS, True Peak ≤ −1.5 dBFS.
- Ausgabe
assets/score.wav, ersetze die Platzhalter-Tonspur; das<audio id="score" ...>Element im HTML bleibt, aber die Dauer muss geändert werden. - Diese Vorlage verwendet
id="score"anstelle vonom-sound, daher muss beim Rendern--silenthinzugefügt werden, da sonstom renderversuchen wird, die Tonspur neu zu erstellen. Siehe den Abschnitt „Ton“ inreferences/visual-system.md.
4. Neu-Timing
Dies ist der am meisten unterschätzte Schritt. Alle Zeiten des Masters sind hartcodiert; sobald die neue Erzählung eingesetzt wird, muss jede Szene neu ausgerichtet werden.
Verteile die neue Gesamtzeit entsprechend den Anteilen in references/beat-sheet.md auf die 16 Szenen, dann:
- Ändere zuerst das
CUES-Array, dasdata-durationim Wurzelelement, dieDURin JS,<audio data-duration>. - Der Start jeder Szene ist der Anfang des ersten Erzählsatzes in diesem Abschnitt, das Ende der Szene ist die Grenze zum ersten Satz des nächsten Abschnitts.
- Skaliere die Animationszeiten innerhalb der Szenen proportional mit „neue Dauer / alte Dauer“; verschiebe nicht nur den Beginn, sonst driftet die zweite Hälfte.
- Die
data-start/data-duration/data-media-start/data-playback-rateder Videofenster müssen ebenfalls neu berechnet werden; stelle sicher, dass der Clip nicht zu Ende ist, bevor er ausgeblendet wird. Die Master-Clips sind bereits auf ganze Frames ergänzt, aber bei neuen Quellen muss die Frame-Ergänzung wiederholt werden. - Nach jeder Szenenänderung überprüfe mit
om stilldie Positionenstart+0.5s,start+2s,end-0.5s, um sicherzustellen, dass keine alten Textreste, Textüberlappungen oder leere Frames vorhanden sind.
Die spezifische Austauschliste findest du in references/text-slots.md; die Timing-Methode in references/retiming.md.
5. Ersetze Text, nicht die visuelle DNA
Ersetze systematisch alle Text-Platzhalter in index.html (siehe references/text-slots.md), einschließlich:
- Film-Titel-Variable
filmTitle, zwei Zeilen Haken; - Vier Absätze des Regenschirm-Geschichte-Großtextes;
- Einschränkung „Fiktive Geschichte“;
- Labels für die beiden Frames „Gutheit“/„Passung“;
- Absätze und Quellenangaben für Aristoteles/Freud/Kant;
- Kalte Szene, Wende, Verantwortung, Spiegel, Selbstreflexion, Handlung, Ende, Abspann;
- Jeder Untertitel im
CUES-Array.
Behalte:
- Farbpalette, Kombination aus Songti/PingFang/EB Garamond;
- Filmbasis, Regen, Schirm, Körnung, Vignette, weiße Blitze, weinrote Linien;
- Den linken/rechten Rand und den unteren Untertitelbereich im 16:9-Format;
- Den Rhythmus „Eine Einstellung, ein Ereignis“, stopfe nicht alle Wörter in einen Bildschirm.
Behalte nicht den alten Text des Masters. Wenn in der neuen Episode andere Denker als „Aristoteles/Freud/Kant“ vorkommen, müssen die Quellen erneut überprüft werden und im Bild muss „Interpretation/Anwendung“ vermerkt werden, keine gefälschten direkten Zitate.
6. Ersetze Assets (gemäß Kundenwunsch, unbedingt erforderlich)
Das Master verwendet „Der siebte Himmel“ (1927), aber das ist nur eine Referenzimplementierung. Wähle den Modus nach references/asset-strategy.md:
- Kundenaufnahmen/Fotos/Produkte/Filialen: Bevorzugt; gib die Lizenz/Einwilligung klar an; halte Gesichter echt, keine übermäßige Retusche; Produkte nur als „Objekte in der Beziehung“, keine Hard-Selling-Werbung.
- Public-Domain-Filme: Kann „Der siebte Himmel“ weiterverwenden oder zu 1–3 anderen Public-Domain-Filmen wechseln; Tonspur entfernen, Frames ergänzen, Standbilder extrahieren, pro Film kennzeichnen.
- KI-Suche nach kostenlosen Stockmedien: Wenn der Kunde kein Material hat, suche zuerst 3 Kandidaten zur Ansicht für den Kunden; nach Bestätigung mit
scripts/fetch_stock.pyherunterladen/standardisieren. Nicht von YouTube/Streaming-Urheberrecht geschützte Inhalte herunterladen; keine Wasserzeichen/Bezahlschranken umgehen. Quelle, Lizenz, Credit ins Manifest eintragen. - Lizenzierte Stockmedien: Lizenz/Bestellung aufbewahren; keine Vorschau mit Wasserzeichen verwenden.
- Fotos/Archive/Porträts: Foto/Statue/Gemälde kennzeichnen; Public Domain oder Kundenlizenz; keine KI-generierten Bilder, die historische Figuren vorgeben.
- Reiner Text/Grafiken: Wenn kein Filmmaterial vorhanden ist, lass die Schrift und den Leerraum das Bild bestimmen; erzwinge kein Filmmaterial.
- Gemischt: Höchstens 2–3 Quellen; ein Grading, eine Schriftart, Credit pro Quelle.
Nach dem Austausch muss zwingend:
- Die
srcder entsprechendendata-asset-slotgeändert werden; - Die Videofenster mit
ffprobeneu berechnet werden; - Neue Standbilder extrahiert werden;
#credit,#credits .cols,素材来源.mdaktualisiert werden;python3 scripts/asset_report.py --manifest assets.manifest.json --project .ausgeführt werden.
Verwende keine urheberrechtlich geschützten Ausschnitte aus „Casablanca“, „Ein Herz und eine Krone“, „In the Mood for Love“ usw., es sei denn, der Kunde stellt eine ausdrückliche schriftliche Genehmigung zur Verfügung.
7. Prüfen, Rendern, Review
cd "$HOME/relationship-films/my-episode-slug"
om check . --samples 6
om render . --silent --fps 30 --workers 4 --video extract
om qa out/<new-file>.mp4
Das Rendern dauert etwa 25–35 Minuten (1080p/30fps/4 Worker, ca. 201 Sekunden). Verwende nicht 720p als Ersatz für 1080p.
Wenn om auf dem Rechner ein Wrapper-Skript ist (z. B. mit Node/Chrome-Umgebung), setze die OM-Variable darauf; scripts/ probiert nacheinander $OM, om, ~/.agents/skills/huashu-motion/bin/om.
Zwingend erforderlich:
om check0 Fehler;om qakeine Einzelbildsprünge;- Stichprobenartige Prüfung: Haken, jede Szenengrenze, Wende, Freud, Ende, Abspann;
- Unabhängiges Kalt-Review (ein anderer Agent ohne Beteiligung an der Produktion sieht sich nur das fertige Video an), mindestens MUST-FIX korrigieren;
ffprobebestätigt 1920×1080/30fps/korrekte Dauer/AAC 48 kHz Stereo;- Das gesamte Video dekodiert fehlerfrei; Lautstärke/Spitzenwert erfüllen die Standards.
8. Cover und Veröffentlichungstext
- Cover: Kopiere
cover/cover.html, ersetze Titel, Dauer, unteren Haken, Quelle; rendere 1080×1440 PNG + JPG. Das Vorlagenlayout: Obere kleine Markierung + großer Titel („falscher Mensch“ in Bernsteinfarbe) + Mitte Schirm/zwei Personen + unten ein Schlüsselsatz + Quelle. - Veröffentlichungstext: Erstelle nach
references/publishing.mdeine Lang-/Kurz-/Bilibili-Version, Top-Kommentar, Tags; verwende nicht den Text der vorherigen Episode direkt. - Behalte die notwendigen Einschränkungen im Abspann und in der Eckenmarkierung bei: „Filmbilder, keine realen Fälle“, „Erklärungsperspektive, keine Diagnose“ usw.
9. Lieferung
my-episode-slug/output/
<slug>_1080p_30fps.mp4
<slug>_字幕.srt
<slug>_封面_3x4.png
<slug>_封面_3x4.jpg
<slug>_发布文案.md
素材来源.md
项目说明.md
Harte Grenzen (keine Lieferung ohne Erfüllung)
- Neue Erzählung: Jede neue Episode muss eine neue aufgenommene/generierte Erzählung haben; das 194-Sekunden-Audio des Masters darf nicht mit den neuen Untertiteln kombiniert werden.
- Neuer Text:
index.htmldarf keine alten Textschnipsel des Masters enthalten; gehe die Liste inreferences/text-slots.mdPunkt für Punkt durch. - Urheberrecht/Material: Für Filme, Kundenmaterial, Stockmedien, Porträts, Musik und Toneffekte gibt es Quellen-/Lizenznachweise; jede Quelle hat einen Credit; Filmtitel/Jahr/Kennzeichnung „Nicht-realer Fall“ sind im Bild.
- Ethik: Nicht diagnostizieren, keine Opfer beschuldigen, keine Philosophen-Zitate fälschen, keine Filmcharaktere als reale Fälle darstellen.
- Bild: Kein Text wird abgeschnitten, keine Einzelzeichen in einer Zeile, kein Text über Untertiteln; wenn diese Episode immer noch die Schirm-Metapher verwendet, sind am Ende beide Personen unter dem Schirm.
- Ton: Erzählung klar, keine Übersteuerung, keine unerwarteten Stillephasen;
--silent-Rendering erhält die benutzerdefinierte Tonspur. - Review: MUST-FIX aus dem unabhängigen Kalt-Review wurden korrigiert oder es ist klar dokumentiert, warum sie beibehalten wurden.
Nicht tun
- Verwende nicht die alten Texte, Untertitel oder die alte Erzählung des Masters direkt.
- Betrachte „Der siebte Himmel“/Freud/Aristoteles/Kant nicht als feste Bestandteile; erzwinge sie nicht, wenn der Kunde sie nicht benötigt.
- Ändere nicht alle Szenen in dasselbe Bild + denselben Text; die Szenengrammatik des Masters variiert.
- Verwende keine blau-violetten Farbverläufe, Neon oder KI-artige Sternenhimmel-Hintergründe.
- Schneide nicht einfach das 16:9-Hauptvideo für das 3:4-Cover zu; verwende
cover/cover.html, um es neu zu layouten. - Schreibe keine Aussagen von Philosophen/Experten als „berühmte Zitate“ mit Anführungszeichen; verwende „Er hat diskutiert / Eine Verstehensweise“.
- Verwende kein urheberrechtlich geschütztes Filmmaterial, keine Kundengesichter, keine Chatverläufe oder nicht veröffentlichte Produkte ohne Genehmigung des Kunden.
- Lade keine Hintergrundvideos von YouTube/Bilibili/Streaming-Diensten/urheberrechtlich geschützten Quellen herunter; umgehe keine Wasserzeichen, Bezahlschranken oder regionale Beschränkungen; verwende nur ausdrücklich erlaubte kostenlose/lizenzierte Stockmedien.
- Verwende keine diagnostischen Labels wie „Opfer-Typ“ oder „Liebesrausch“ für Titel; verwende Fragen, keine Urteile.
Dateistruktur
references/client-brief.md: Kundenbrief, Inhaltsmatrix, Bestätigungspunkte.references/asset-strategy.md: Kundenaufnahmen/Public Domain/Stock/Fotos/reiner Text/gemischt, Multi-Quellen-Vereinheitlichung, Asset-Slots, Manifest.references/stock-sources.md: Suche, Lizenzierung, Download und Credit für Mixkit/Coverr/Pexels/Pixabay/Commons.references/beat-sheet.md: 16-Takt-Struktur, Proportionen, Bildereignisse, Textfunktion.references/visual-system.md: Farbpalette, Schriftarten, Kameraführung, Schirm/Regen, Ton, Cover.references/text-slots.md: Schrittweise Austauschliste.references/retiming.md: Methode zur Neuanordnung der Zeitleiste mit neuer Erzählung.references/rights-and-ethics.md: Quellen/Porträts/Ton/Ethik.references/publishing.md: Titel, Langtext, Kurztext, Bilibili-Beschreibung, Top-Kommentar, Tags.templates/index.template.html: Master-Komposition.templates/cover-3x4.template.html: 3:4-Cover.templates/assets.manifest.example.json: Vorlage für Asset-Manifest.scripts/new_episode.sh: Neues Projekt erstellen.scripts/prepare_media.sh: Frames ergänzen, Standbilder extrahieren, Quellen prüfen.scripts/render.sh: Render-Wrapper mit--silent.scripts/render_cover.sh: Rendertcover/cover.htmlin 1080×1440 PNG/JPG.scripts/verify.sh: Check/QA/ffprobe/Decodierung/Lautstärke.scripts/asset_report.py: Überprüft das Asset-Manifest auf Dateien/Rechte/Credits/Szenen.scripts/stock_search.py: Sucht online nach kostenlosen Stockmedien, gibt Kandidaten/Seiten/Lizenzen aus.scripts/fetch_stock.py: Lädt herunter, entfernt Tonspuren, normalisiert auf 1920×1080/30fps und aktualisiert das Manifest.