S3: 9:16-Render mit Warteschlange, nachrangig zum Stream

Aus der Rohdatei entsteht das fertige Hochformat. Der Filtergraph liegt jetzt
in packages/media und wird von calibrate und vom Render-Schritt gemeinsam
benutzt - die Zahlen darin sind eingemessen, sie gehoeren an genau eine Stelle.

Eine Aufgabe nach der anderen, und waehrend gesendet wird standardmaessig
gar nicht (renderWhileLive: false). ffmpeg laeuft unter nice, mit Zeitlimit,
und die letzten Zeilen von stderr landen in der Fehlermeldung statt im Nichts.
Aus dem 90-Sekunden-Puffer werden die letzten 45 Sekunden genommen (-sseof vor
-i, sonst wird die ganze Datei dekodiert und danach verworfen).

Dabei einen eigenen Fehler aus S2 korrigiert: die Rohdatei wurde in den
Windows-Bind-Mount kopiert und dort verarbeitet - genau das, was ADR-0004
Punkt 2 verbietet. Jetzt liegt sie im Arbeits-Volume, auf die Windows-Seite
kommt nur das fertige, kleine Ergebnis.

Verifiziert an einer kuenstlichen Aufnahme mit drei getrennten Tonspuren:
1920x1080/70 s hinein, 1080x1920/45 s heraus, Naht an der richtigen Stelle,
27,9 s Rechenzeit unter nice 15. 39 Tests gruen.

Neuer Befehl `render <datei>` zum Nachrendern nach Layout-Aenderungen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VTGjd92LsDDWF3frd9FTB
This commit is contained in:
ZeasyAlexandClaude Opus 5 committed 2026-09-09 10:21:58 +02:00
1 parent 684f10eb02
commit 0e020f3073
11 files changed
+597 -27

No files matched your search

+10
View File
@@ -34,6 +34,9 @@ export type Config = {
cooldownUserSeconds: number;
followersOnly: boolean;
renderWhileLive: boolean;
tailSeconds: number;
audio: { transcribeTrack: number; outputTrack: number };
ffmpeg: { encoder: string; preset: string; crf: number; niceness: number };
};
ingestServer: { port: number };
dashboard: { port: number };
@@ -61,6 +64,13 @@ const DEFAULTS = {
cooldownUserSeconds: 300,
followersOnly: false,
renderWhileLive: false,
// Der Wiedergabepuffer ist 90 s lang, ein Short soll das nicht sein.
// Genommen werden die letzten Sekunden - dort liegt der Ausloeser.
tailSeconds: 45,
// OBS nimmt getrennte Spuren auf: 1 = Mischung, 2 = Mikrofon, 3 = Spiel.
// Hier zaehlen die Positionen unter den Audiospuren, also 0-basiert.
audio: { transcribeTrack: 1, outputTrack: 0 },
ffmpeg: { encoder: 'libx264', preset: 'veryfast', crf: 20, niceness: 15 },
},
ingestServer: { port: 4790 },
dashboard: { port: 4792 },