render.mjs: volle Qualität ohne eingebrannte Untertitel (Entscheidung „final ohne Untertitel“), Mitmach-„?“ bleibt

Bisher landeten die Untertitel auch in den fertigen Folgen. Nur noch im Entwurf, mit --untertitel erzwingbar.
Der Fingerabdruck enthält die Einstellung, vorhandene volle Szenen werden dadurch neu gerendert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Lara 2026-11-06 07:47:58 +00:00
parent 2f7a695be9
commit 7beb6bf355
2 changed files with 15 additions and 5 deletions

View file

@ -34,12 +34,19 @@ export const Stimmen: React.FC<{zeilen: Geplant[]}> = ({zeilen}) => (
); );
// Untertitel (für die Vorschau ohne Ton) und Stimmen. Untertitel lassen sich // Untertitel (für die Vorschau ohne Ton) und Stimmen. Untertitel lassen sich
// beim Rendern abschalten: --props='{"untertitel": false}' // beim Rendern abschalten: --props='{"untertitel": false}' (render.mjs macht das in voller Qualität);
// das „?“ der Mitmach-Pausen bleibt auch dann – es ist ein Bildzeichen für die Kinder, kein Text.
export const Untertitel: React.FC<{zeilen: Geplant[]}> = ({zeilen}) => { export const Untertitel: React.FC<{zeilen: Geplant[]}> = ({zeilen}) => {
const frame = useCurrentFrame(); const frame = useCurrentFrame();
if (getInputProps().untertitel === false) return <Stimmen zeilen={zeilen} />;
const z = zeilen.find((l) => l.text && frame >= l.start && frame < l.ende + 6);
const frage = zeilen.find((l) => (l.pause ?? 0) >= 2.5 && frame >= l.ende && frame < l.frei); const frage = zeilen.find((l) => (l.pause ?? 0) >= 2.5 && frame >= l.ende && frame < l.frei);
if (getInputProps().untertitel === false)
return (
<>
<Stimmen zeilen={zeilen} />
{frage && <MitmachPause von={frage.ende} bis={frage.frei} />}
</>
);
const z = zeilen.find((l) => l.text && frame >= l.start && frame < l.ende + 6);
return ( return (
<> <>
<Stimmen zeilen={zeilen} /> <Stimmen zeilen={zeilen} />

View file

@ -90,14 +90,17 @@ const qualitaet = entwurf ? 'entwurf' : 'voll';
const aus = path.join('out', kuerzel, sprache, qualitaet); const aus = path.join('out', kuerzel, sprache, qualitaet);
fs.mkdirSync(aus, {recursive: true}); fs.mkdirSync(aus, {recursive: true});
const propsDatei = path.join(aus, 'props.json'); const propsDatei = path.join(aus, 'props.json');
fs.writeFileSync(propsDatei, JSON.stringify({entwurf, sprache})); // Untertitel nur im Entwurf: in der fertigen Folge sprechen die Aufnahmen, Untertitel kommen je Sprache
// in YouTube Studio (Entscheidung „final ohne Untertitel“). Mit --untertitel trotzdem einbrennen.
const untertitel = entwurf || args.includes('--untertitel');
fs.writeFileSync(propsDatei, JSON.stringify({entwurf, sprache, untertitel}));
const gl = process.platform === 'linux' ? 'swangle' : 'angle'; const gl = process.platform === 'linux' ? 'swangle' : 'angle';
const teile = []; const teile = [];
const start = Date.now(); const start = Date.now();
for (const [i, s] of liste.entries()) { for (const [i, s] of liste.entries()) {
const h = createHash('sha256'); const h = createHash('sha256');
h.update(basis + qualitaet + s.dauer); h.update(basis + qualitaet + s.dauer + (untertitel ? '' : ' ohne Untertitel'));
hashDatei(h, path.join(ordner, s.datei)); hashDatei(h, path.join(ordner, s.datei));
const fp = h.digest('hex'); const fp = h.digest('hex');
const datei = path.join(aus, `${s.id}.mp4`); const datei = path.join(aus, `${s.id}.mp4`);