youtube/remotion/src/folge01/plan.ts
Lara 336c2121d5 Folge 1 „Zu klein, zu groß“ in Remotion: Plan, Texte DE/ES/FR, Herbstgarten, Szene 2
- Drehbuch: Umsetzungsplan für Remotion statt Higgsfield-Bildliste
- src/folge01/: Texte in drei Sprachen, Intro, Szene 2 „Wer raschelt da?“, Outro
- Orte garten_herbst und garten_herbst_abend (volle Herbstkrone, ohne Holzstapel)
- natur.tsx: Apfel, Blume, Laubhaufen (wackelt, wird gestaucht)
- figur.tsx: fehlt eine Clip-Datei, nimmt die Figur Standbilder
  (Gehen: die vier Geh-Bilder) – so lässt sich auch ohne /shared rendern
- Root: Ort-Kompositionen mit mehreren Unterstrichen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 12:07:57 +01:00

29 lines
1.2 KiB
TypeScript

import {SPRACHE, type FolgenTexte} from '../baukasten/sprache';
import {plane as basis, type PlanOptionen, type Zeile} from '../baukasten/zeit';
import DE from './texte/de.json';
import ES from './texte/es.json';
import FR from './texte/fr.json';
import STIMMEN_DE from './stimmen/de.json';
import STIMMEN_ES from './stimmen/es.json';
import STIMMEN_FR from './stimmen/fr.json';
// Sprechtexte stehen nur in texte/<sprache>.json (Schlüssel „szene/zeile“),
// die Szenen enthalten nur Ablauf und Bewegung. Aufnahmen je Sprache in
// stimmen/<sprache>.json bzw. public/stimmen/folge01/<sprache>/ (erzeugt von
// werkzeuge/stimmen.mts).
export const TEXTE: FolgenTexte = {de: DE, es: ES, fr: FR}[SPRACHE];
const AUFNAHMEN = {de: STIMMEN_DE, es: STIMMEN_ES, fr: STIMMEN_FR}[SPRACHE];
export const TITEL = TEXTE.titel;
// Zeitplan einer Szene dieser Folge, mit den Texten der gewählten Sprache
export const plane = (szene: string, zeilen: Zeile[], opt: PlanOptionen = {}) =>
basis(
zeilen.map((z) => {
if (z.text !== undefined || !z.wer) return z;
const text = TEXTE.zeilen[`${szene}/${z.id}`];
return {...z, text: text ?? `[fehlt: ${szene}/${z.id}]`};
}),
{...opt, szene, aufnahmen: AUFNAHMEN, ordner: `stimmen/folge01/${SPRACHE}`},
);