Communitygithub.com

Moosphan/cinematic-shortfilm

Vollständige Produktionsspezifikation und Workflow für cineastische Kurzfilme (70–300 Sekunden) – Skript/Sprechertext (Qwen3-TTS VoiceDesign männlich), Remotion + Canvas-Partikel/SVG-Visuals, codegenerierte Filmmusik, externer Mix und 4K-Auslieferung, Faktencheck und Veröffentlichungspaket. Für Projekte wie ‚Eine kurze Geschichte der Menschheit · Selbstporträt des Universums‘ oder ‚Abwärts · DESCENT‘ oder wenn deren Spezifikationen wiederverwendet werden sollen.

Was ist cinematic-shortfilm?

Diese Skill-Definition von Moosphan/cinematic-shortfilm bietet einen umfassenden, industrietauglichen Produktionsworkflow für cineastische Wissenschaftskurzfilme mit einer Länge von 70 bis 300 Sekunden. Sie deckt den gesamten Prozess von der Drehbucherstellung über die Sprachsynthese mit Qwen3-TTS (VoiceDesign, männliche Erzählerstimme) bis hin zur visuellen Gestaltung mit Remotion, Canvas-Partikeleffekten und SVG-Grafiken ab. Die Musik wird mittels numpy-Code komponiert, während der finale Mix und die 4K-Auslieferung über ffmpeg erfolgen. Die Spezifikation basiert auf den Erfahrungen der Filme „Eine kurze Geschichte der Menschheit · Selbstporträt des Universums“ und „Abwärts · DESCENT“ und enthält detaillierte Anleitungen zu Timing, Farbpaletten, Fonts, Partikelsystemen, Faktenchecks und einem umfassenden Fehlerprotokoll. Sie ist für Entwickler konzipiert, die mit Remotion und KI-gestützten Tools arbeiten, und legt besonderen Wert auf die Reihenfolge der Schritte (zuerst Audio, dann Bild), strikte Faktenkonsistenz und effizientes, fehlerresistentes Rendering.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Moosphan/hulk-skills/tree/HEAD/skills/cinematic-shortfilm

In Ihrer bevorzugten KI fragen

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

Dokumentation

Filmische Wissenschaftskurzfilme · Einheitlicher Produktionsstandard v1

Quelle: „Eine kurze Geschichte der Menschheit · Selbstporträt des Universums“ (4K / 4'58" / 14 Szenen) und „Abwärts · DESCENT“ (2K / 1'30" / 90 Sekunden vertikales Profil). Die Spezifikationen, Workflows, Stilrichtungen und die gemachten Fehler beider Filme sind hier vollständig dokumentiert. Lies vor einem neuen Film zuerst die Abschnitte 0 und 1, dann die für das aktuelle Projekt relevanten Kapitel.


0. Eiserne Regeln (Verstoß gegen eine führt zu Nacharbeit)

  1. Zuerst den Ton, dann das Bild. Erzeuge den Sprechertext Satz für Satz → miss die Dauer → leite daraus die Bildanzahl pro Szene ab. Niemals zuerst das Bild arrangieren und dann die Sprachaufnahme machen.
  2. Sprechertext und Daten müssen übereinstimmen: Die im Film vorkommenden Zahlen, Einheiten und Größenordnungen müssen mit der Faktenliste abgeglichen werden. Wenn der Sprechertext 98 sagt, darf das Bild nicht 90 schreiben. Einheitenfehler (z. B. Druck atm ↔ t/m²) sind zehnmal schwerwiegender als Farbfehler.
  3. Eine Einstellung, eine Information: Jede Szene hat nur eine Hauptthese + maximal 3 Messwerte; zusätzliche Informationen gehören in den Sprechertext.
  4. Text muss immer lesbar sein: Unter jedem Text muss ein Hintergrund oder eine Abdunkelung sein. Titel ≥ 30px, Messwerte ≥ 13px. Die Deckkraft von kleinem Text mindestens 0,6.
  5. Keine harten Schnitte: Zwischen Szenen werden Überblendungen / schwarze Atempausen / kontinuierliche Bewegungen verwendet. Ein Film verwendet nur eine Übergangssprache.
  6. Stumm rendern: <Audio> in Remotion grundsätzlich mit {false && ...} deaktivieren. Die Audiospur wird extern mit ffmpeg eingefügt (lange WAVs lassen das Rendern in der Audio-Vorverarbeitung hängen).
  7. Vor dem Rendern muss npx tsc --noEmit sauber sein, sonst rendert man eine Reihe fehlerhafter Bilder und muss von vorne beginnen.
  8. Drei Prüfungen vor der Auslieferung: Gesamtlänge prüfen, erste und letzte Bilder prüfen, kritische Übergänge Bild für Bild prüfen (jeweils 3–6 Bilder).

1. Standard-Pipeline (Reihenfolge einhalten, keine Schritte überspringen)

script.json ──► VO-Erstellung ──► VO-Nachbearbeitung ──► Dauertabelle ──► Zeitachse
                                   │
                                   └──► Filmmusik (numpy) ──► Mix ──► master.m4a
Bild (Remotion) ──► Stumm rendern ──► ffmpeg mux ──► Auslieferung

1.1 Drehbuch

  • Pro Film eine Datei: script.json, Felder id / act / text / caption.
  • Chinesischer Sprechertext ≈ 4,2 Zeichen/Sekunde; 60-Sekunden-Film ≈ 200–230 Zeichen, 90 Sekunden ≈ 300–340 Zeichen.
  • Zahlen in chinesischer Lesung schreiben („dreitausendsechshundertachtundachtzig“), sonst liest TTS sie falsch; im Bild werden dann arabische Ziffern verwendet.

1.2 Sprechertext (Qwen3-TTS VoiceDesign, männliche Erzählstimme)

INSTRUCT = ("Eine tiefe, ruhige, autoritative männliche Dokumentarstimme. Langsam, bedacht, filmisch. "
            "Tiefe Lage, warm, intim, zurückhaltende Emotion, Nahbesprechung. Gleichmäßiges, gleichbleibendes Tempo. Mandarin-Chinesisch.")
generate_audio(text=..., model=model, lang_code="zh", instruct=INSTRUCT,
               temperature=0.65, top_p=0.9, repetition_penalty=1.05,
               output_path="vo_raw", file_prefix=id)
  • Modell mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-bf16, mx.random.seed(11) fest.
  • Nach jeder Erstellung sofort die Dauer mit ffprobe prüfen: Wenn eine Datei > 30 Sekunden ist oder sich ganze Abschnitte wiederholen, hat TTS nachgelassen – Datei löschen und neu erstellen (Seed ändern oder repetition_penalty auf 1,12 erhöhen).
  • ASR-Gegenkontrolle: Mit mlx_whisper transkribieren und Zahlen/seltene Schriftzeichen prüfen (z. B. Wasserstoff → Qing, Silizium → Gui, Eisen → Ti).

1.3 Sprachnachbearbeitung (einheitliche Kette, keine Abweichungen pro Datei)

highpass=f=70,
asetrate=24000*0.912341, aresample=48000, atempo=1.096081, atempo=1.055,
equalizer=f=190:t=q:w=1.0:g=1.4, equalizer=f=3300:t=q:w=1.4:g=-1.8, equalizer=f=7200:t=q:w=1.8:g=-1.0,
acompressor=threshold=0.14:ratio=2.2:attack=10:release=200,
loudnorm=I=-20:TP=-3:LRA=7

Anschließend Stille am Anfang und Ende anhand der 20-ms-Energiehüllkurve abschneiden, Pausen über 0,34 s auf 0,34 s reduzieren und mit 12 ms / 50 ms Ein-/Ausblenden versehen.

1.4 Zeitachse

  • frames = round(seconds * 24); Sprechertext-Versatz = Szenenstart + Lead (normalerweise 18–24 Bilder).
  • Pro Szene: lead + vo + tail, tail 16–90 Bilder (genügend Platz für das Ende).
  • timeline.ts generieren (automatisch, nicht manuell bearbeiten), Felder { id, from, dur, voAt, voDur }.

1.5 Filmmusik (rein codegeneriert, numpy)

  • Soll Struktur haben, nicht durchgehend sein: Nach Zeitcode „Ereignisse“ schreiben, nicht eine durchgehende Pad-Spur.
  • Harmonien: Alle 12–18 Sekunden wechseln, an den Übergängen überblenden. Nur kontinuierliche Töne über 55 Hz im Bass.
  • Kein tieffrequentes Dröhnen: Zuschauer beschreiben es als „Wummeln“ oder „zu laut“. Bass bei 85–100 Hz abschneiden, lange Töne reine Sinuswelle ohne Oktav-Obertöne.
  • Ruhe priorisieren: Musikpegel ≈ −20 ~ −27 dB relativ zum Sprechertext; wenn der Sprechertext einsetzt, die Musik um 40–70% absenken (Sidechain-Ducking).
  • Endgültige Lautstärke: Dokumentation −18 ~ −24 LUFS (nicht −14, das ist für Streaming-Popmusik).
  • Tutorial-artige „Soundeffekte“ (Eintauch-Geräusch, Sonar, metallisches Quietschen) nur auf ausdrücklichen Kundenwunsch hinzufügen; wurden bereits einmal abgelehnt, standardmäßig nicht verwenden.

1.6 Bild (Remotion)

Siehe Abschnitt 2.

1.7 Rendern und Zusammenführen

npx tsc --noEmit
npx remotion render Film4K out/silent.mp4 --codec=h264 --crf=18 --concurrency=7
ffmpeg -i out/silent.mp4 -i public/audio/master.m4a \
  -map 0:v -map 1:a -c:v copy -c:a aac -b:a 320k -shortest -movflags +faststart out/final.mp4
  • 4K = 1920×1080 Layout + transform: scale(2); 2K = scale(2560/1920). Nur ein Layout schreiben.
  • Lokale Nacharbeit: Nur den betroffenen Bildbereich neu rendern → ffmpeg trim/concat für drei Segmente → -c:v copy nur die Tonspur ersetzen; wenn das Bild geändert werden muss, die drei Segmente neu encodieren und zusammenfügen (ca. 5–10 Minuten).

2. Visuelles System

2.1 Hintergrund

  • Leinwand 1920×1080, 24 fps; AbsoluteFill mit nahezu schwarzem Hintergrund (#01050A / #010407), niemals reines Schwarz #000.
  • Dreischichtige Struktur: Hintergrund-Verlauf → Volumenlicht/Partikel → Informationsebene (Text, Tiefenmaßstab, Messwerte).
  • Einheitlicher Abschluss: Vignette + statisches Grain (0.04, muss animate={false} sein, dynamisches Korn lässt feine Linien flimmern).

2.2 Schriftarten

  • Titel/Gedichte: Songti SC (Serife), Zeichenabstand 0,4–0,6 em, große Schriftgröße (90–250 px).
  • Daten/Messwerte: SF Mono, 8–14 px, Zeichenabstand 0,16–0,36 em.
  • Erläuterungen: PingFang SC, 14–19 px, Deckkraft 0,55–0,7.

2.3 Farbabstimmung (die „Weltanschauungsfarben“ der beiden Filme)

FilmtypOben hellMitteUntenAkzentfarbe
Kosmos / Zeit#050506 HintergrundCreme #F3E7D0—Bernstein #E8B06A
Ozean / Tiefe#1E7C93 Wasseroberfläche#07232E#01050ACyan #4FE0C0

Regel: Ein Film verwendet nur eine Akzentfarbe; Ausnahmen wie Biolumineszenz / Hydrothermale Quellen maximal zwei, jede an eine physikalische Größe gebunden.

2.4 Partikel-Engine (Canvas 2D)

  • Deterministischer Zufall (Hash), gleicher Frame immer gleiches Ergebnis; Wolkentypen: ball / filament / disk / globe-surface / sphere-shell / figure / city / helix / neuron / glyph / single / text / timeline.
  • Zweimal zeichnen: zuerst großer Radius, niedrige Deckkraft für Leuchten, dann kleiner Radius, hohe Deckkraft für den Kern; globalCompositeOperation = 'lighter'.
  • Punktwolkengrenzen müssen außerhalb des Bildes liegen: makeCloud('text', n) erzeugt eine 3×1,2-Box, die nach Projektion rechteckige Ränder zeigt (der häufigste von Zuschauern gemeldete Bug). Mit expand(cloud, kx, ky, kz) um den Faktor 2,4–3,2 vergrößern.

2.5 Lebewesen und Gelände (SVG)

  • Alle seitlich, Kopf in Bewegungsrichtung; Augen, Flossen, Maulinie, Kehlfalten, Seepocken usw. mindestens 4 anatomische Details, sonst sieht es aus wie eine Textur.
  • Silhouette + Randlicht (0,2–0,35 Deckkraft); kein feTurbulence auf dem Körper verwenden (sieht sonst wie Granit aus).
  • Gelände: Mehrere Polylinien + Gesteinsschichten + Schutt + Sedimente, keine Dreiecke; Berg keine Basislinie zeichnen (sieht sonst wie ein Diagramm aus).
  • Auftreten von Lebewesen an „Tiefe/Zeit“ binden, nicht mehr als drei Arten gleichzeitig zeigen.

2.6 Informationsebene (HUD)

  • Schicht-Namensschild: Dunkler Farbverlaufshintergrund (0,72→0) + linker 2px Akzentfarbbalken + Chinesisch 30–35 px reines Weiß.
  • Messwerte: Pro Schicht 2–3 Gruppen, LABEL 8,5 px / VALUE 13–14,5 px.
  • Skalenbalken: Skalenstriche + aktueller Wert fett; aktueller Wert muss in Echtzeit berechnet werden, nicht hartcodiert (sonst Widerspruch zum Zeiger).
  • Alle Zahlen mit Einheiten; Einheiten durch Leerzeichen getrennt („1.093 atm“).

2.7 Übergänge

  • Erste Wahl: Durchgehende Bewegung (One-Shot): Tiefe/Zeit ist eine kontinuierliche Größe, der Inhalt bewegt sich mit ihr ins und aus dem Bild.
  • Zweite Wahl: Kurze Überblendung (4–6 Bilder, nur die neue Einstellung blende ein, die alte bleibt deckend und wird überlagert) – Helligkeit bricht nicht ein, HUD überlappt nicht.
  • Vermeiden: Diagonaler Lichtwischer, lange Kreuzblenden, vertikale Schübe (legen dunkle Kanten frei), harter Schnitt nach Schwarz (außer bei physisch motivierten Ereignissen wie „Eintauchen ins Wasser“).

3. Fakten und Daten

  • Eine Datei facts.md erstellen: Jeder Eintrag mit Zahl / Einheit / Quellenbereich / Wie im Film verwendet.
  • Drei häufigste Fehlerquellen: ① Einheitenumrechnung (1 atm ≈ 10,3 t/m² ≈ 1,03 kgf/cm²); ② Verwechslung von „Durchschnitt“ und „Extremwert“ (durchschnittlich 3.688 m vs. tiefster Punkt 10.935 m); ③ Vereinfachte Darstellung (90 vs. 98 Elemente).
  • Im gesamten Film eine einheitliche, präzise Version verwenden; Sprechertext und Bild müssen aus derselben Quelle stammen.

4. Auslieferungspaketliste

deliverables/
   Filmname-4K-Sprecher.mp4           # Hauptversion
   Filmname-4K-Reine-Musik.mp4         # Bei Bedarf
   Poster-4K.png / Vorschau-4K.png    # Keyframe-Composition
   Cover/                        # 1920 PNG + 4K PNG + 1146×717 JPG
   Regieanmerkungen.md                # Struktur, Ton, Änderungsprotokoll
   Veröffentlichungstext-Bilibili.md  # Titel/Beschreibung/Tags/Pinnkommentar/Cover-Vorschlag
   Fakten.md

Veröffentlichungspaket muss enthalten: KI-Erstellungs-Hinweis, Aufteilung der Arbeit (was das Modell gemacht hat, was der Mensch), eine Version der „leicht zu übersehenden Zahlen“ als Pinnkommentar.


5. Fehlerprotokoll (nach Häufigkeit sortiert)

PhänomenGrundursacheReparaturmethode
Rendern bleibt in Audio-Vorverarbeitung hängenLange WAV + <Audio>Stumm rendern, extern muxen
Text auf Partikeln verschwommenKein Hintergrund + Deckkraft 0,4–0,5Hintergrund + reines Weiß + Schriftgröße erhöhen
Regelmäßige Rechtecke im Bild (Zuschauer fragen am häufigsten)Punktwolken-Box-Grenze im Bildexpand() um Faktor 2,4–3,2 vergrößern
Feine Linien / Berge flimmernDynamisches FilmkornGrain animate={false}
Wal / Fisch „schwimmt rückwärts“Kopf und Schwanz vertauscht, Auge am SchwanzSeitenansicht neu erstellen: Kopf in +x-Richtung
Berge sehen aus wie DiagrammPfad mit L ... Z horizontale Basislinie abgeschlossenUnterkante aus dem Bild ragen lassen
Übergang unterbricht BlickLichtwischer / lange BlendeKurze Überblendung oder durchgehende Bewegung
Filmmusik „dröhnt“Dauerhafter Bass 27–80 HzHochpass 85–100 Hz, Sub-Drone entfernen
Audio-DesynchronisationBild-takt nicht auf Sprechertext-Inhalt abgestimmtTiefen-/Zeitkurve nach Sprechertext-Inhalt neu anordnen
TTS-Einzeldatei 600 sModelldegenerationsschleifeLöschen und neu erstellen, repetition_penalty 1,12
4K-Nacharbeit zu langsamKompletter Film neu rendernNur geänderte Bildbereiche rendern + concat

6. Position der beiden Referenzfilme

  • „Eine kurze Geschichte der Menschheit · Selbstporträt des Universums“: ~/dsh-video-remotion/film/src/scenes/*, 14 Szenen, 4K, 4'58".
  • „Abwärts · DESCENT“: ~/dsh-video-remotion/film/src/ocean/*, 6 Schichten, 2K, 1'30"; Sprechertext und Filmmusik in ~/dsh-video-remotion/ocean/.
  • Beide teilen src/engine/particles.tsx (Partikel), src/engine/atmos.tsx (Vignette/Grain), src/theme.ts (Schriftarten/Farbabstimmung/Animation).

Verwandte Skills