diff --git a/drehbuecher/folge02-pino-ist-muede/de.md b/drehbuecher/folge02-pino-ist-muede/de.md index 4579fd9..70e5ab0 100644 --- a/drehbuecher/folge02-pino-ist-muede/de.md +++ b/drehbuecher/folge02-pino-ist-muede/de.md @@ -90,31 +90,33 @@ Pino gähnt den ganzen Tag, und Lulu und die Erzählstimme erklären den Winters **ERZÄHLSTIMME:** Igel bauen sich für den Winter ein Nest. Aus ganz vielen Blättern, unter einer Hecke oder einem Holzstapel. Da ist es trocken und warm. -**BILD:** Noa sammelt bunte Blätter und legt sie vor dem Holzstapel in eine Reihe. Pino schaut zu. +**BILD:** Noa hockt sich vor den Holzstapel, dort wo das Nest hin soll. Sie schaut in die Kamera. -**NOA:** Zählst du mit? Eins … zwei … drei … vier … fünf! +**NOA:** Pino braucht ein Nest aus ganz vielen Blättern. Hilfst du mir beim Zählen? Eins … zwei … drei … vier … fünf! -*Nach jeder Zahl eine kurze Pause zum Mitzählen.* +*Nach jeder Zahl eine kurze Pause zum Mitzählen. Bei jeder Zahl wirft Noa ein Blatt auf den Nest-Haufen.* + +**NOA:** Hm. Das sind noch zu wenige. **BILD:** Lulu streckt den Hals ganz hoch in den Apfelbaum und zupft mit dem Maul die letzten Blätter ab. -**LULU:** Hier oben hängen noch welche! Die erreicht sonst keiner. +**LULU:** Ich helfe euch! Hier oben hängen noch welche. -**BILD:** Lulu kommt mit einem dicken Bündel Blätter herunter. Ihre Nase kitzelt, sie kneift die Augen zu … und niest. Die Blätter fliegen in alle Richtungen und regnen auf Noa und Pino herab. +**BILD:** Lulu kommt mit einem dicken Bündel Blätter herunter. Ihre Nase kitzelt, sie kneift die Augen zu … und niest. Die Blätter fliegen in alle Richtungen, der Wind trägt sie bis zum Nest. *Hatschi! Rascheln, alle lachen.* **LULU:** Oh! Entschuldigung! -**NOA** *(lacht)***:** Macht nichts. Jetzt haben wir noch mehr Blätter. +**NOA** *(lacht)***:** Macht nichts! Jetzt haben wir ganz viele Blätter. **BILD:** Zu dritt schieben sie die Blätter unter den Holzstapel. Pino rollt sie mit der Nase zurecht. Ein rundes, kuscheliges Nest entsteht. Pino schaut heraus, nur Nase und Augen. -**ERZÄHLSTIMME:** Ein Igelnest braucht ganz viele Blätter. Wenn ihr im Garten einen Laubhaufen liegen lasst, schenkt ihr einem Igel vielleicht ein Winterbettchen. +**ERZÄHLSTIMME:** Jetzt ist das Nest schön weich und warm. Wenn ihr im Garten einen Laubhaufen liegen lasst, schenkt ihr einem Igel vielleicht ein Winterbettchen. **BILD:** Die drei nebeneinander, die Figuren wippen im Takt. Clips 47–50 aus Folge 1. -*Refrain „Einer klein und einer groß“, einmal.* +*Refrain „Einer klein und einer groß“, einmal, gesungen (Suno-Lied aus Folge 1).* ## Szene 5: Pino will nicht schlafen (3:10–3:45) diff --git a/drehbuecher/folge02-pino-ist-muede/es.md b/drehbuecher/folge02-pino-ist-muede/es.md index db3867f..5f04f19 100644 --- a/drehbuecher/folge02-pino-ist-muede/es.md +++ b/drehbuecher/folge02-pino-ist-muede/es.md @@ -54,21 +54,23 @@ Spanische Sprechfassung für ElevenLabs, Entwurf vom 26.10.2026. Neutrales Spani **NARRACIÓN:** Para el invierno, los erizos se hacen un nido. Con muchísimas hojas, debajo de un seto o de un montón de leña. Allí está seco y calentito. -**NOA:** ¿Cuentas conmigo? Uno… dos… tres… cuatro… ¡cinco! +**NOA:** Pino necesita un nido con muchísimas hojas. ¿Me ayudas a contar? Uno… dos… tres… cuatro… ¡cinco! -*Después de cada número, una pausa corta para contar.* +*Después de cada número, una pausa corta para contar. Con cada número, Noa echa una hoja al montón del nido.* -**LULU:** ¡Aquí arriba quedan algunas! Nadie más llega hasta aquí. +**NOA:** Mmm. Todavía son muy pocas. + +**LULU:** ¡Yo los ayudo! Aquí arriba quedan algunas. *¡Achís! Crujido de hojas, todos se ríen.* **LULU:** ¡Uy! ¡Perdón! -**NOA** *(se ríe)*: No pasa nada. Así tenemos todavía más hojas. +**NOA** *(se ríe)*: ¡No pasa nada! Ahora tenemos muchísimas hojas. -**NARRACIÓN:** Un nido de erizo necesita muchas hojas. Mamás y papás: si dejan un montón de hojas en el jardín, a lo mejor un erizo encuentra allí su camita para el invierno. +**NARRACIÓN:** Ahora el nido está blandito y calentito. Mamás y papás: si dejan un montón de hojas en el jardín, a lo mejor un erizo encuentra allí su camita para el invierno. -*Estribillo „Uno pequeño y otra alta“, una vez (ver Episodio 1).* +*Estribillo „Uno pequeño y otra alta“, una vez, cantado (canción de Suno del Episodio 1).* ## Escena 5: Pino no quiere dormir (3:10–3:45) diff --git a/drehbuecher/folge02-pino-ist-muede/fr.md b/drehbuecher/folge02-pino-ist-muede/fr.md index f79dae2..45f3b23 100644 --- a/drehbuecher/folge02-pino-ist-muede/fr.md +++ b/drehbuecher/folge02-pino-ist-muede/fr.md @@ -54,21 +54,23 @@ Französische Sprechfassung für ElevenLabs, Entwurf vom 26.10.2026. Die Figuren **NARRATION :** Pour l'hiver, les hérissons se construisent un nid. Avec plein de feuilles, sous une haie ou sous un tas de bois. Là, c'est sec et bien chaud. -**NOA :** Tu comptes avec moi ? Un… deux… trois… quatre… cinq ! +**NOA :** Pino a besoin d'un nid avec plein de feuilles. Tu m'aides à compter ? Un… deux… trois… quatre… cinq ! -*Après chaque chiffre, une petite pause pour compter.* +*Après chaque chiffre, une petite pause pour compter. À chaque chiffre, Noa lance une feuille sur le tas du nid.* -**LULU :** Il en reste là-haut ! Personne d'autre ne peut les attraper. +**NOA :** Hum. Il n'y en a pas encore assez. + +**LULU :** Je vous aide ! Il en reste là-haut. *Atchoum ! Bruissement de feuilles, tout le monde rit.* **LULU :** Oh ! Pardon ! -**NOA** *(rit)* **:** Ce n'est pas grave. Comme ça, on a encore plus de feuilles. +**NOA** *(rit)* **:** Ce n'est pas grave ! Maintenant, on a plein de feuilles. -**NARRATION :** Un nid de hérisson a besoin de beaucoup de feuilles. Chers parents : si vous laissez un tas de feuilles dans votre jardin, vous offrez peut-être un petit lit d'hiver à un hérisson. +**NARRATION :** Maintenant, le nid est tout doux et bien chaud. Chers parents : si vous laissez un tas de feuilles dans votre jardin, vous offrez peut-être un petit lit d'hiver à un hérisson. -*Refrain « Un tout petit, une très grande », une fois (voir Épisode 1).* +*Refrain « Un tout petit, une très grande », une fois, chanté (chanson Suno de l'Épisode 1).* ## Scène 5 : Pino ne veut pas dormir (3:10–3:45) diff --git a/remotion/src/baukasten/geraeusche.json b/remotion/src/baukasten/geraeusche.json index d35a4db..00de422 100644 --- a/remotion/src/baukasten/geraeusche.json +++ b/remotion/src/baukasten/geraeusche.json @@ -19,5 +19,6 @@ "zugvoegel": {"sekunden": 5, "beschreibung": "A flock of wild geese honking high in the sky, flying away into the distance, gentle and far."}, "malen": {"sekunden": 4, "beschreibung": "Crayon scribbling and drawing on paper on a wooden table, close and soft."}, "kribbeln": {"sekunden": 2, "beschreibung": "Cute magical sparkle twinkle, soft glockenspiel shimmer, cartoon, happy."}, - "schlaff": {"sekunden": 2, "beschreibung": "Soft short descending cartoon slide whistle, a little sad but cute and gentle."} + "schlaff": {"sekunden": 2, "beschreibung": "Soft short descending cartoon slide whistle, a little sad but cute and gentle."}, + "niesen": {"sekunden": 1.5, "beschreibung": "A single cute, funny cartoon sneeze 'ha-tschi!' from a friendly young animal character, light and playful, like in a preschool cartoon. No speech, no music."} } diff --git a/remotion/src/baukasten/natur.tsx b/remotion/src/baukasten/natur.tsx index 4ff9591..9fdc08c 100644 --- a/remotion/src/baukasten/natur.tsx +++ b/remotion/src/baukasten/natur.tsx @@ -43,7 +43,7 @@ export const Blaetterwind: React.FC<{anzahl?: number; seed?: string; tempo?: num }; // Blätterregen nach dem Niesen: Blätter fliegen ab `start` aus (x0, y0) und landen auf `boden`. -export const Blaetterregen: React.FC<{start: number; x0: number; y0: number; boden: number; anzahl?: number; aus?: number}> = ({start, x0, y0, boden, anzahl = 34, aus = 1e9}) => { +export const Blaetterregen: React.FC<{start: number; x0: number; y0: number; boden: number; anzahl?: number; aus?: number; seed?: string}> = ({start, x0, y0, boden, anzahl = 34, aus = 1e9, seed = 'regen'}) => { const frame = useCurrentFrame(); const t = frame - start; const deck = Math.max(0, 1 - (frame - aus) / 60); @@ -51,7 +51,7 @@ export const Blaetterregen: React.FC<{start: number; x0: number; y0: number; bod return ( <> {new Array(anzahl).fill(0).map((_, i) => { - const r = (k: string) => random(`regen${k}${i}`); + const r = (k: string) => random(`${seed}${k}${i}`); const winkel = -Math.PI * (0.05 + 0.9 * r('w')); const v = 14 + r('v') * 22; // erst schneller Ausstoß (abgebremst), dann langsames Herabschaukeln diff --git a/remotion/src/folge01/lied.tsx b/remotion/src/folge01/lied.tsx index f53f569..b681cae 100644 --- a/remotion/src/folge01/lied.tsx +++ b/remotion/src/folge01/lied.tsx @@ -16,14 +16,14 @@ import {HAUFEN_X} from './szene2'; // Gesungen von Suno, gekürzt auf Refrain – Strophe 1 – Refrain (die ersten 12 Liedzeilen). // Die Zeilen liegen genau auf den gemessenen Suno-Zeiten, ohne Sprachaufnahmen. // Fehlt für eine Sprache der Eintrag, wird sie gesprochen über das Instrumental (95 BPM). -type SunoLied = { +export type SunoLied = { datei: string; // in public/, auf −14 LUFS bpm: number; zeiten: number[]; // Beginn der Zeilen r1–r4, s1–s4, w1–w4 in Sekunden ende: number; // letzte Zeile ausgesungen vor: number; // Sekunden Vorspiel vor der ersten Zeile }; -const SUNO_LIEDER: Partial> = { +export const SUNO_LIEDER: Partial> = { // „Noa in der Mitte“ 25385c27, Zeiten aus aligned_lyrics (src/lieder/lied03/zeiten.ts) de: { datei: 'musik/lieder/lied03-de.mp3', diff --git a/remotion/src/folge02/Folge02.tsx b/remotion/src/folge02/Folge02.tsx index 028838a..4b394a6 100644 --- a/remotion/src/folge02/Folge02.tsx +++ b/remotion/src/folge02/Folge02.tsx @@ -2,7 +2,7 @@ import React from 'react'; import {INTRO_OPTIONEN, Intro, OUTRO, Outro, introZeilen} from '../baukasten/buch'; import {baueFolge, type SzenenEintrag} from '../baukasten/folge'; import {mitKlang} from '../baukasten/geraeusche'; -import {LIED, Lied} from './lied'; +import {GESUNGEN, LIED, LIED_AB, LIED_DATEI, Lied} from './lied'; import {TITEL, plane} from './plan'; import {S2, Szene2} from './szene2'; import {S3, Szene3} from './szene3'; @@ -51,9 +51,17 @@ export const SZENEN: SzenenEintrag[] = [ name: 'Ein Bett aus Blättern', datei: 'szene4.tsx', plan: S4, - K: mitKlang(Szene4, S4, {atmo: 'garten_tag', toene: [...sammeln, {name: 'blaetter_regen', bei: 'l2', versatz: -1.2, lautstaerke: 0.5}]}), + K: mitKlang(Szene4, S4, {atmo: 'garten_tag', toene: [...sammeln, {name: 'niesen', bei: 'bild3', versatz: -0.05, lautstaerke: 0.7}, {name: 'blaetter_regen', bei: 'l2', versatz: -1.2, lautstaerke: 0.5}]}), + }, + { + name: 'Lied', + datei: 'lied.tsx', + plan: LIED, + K: Lied, + musik: GESUNGEN + ? {datei: LIED_DATEI, ab: LIED_AB, lautstaerke: 0.9, rein: 0.2, raus: 0.8} + : {datei: 'musik/folge01/lied.mp3', lautstaerke: 0.4, ducken: 0.75, rein: 0.3, raus: 1.2}, }, - {name: 'Lied', datei: 'lied.tsx', plan: LIED, K: Lied, musik: {datei: 'musik/folge01/lied.mp3', lautstaerke: 0.4, ducken: 0.75, rein: 0.3, raus: 1.2}}, {name: 'Pino will nicht schlafen', datei: 'szene5.tsx', plan: S5, K: mitKlang(Szene5, S5, {atmo: 'garten_tag'})}, { name: 'Noas Idee', diff --git a/remotion/src/folge02/lied.tsx b/remotion/src/folge02/lied.tsx index 3cbd215..39945bf 100644 --- a/remotion/src/folge02/lied.tsx +++ b/remotion/src/folge02/lied.tsx @@ -4,21 +4,43 @@ import {Figur, Kamera} from '../baukasten/figur'; import {Blende, Vignette, klatschFolge} from '../baukasten/helfer'; import {BODEN, Ort} from '../baukasten/orte'; import {SCHRIFT, Untertitel} from '../baukasten/untertitel'; +import {SPRACHE} from '../baukasten/sprache'; +import {plane as planeOhneStimme} from '../baukasten/zeit'; +import {SUNO_LIEDER} from '../folge01/lied'; import {TEXTE, plane} from './plan'; // Refrain „Einer klein und einer groß“ (aus Folge 1), einmal. Die drei wippen im Takt. +// Gesungen: der Refrain aus dem Suno-Lied von Folge 1 (erste vier Zeilen), ausgeblendet, +// bevor die Strophe beginnt. Ohne Suno-Fassung für die Sprache: gesprochen über das Instrumental. -const TAKT = 19; // Frames pro Schlag (ca. 95 bpm) +const SUNO = SUNO_LIEDER[SPRACHE]; +export const GESUNGEN = !!SUNO; +const TAKT = SUNO ? (30 * 60) / SUNO.bpm : 19; // Frames pro Schlag +const IDS = ['r1', 'r2', 'r3', 'r4']; +export const LIED_DATEI = SUNO?.datei ?? ''; +export const LIED_AB = SUNO ? SUNO.zeiten[0] - SUNO.vor : 0; // ab hier läuft die Suno-Datei -export const LIED = plane('lied', - [ - {id: 'r1', wer: 'ALLE', dauer: 3.2}, - {id: 'r2', wer: 'ALLE', dauer: 3.2}, - {id: 'r3', wer: 'ALLE', dauer: 3.2}, - {id: 'r4', wer: 'ALLE', dauer: 3.6}, - ], - {vorlauf: 1.0, nachlauf: 1.0}, -); +export const LIED = SUNO + ? planeOhneStimme( + IDS.map((id, i) => ({ + id, + wer: 'ALLE' as const, + text: TEXTE.zeilen[`lied/${id}`], + // Lücke von 0,35 s zwischen den Zeilen fügt der Planer ein; r4 endet, wo die Strophe beginnt + dauer: SUNO.zeiten[i + 1] - SUNO.zeiten[i] - 0.35, + })), + {vorlauf: SUNO.vor, nachlauf: 0.2}, + ) + : plane( + 'lied', + [ + {id: 'r1', wer: 'ALLE', dauer: 3.2}, + {id: 'r2', wer: 'ALLE', dauer: 3.2}, + {id: 'r3', wer: 'ALLE', dauer: 3.2}, + {id: 'r4', wer: 'ALLE', dauer: 3.6}, + ], + {vorlauf: 1.0, nachlauf: 1.0}, + ); const Note: React.FC<{x: number; y: number; s: number; farbe: string}> = ({x, y, s, farbe}) => ( diff --git a/remotion/src/folge02/stimmen/de.json b/remotion/src/folge02/stimmen/de.json index b70a2d1..283c348 100644 --- a/remotion/src/folge02/stimmen/de.json +++ b/remotion/src/folge02/stimmen/de.json @@ -131,8 +131,8 @@ }, "s4/n2": { "datei": "s4-n2.mp3", - "dauer": 1.23, - "text": "Zählst du mit?" + "dauer": 5.07, + "text": "Pino braucht ein Nest aus ganz vielen Blättern. Hilfst du mir beim Zählen?" }, "s4/c1": { "datei": "s4-c1.mp3", @@ -161,8 +161,8 @@ }, "s4/l1": { "datei": "s4-l1.mp3", - "dauer": 3.87, - "text": "Hier oben hängen noch welche! Die erreicht sonst keiner." + "dauer": 3.24, + "text": "Ich helfe euch! Hier oben hängen noch welche." }, "s4/l2": { "datei": "s4-l2.mp3", @@ -171,13 +171,13 @@ }, "s4/n3": { "datei": "s4-n3.mp3", - "dauer": 3.24, - "text": "Macht nichts. Jetzt haben wir noch mehr Blätter." + "dauer": 3.55, + "text": "Macht nichts! Jetzt haben wir ganz viele Blätter." }, "s4/e4": { "datei": "s4-e4.mp3", - "dauer": 3.24, - "text": "Ein Igelnest braucht ganz viele Blätter." + "dauer": 3.47, + "text": "Jetzt ist das Nest schön weich und warm." }, "s4/e5": { "datei": "s4-e5.mp3", @@ -288,5 +288,10 @@ "datei": "s7-p1.mp3", "dauer": 1.15, "text": "… bis bald …" + }, + "s4/n4": { + "datei": "s4-n4.mp3", + "dauer": 2.85, + "text": "Hm. Das sind noch zu wenige." } } diff --git a/remotion/src/folge02/stimmen/es.json b/remotion/src/folge02/stimmen/es.json index 6635c11..20f6cc5 100644 --- a/remotion/src/folge02/stimmen/es.json +++ b/remotion/src/folge02/stimmen/es.json @@ -131,8 +131,8 @@ }, "s4/n2": { "datei": "s4-n2.mp3", - "dauer": 1.49, - "text": "¿Cuentas conmigo?" + "dauer": 4.99, + "text": "Pino necesita un nido con muchísimas hojas. ¿Me ayudas a contar?" }, "s4/c1": { "datei": "s4-c1.mp3", @@ -161,8 +161,8 @@ }, "s4/l1": { "datei": "s4-l1.mp3", - "dauer": 4.36, - "text": "¡Aquí arriba quedan algunas! Nadie más llega hasta aquí." + "dauer": 3.32, + "text": "¡Yo los ayudo! Aquí arriba quedan algunas." }, "s4/l2": { "datei": "s4-l2.mp3", @@ -171,13 +171,13 @@ }, "s4/n3": { "datei": "s4-n3.mp3", - "dauer": 3.63, - "text": "No pasa nada. Así tenemos todavía más hojas." + "dauer": 4.05, + "text": "¡No pasa nada! Ahora tenemos muchísimas hojas." }, "s4/e4": { "datei": "s4-e4.mp3", - "dauer": 3.55, - "text": "Un nido de erizo necesita muchas hojas." + "dauer": 3.87, + "text": "Ahora el nido está blandito y calentito." }, "s4/e5": { "datei": "s4-e5.mp3", @@ -288,5 +288,10 @@ "datei": "s7-p1.mp3", "dauer": 1.41, "text": "…hasta pronto…" + }, + "s4/n4": { + "datei": "s4-n4.mp3", + "dauer": 3.16, + "text": "Mmm. Todavía son muy pocas." } } diff --git a/remotion/src/folge02/stimmen/fr.json b/remotion/src/folge02/stimmen/fr.json index c5e7849..c836764 100644 --- a/remotion/src/folge02/stimmen/fr.json +++ b/remotion/src/folge02/stimmen/fr.json @@ -131,8 +131,8 @@ }, "s4/n2": { "datei": "s4-n2.mp3", - "dauer": 1.31, - "text": "Tu comptes avec moi ?" + "dauer": 4.05, + "text": "Pino a besoin d'un nid avec plein de feuilles. Tu m'aides à compter ?" }, "s4/c1": { "datei": "s4-c1.mp3", @@ -161,8 +161,8 @@ }, "s4/l1": { "datei": "s4-l1.mp3", - "dauer": 3.63, - "text": "Il en reste là-haut ! Personne d'autre ne peut les attraper." + "dauer": 2.51, + "text": "Je vous aide ! Il en reste là-haut." }, "s4/l2": { "datei": "s4-l2.mp3", @@ -171,13 +171,13 @@ }, "s4/n3": { "datei": "s4-n3.mp3", - "dauer": 3.63, - "text": "Ce n'est pas grave. Comme ça, on a encore plus de feuilles." + "dauer": 3.47, + "text": "Ce n'est pas grave ! Maintenant, on a plein de feuilles." }, "s4/e4": { "datei": "s4-e4.mp3", - "dauer": 2.93, - "text": "Un nid de hérisson a besoin de beaucoup de feuilles." + "dauer": 3.55, + "text": "Maintenant, le nid est tout doux et bien chaud." }, "s4/e5": { "datei": "s4-e5.mp3", @@ -288,5 +288,10 @@ "datei": "s7-p1.mp3", "dauer": 1.15, "text": "…à bientôt…" + }, + "s4/n4": { + "datei": "s4-n4.mp3", + "dauer": 2.59, + "text": "Hum. Il n'y en a pas encore assez." } } diff --git a/remotion/src/folge02/szene4.tsx b/remotion/src/folge02/szene4.tsx index b0305f7..215410c 100644 --- a/remotion/src/folge02/szene4.tsx +++ b/remotion/src/folge02/szene4.tsx @@ -11,12 +11,20 @@ import {W} from '../baukasten/sprache'; import {Untertitel} from '../baukasten/untertitel'; import {plane} from './plan'; -// Szene 4: Ein Bett aus Blättern. Zählen bis 5, Lulu niest, das Nest entsteht. +// Szene 4: Ein Bett aus Blättern. Noa legt fünf Blätter auf Pinos Nest (Zählen bis 5), +// das sind zu wenige; Lulu hilft, niest, die Blätter wehen bis zum Nest – das Nest entsteht. -const NOA_ZAEHL_X = 1170; -const PINO_ZAEHL_X = 1790; +const NOA_ZAEHL_X = 1330; +const PINO_ZAEHL_X = 1700; const LULU_BAUM_X = 650; -const REIHE = [0, 1, 2, 3, 4].map((i) => ({x: 1290 + i * 78, y: BODEN + 4})); +// die ersten fünf Blätter landen dort, wo das Nest entsteht, als kleiner Haufen +const HAUFEN = [ + {dx: -50, dy: 0, r: 80}, + {dx: 40, dy: -2, r: 130}, + {dx: -15, dy: -12, r: 40}, + {dx: 55, dy: -10, r: 160}, + {dx: 5, dy: -22, r: 100}, +].map((b) => ({x: NEST_X + b.dx, y: BODEN + 2 + b.dy, r: b.r})); export const S4 = plane('s4', [ {id: 'n1', wer: 'NOA'}, @@ -29,6 +37,7 @@ export const S4 = plane('s4', [ {id: 'c3', wer: 'NOA', dauer: 1.1, pause: 0.5}, {id: 'c4', wer: 'NOA', dauer: 1.1, pause: 0.5}, {id: 'c5', wer: 'NOA', dauer: 1.4}, + {id: 'n4', wer: 'NOA'}, {id: 'bild1', dauer: 2.6}, {id: 'l1', wer: 'LULU'}, {id: 'bild2', dauer: 2.4}, @@ -63,7 +72,7 @@ export const Szene4: React.FC = () => { const noaStehPose: [number, string][] = [ [0, 'noa_A3_lachen'], [noaGehtBis, 'noa_A6_blick-rechts'], - [z.c5.ende, 'noa_A3_lachen'], + [z.n4.ende, 'noa_A3_lachen'], [z.bild3.start + 4, 'noa_B2_erschrocken'], [z.l2.ende, 'noa_A3_lachen'], [z.e4.start, 'noa_A3_lachen'], @@ -73,7 +82,7 @@ export const Szene4: React.FC = () => { const HOCKE_BLENDE = 14; const hockZeiten: [number, number][] = [ [-1000, z.n1.start + 30], - [z.n2.start - 15, z.c5.ende], + [z.n2.start - 15, z.n4.ende], [zurueck, z.e4.start], ]; const inHocke = hockZeiten.some(([a, b]) => f >= a && f < b); @@ -114,6 +123,7 @@ export const Szene4: React.FC = () => { [pinoGehtBis, 'pino_A6_blick-rechts'], ...zaehlen.map((c) => [c, 'pino_A4_staunen'] as [number, string]), [z.c5.ende, 'pino_A3_lachen'], + [z.n4.start + 10, 'pino_A2_augen-halb'], [niesen + 4, 'pino_B2_erschrocken'], [z.n3.start + 20, 'pino_A3_lachen'], [z.bild4.ende - 30, 'pino_A2_augen-halb'], @@ -123,7 +133,7 @@ export const Szene4: React.FC = () => { ]; const zaehlHuepfer = zaehlen.reduce((s, c) => s + huepfer(f, c + 4, 10, 10), 0); const nestVoll = kurve(f, [ - [zurueck + 20, 0.15], + [zurueck + 20, 0.2], [z.bild4.ende, 1], ]); const pinoImNestY = BODEN + 2 - huepfer(f, z.bild5.start, -10, 20); @@ -188,7 +198,7 @@ export const Szene4: React.FC = () => { [z.e1.start + 60, 1380, 720, 1.35], [z.e3.ende, 1450, 780, 1.6], [z.n2.start, 1480, 820, 1.85], - [z.c5.ende, 1480, 820, 1.85], + [z.n4.ende, 1480, 820, 1.85], [amBaum, 470, 400, 1.85], [z.l1.ende, 500, 380, 1.9], [niesen - 5, 560, 370, 2.0], @@ -214,11 +224,17 @@ export const Szene4: React.FC = () => { ))} - {/* Reihe aus fünf Blättern vor dem Holzstapel */} + {/* fünf Blätter: aus Noas Hand in hohem Bogen auf den Nest-Haufen, je Zahl eins */} {f < zurueck + 40 && - REIHE.map((p, i) => - f > zaehlen[i] - 6 ? zurueck ? 1 - (f - zurueck) / 40 : 1} /> : null, - )} + HAUFEN.map((p, i) => { + const t = Math.min(1, Math.max(0, (f - (zaehlen[i] - 14)) / 14)); + if (f < zaehlen[i] - 14) return null; + const hand = {x: noaX + 70, y: BODEN - 95}; + const e = t * t * (3 - 2 * t); + const x = hand.x + (p.x - hand.x) * e; + const y = hand.y + (p.y - hand.y) * e - Math.sin(t * Math.PI) * 60; + return zurueck ? 1 - (f - zurueck) / 40 : 1} />; + })} {noaGeht ? ( @@ -253,6 +269,8 @@ export const Szene4: React.FC = () => { {luluBeimNest} + {/* der Wind trägt einen Teil der Blätter bis zum Nest */} + {/* Zahlen beim Zählen */} {zaehlen.map((c, i) => ( diff --git a/remotion/src/folge02/texte/de.json b/remotion/src/folge02/texte/de.json index e5765ca..3f52e25 100644 --- a/remotion/src/folge02/texte/de.json +++ b/remotion/src/folge02/texte/de.json @@ -26,16 +26,17 @@ "s4/e1": "Igel bauen sich für den Winter ein Nest.", "s4/e2": "Aus ganz vielen Blättern, unter einer Hecke oder einem Holzstapel.", "s4/e3": "Da ist es trocken und warm.", - "s4/n2": "Zählst du mit?", + "s4/n2": "Pino braucht ein Nest aus ganz vielen Blättern. Hilfst du mir beim Zählen?", "s4/c1": "Eins …", "s4/c2": "Zwei …", "s4/c3": "Drei …", "s4/c4": "Vier …", "s4/c5": "Fünf!", - "s4/l1": "Hier oben hängen noch welche! Die erreicht sonst keiner.", + "s4/n4": "Hm. Das sind noch zu wenige.", + "s4/l1": "Ich helfe euch! Hier oben hängen noch welche.", "s4/l2": "Oh! Entschuldigung!", - "s4/n3": "Macht nichts. Jetzt haben wir noch mehr Blätter.", - "s4/e4": "Ein Igelnest braucht ganz viele Blätter.", + "s4/n3": "Macht nichts! Jetzt haben wir ganz viele Blätter.", + "s4/e4": "Jetzt ist das Nest schön weich und warm.", "s4/e5": "Wenn ihr im Garten einen Laubhaufen liegen lasst, schenkt ihr einem Igel vielleicht ein Winterbettchen.", "lied/r1": "Einer klein und einer groß,", "lied/r2": "und dazwischen – na, wer bloß?", diff --git a/remotion/src/folge02/texte/es.json b/remotion/src/folge02/texte/es.json index 47df338..6a9ff8a 100644 --- a/remotion/src/folge02/texte/es.json +++ b/remotion/src/folge02/texte/es.json @@ -26,16 +26,17 @@ "s4/e1": "Para el invierno, los erizos se hacen un nido.", "s4/e2": "Con muchísimas hojas, debajo de un seto o de un montón de leña.", "s4/e3": "Allí está seco y calentito.", - "s4/n2": "¿Cuentas conmigo?", + "s4/n2": "Pino necesita un nido con muchísimas hojas. ¿Me ayudas a contar?", "s4/c1": "Uno…", "s4/c2": "Dos…", "s4/c3": "Tres…", "s4/c4": "Cuatro…", "s4/c5": "¡Cinco!", - "s4/l1": "¡Aquí arriba quedan algunas! Nadie más llega hasta aquí.", + "s4/n4": "Mmm. Todavía son muy pocas.", + "s4/l1": "¡Yo los ayudo! Aquí arriba quedan algunas.", "s4/l2": "¡Uy! ¡Perdón!", - "s4/n3": "No pasa nada. Así tenemos todavía más hojas.", - "s4/e4": "Un nido de erizo necesita muchas hojas.", + "s4/n3": "¡No pasa nada! Ahora tenemos muchísimas hojas.", + "s4/e4": "Ahora el nido está blandito y calentito.", "s4/e5": "Mamás y papás: si dejan un montón de hojas en el jardín, a lo mejor un erizo encuentra allí su camita para el invierno.", "lied/r1": "Uno pequeño, una grande,", "lied/r2": "¿y en el medio quién será?", diff --git a/remotion/src/folge02/texte/fr.json b/remotion/src/folge02/texte/fr.json index c604beb..71f0fdd 100644 --- a/remotion/src/folge02/texte/fr.json +++ b/remotion/src/folge02/texte/fr.json @@ -26,16 +26,17 @@ "s4/e1": "Pour l'hiver, les hérissons se construisent un nid.", "s4/e2": "Avec plein de feuilles, sous une haie ou sous un tas de bois.", "s4/e3": "Là, c'est sec et bien chaud.", - "s4/n2": "Tu comptes avec moi ?", + "s4/n2": "Pino a besoin d'un nid avec plein de feuilles. Tu m'aides à compter ?", "s4/c1": "Un…", "s4/c2": "Deux…", "s4/c3": "Trois…", "s4/c4": "Quatre…", "s4/c5": "Cinq !", - "s4/l1": "Il en reste là-haut ! Personne d'autre ne peut les attraper.", + "s4/n4": "Hum. Il n'y en a pas encore assez.", + "s4/l1": "Je vous aide ! Il en reste là-haut.", "s4/l2": "Oh ! Pardon !", - "s4/n3": "Ce n'est pas grave. Comme ça, on a encore plus de feuilles.", - "s4/e4": "Un nid de hérisson a besoin de beaucoup de feuilles.", + "s4/n3": "Ce n'est pas grave ! Maintenant, on a plein de feuilles.", + "s4/e4": "Maintenant, le nid est tout doux et bien chaud.", "s4/e5": "Chers parents : si vous laissez un tas de feuilles dans votre jardin, vous offrez peut-être un petit lit d'hiver à un hérisson.", "lied/r1": "Un tout petit, un très grand,", "lied/r2": "et au milieu, qui, dis-moi ?",