Was macht Khmer-Geld-Erklärvideo?
Jedes Video folgt zwei gewöhnlichen Personen durch dieselbe Geldentscheidung, rechnet die Arithmetik laut vor und befähigt den Zuschauer, selbst zu entscheiden. Die Zuschauer bleiben wegen der Zahlen und vertrauen dem Kanal, weil die Zahlen ehrlich sind.
Das funktionierende Beispiel ist das Tontine-vs-Bank-Video in templates/project/ (src/story/).
Regeln, die den Kanal schützen
- Nur Originalarbeit. Stilrecherche kann andere Kanäle ansehen, aber niemals deren Skripte, Charaktere, Thumbnails, Logos oder Einstellungen kopieren und sie niemals in einem Video oder einer Beschreibung nennen. Unsere Besetzung, Geschichten und visuelle Identität (einschließlich des Krama-tragenden Führers) sind unser Eigentum.
- Ehrliches Geld. Zeige die Annahmen auf dem Bildschirm. Gib beide Seiten an, einschließlich der Risiken der Option, die am besten aussieht. Gib Fragen zum Stellen, keine persönliche Empfehlung. Jede Beschreibung endet mit einem Hinweis „Keine Finanzberatung“ und besagt, dass die Charaktere fiktiv sind.
- Echte Menschen bleiben außen vor. Betrugsvorwürfe gegen genannte Personen oder Unternehmen sind nicht die Aufgabe dieses Formats. Beschreibe Muster aus gemeldeten Fällen, die in der Beschreibung verlinkt sind.
- Ausgaben: Sprachkosten KiriTTS-Guthaben: Der 1.100-Zeichen-Pilot verwendete 433, ein 9-minütiges Video benötigt also etwa 3.000-3.500. Überprüfe
get_usagevor dem Vertonen, teile dem Nutzer die Schätzung mit und lasse das Skript zuerst genehmigen.
Pipeline
1. Thema
Wenn der Nutzer kein Thema vorgibt, schlage 3 mit jeweils einer Zeile vor. Ein starkes Thema ist eine Gabelung, die jeder in Kambodscha kennt, hat Zahlen, die belegt werden können, und hat eine Wendung, bei der die offensichtliche Antwort falsch oder unvollständig ist. Suche nach aktuellen Themen, bevor du Vorschläge machst.
Lege gleich zu Beginn fest und frage nur nach dem, was nicht bereits bekannt ist: Thema, Stimme (Standard Maly; das Konto kann Klonstimmen haben, siehe list_voices) und Kanalname (CHANNEL in story.tsx; leer lässt das Abzeichen verschwinden).
2. Recherche und Arithmetik
- Verwende primäre kambodschanische Quellen, wo sie existieren: Nationalbank von Kambodscha, Nationales Statistikinstitut, Bankzinsblätter, Steuerunterlagen von Anwaltskanzleien, seriöse Presse. Notiere Veröffentlichungsdaten: Zinssätze und Steuerregeln ändern sich.
- Schreibe
scripts/calc.pyfür das Thema neu. Jede Zahl auf dem Bildschirm und im Erzähltext stammt daraus und wird insrc/story/numbers.jsongeschrieben. Füge Plausibilitäts-Asserts hinzu. Führe mehrere Szenarien durch, einschließlich eines, in dem der „Gewinner“ verliert. - Trenne, was belegt ist, von dem, was angenommen wird, und kennzeichne angenommene Werte auf dem Bildschirm mit
<Note>. Wenn eine Tatsache nicht belegt werden kann, rahme sie entweder als klare Annahme ein oder lass sie weg und teile dies dem Nutzer mit.
3. Skript
Etwa 7.000-9.000 Khmer-Zeichen für 8-10 Minuten; die Stimme des Pilots lief mit etwa 15 Zeichen pro Sekunde. Ein Beat ist ein oder zwei Sätze von etwa 70 Zeichen, ein 9-minütiges Video hat also etwa 100-120 Beats. Lese references/script-formula.md für die Struktur und die Schreibregeln auf Khmer.
Schreibe es in src/story/script.json (Szenen enthalten Beats; Format siehe unten) und zeige dem Nutzer das vollständige Khmer-Skript mit den Quellen und Annahmen. Warte auf Genehmigung vor dem Vertonen. Der Nutzer ist die Autorität für khmerische Formulierungen und Begriffe.
4. Projekt einrichten
Kopiere templates/project/ in einen neuen Ordner, führe npm install aus und ersetze dann src/story/script.json, src/story/story.tsx und scripts/calc.py. Lasse src/engine/ in Ruhe, es sei denn, du fügst etwas Wiederverwendbares hinzu. Verwende einen kurzen Pfad (siehe Fallstricke).
5. Looktest vor dem Verbrauch von Guthaben
python scripts/calc.py
python scripts/build_timeline.py --placeholder
python scripts/check_numbers.py
npx tsc --noEmit
node scripts/stills.mjs out/look/x_ 100,400,900 0.5
Betrachte die Frames selbst, anhand der Checkliste in references/visual-style.md. Nach dem Vertonen überprüfe jede Zeile zweimal, in der Nähe ihres Anfangs und in der Nähe ihres Endes: Standbilder, die nur am Ende aufgenommen werden, verbergen Karten, die leer bleiben, während die Stimme zu einer Zahl aufbaut. Schreibe Szenen einzeln und überprüfe jede, denn Layoutprobleme sind jetzt weitaus billiger zu beheben.
6. Vertonung
python scripts/tts_todo.py
Dies listet nur Beats auf, die neu oder geändert sind. Rufe für jeden KiriTTS text_to_speech mit dem tts-Feld (oder text) des Beats und einer konsistenten Stimme auf, wobei die Auslieferungseinstellungen nicht gesetzt sind. Lade die URL nach voice/<id>.mp3 herunter (Links laufen in etwa einem Tag ab) und zeichne sie mit python scripts/tts_todo.py --done <id> <speech_id> auf. Ein Clip pro Beat bedeutet, dass ein falsches Wort einen Satz zur Korrektur kostet.
Wortgenaue Hinweise sind optional: Speichere die Ausgabe von get_word_timestamps als voice/<id>.words.json und verwende dann at('b03', 'word'). Brüche wie at('b03', .5) reichen normalerweise aus. Höre Zahlen, Namen und Fremdwörter; wenn KiriTTS eines falsch liest, füge eine tts-Schreibweise für diesen Beat hinzu.
7. Timeline, Ton, Rendern
python scripts/build_timeline.py
python scripts/make_audio.py
npx remotion render src/index.ts Main out/video.mp4 --codec h264 --crf 18 --muted
ffmpeg -y -i out/video.mp4 -i out/mix.wav -map 0:v:0 -map 1:a:0 -c:v copy -c:a aac -b:a 192k -shortest out/final.mp4
python scripts/qa.py out/final.mp4 out/qa
npx remotion still src/index.ts Thumbnail out/thumb.png
Lange Videos brauchen eine Weile, also führe den Render-Vorgang im Hintergrund aus. Rendere einen kurzen Piloten der ersten Szenen zur Überprüfung durch den Nutzer, bevor das vollständige Video erstellt wird, wenn der Look oder die Stimme neu ist.
8. Qualitätssicherung
Lese out/qa/report.md und betrachte jedes Kontaktblatt. Untersuche schwarze oder eingefrorene Frames und Lautstärken weit weg von -15 LUFS. Überprüfe, ob jede eingeblendete Zahl mit numbers.json übereinstimmt und kein Khmer-Text abgeschnitten oder überlappend ist.
9. Lieferung
Sende die mp4 und das Thumbnail mit SendUserFile. Schreibe außerdem out/description.md auf Khmer, das Folgendes enthält: einen Aufhänger, eine ausgearbeitete Zusammenfassung mit den Annahmen, Risiken, Fragen zum Selbststellen, die Hinweise zu fiktiven Charakteren und „Keine Finanzberatung“, eine Aufforderung zum Kommentieren, Kapitel mit echten Zeitstempeln aus timeline.json, Quellenlinks und Hashtags. Lade niemals hoch oder veröffentliche ohne Aufforderung des Nutzers.
script.json-Format
{ "gap": 0.3, "scene_gap": 0.7, "tail": 1.5,
"scenes": [{ "id": "Hook", "chapter": 0, "music": "light", "beats": [
{ "id": "h1", "text": "Khmer-Satz", "tts": "optionale gesprochene Schreibweise", "sfx": [{"at": 0.75, "type": "coin"}] }
]}]}
- Die
ideiner Szene muss mit einer Komponente inSCENESinstory.tsxübereinstimmen. chapterindiziertCHAPTERS; 0 ist der Aufhänger und blendet die Leiste aus.music:light,tenseoderresolve.sfx-Typen: pop whoosh coin cash ding thud tick paper sad tada alarm.atist ein Bruchteil des Beats. Verwende sie bei Enthüllungen, nicht in jeder Zeile.
Szenen schreiben
Lies src/story/story.tsx: Es ist die Referenz dafür, wie eine Szene geschrieben wird. Kurz gesagt, const {f, at} = useScene() gibt die Frame- und Beat-Zeiten, und jedes Element tritt durch <Show at={...} out={...} x y> ein. Nichts ist in Sekunden getaktet, sodass eine Neuvertonung niemals eine Szene zerstört.
Verfügbare Teile:
engine/Figure: Gesichter, Posen, Gehen und Requisiten in der Hand. Definiere jeden Charakter einmal oben in der Geschichte.engine/Props: Title, Label, Chip, Tag, Bubble, ThoughtCloud, Jar, Coin, Bill, MoneyBag, Calendar, Bank, House, Stall, Notebook, Phone, Rock, Umbrella, StormCloud, CheckMark, VsBadge, Arrow, FlyingMoney, Note, Moto, NameChip.engine/Charts: Card, Counter, Bars, LineChart, MonthGrid undmoney().engine/Stage:mood,tint,zoom,focus.
Wenn ein Thema eine neue Requisite benötigt, zeichne sie im gleichen Tintenstil in der Story-Datei und verschiebe sie nach engine/Props.tsx, wenn sie wiederverwendbar ist.
Fallstricke (jeder ist aufgetreten)
- Windows-Pfadlimit. Remotion schlägt fehl, wenn der Projektpfad so lang ist, dass Dateien in
node_modules260 Zeichen überschreiten:Failed to launch the browser process/spawn ... chrome-headless-shellbei Standbildern undgetExecutableDir-Fehler bei vollständigen Renderings. Das Verweisen auf einen anderen Browser behebt das zweite Problem nicht. Halte das Projekt auf einem kurzen Pfad wieD:/videos/<name>(unter etwa 100 Zeichen) und führe dortnpm installaus. - Temporärer Speicher. Jedes Bundle wird in den temporären Ordner kopiert und nicht entfernt. Wenn C: knapp ist, setze
RENDER_TMPfürstills.mjsundTEMP/TMPfür die CLI auf ein größeres Laufwerk. <Show>standardmäßig x=0, y=0, was einen zentrierten Titel zur Hälfte außerhalb des Bildschirms platziert. Gib immerx={960}für zentrierte Elemente an.- Koulens Ziffern werden schlecht gelesen („12“ sieht aus wie „I2“).
Titlesetzt bereits Ziffern und Symbole in der Körperschrift; umgehe es nicht. - Tags über Gesichtern. Der Kopf einer stehenden Figur erreicht etwa y=470 und erhobene Hände gehen höher. Platziere Tags bei y≈300-350 über einer Figur.
- Remotion schreibt mit
--mutedkeine brauchbaren Audiodaten. Muxe daher immer wie gezeigtmix.wavdanach ein. - Bash-Heredocs mit viel TSX können in einigen Shells unter Windows nicht geparst werden. Schreibe Quelldateien mit dem Dateiwerkzeug.