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:
parent
2f7a695be9
commit
7beb6bf355
2 changed files with 15 additions and 5 deletions
|
|
@ -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} />
|
||||||
|
|
|
||||||
|
|
@ -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`);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue