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
109 lines
2.9 KiB
YAML
109 lines
2.9 KiB
YAML
# Kopie als config/config.yaml anlegen. Secrets gehoeren in .env, nicht hierher.
|
|
|
|
channel:
|
|
login: abdulive_
|
|
userId: "" # wird beim ersten `pnpm auth` gefuellt
|
|
language: de
|
|
timezone: Europe/Berlin
|
|
|
|
bot:
|
|
login: abdulive_bot
|
|
|
|
ingest:
|
|
viewerPollSeconds: 60
|
|
chattersPollSeconds: 300
|
|
sessionGapMinutes: 5 # kuerzere Luecken gelten als derselbe Stream
|
|
spike:
|
|
windowSeconds: 15
|
|
baselineMinutes: 10
|
|
factor: 3
|
|
minDelta: 4
|
|
cooldownSeconds: 60
|
|
armed: false # erst nach Kalibrierung auf true
|
|
laughEmotes: [KEKW, LUL, OMEGALUL, PogChamp, Pog]
|
|
|
|
obs:
|
|
url: ws://127.0.0.1:4455
|
|
replayBufferSeconds: 90
|
|
chapterScenes: [Gameplay, "Just Chatting", Startbildschirm]
|
|
|
|
clipper:
|
|
enabled: true
|
|
source: obs-replay # obs-replay | twitch
|
|
alsoCreateTwitchClip: true
|
|
# Aus dem 90-Sekunden-Puffer werden die letzten Sekunden genommen -
|
|
# dort liegt der Moment, der die Ausloesung verursacht hat.
|
|
tailSeconds: 45
|
|
renderWhileLive: false # true = sofort rendern, false = erst nach Streamende
|
|
audio:
|
|
# OBS nimmt getrennte Spuren auf. Untertitel entstehen NUR aus dem Mikrofon -
|
|
# Spielton im Transkript macht Whisper unbrauchbar. Die Spur im fertigen
|
|
# Video bleibt die Mischung.
|
|
transcribeTrack: 2 # OBS-Spur mit dem Mikrofon
|
|
outputTrack: 1 # OBS-Spur mit der Mischung (kommt ins Short)
|
|
whisper:
|
|
binary: whisper-cli # whisper.cpp, im Image enthalten
|
|
model: ggml-small.bin
|
|
language: de
|
|
threads: 4
|
|
ffmpeg:
|
|
preset: veryfast
|
|
crf: 20
|
|
encoder: libx264 # keine NVIDIA-GPU da, QSV aus WSL2 unzuverlaessig
|
|
niceness: 15 # Encoding laeuft nachrangig zum Stream
|
|
# Abklingzeiten sind nicht optional: ohne sie ist !clip nach zwei Streams aus.
|
|
cooldownGlobalSeconds: 60
|
|
cooldownUserSeconds: 300
|
|
followersOnly: false
|
|
triggers:
|
|
chatCommand: "!clip"
|
|
onSpike: false # erst nach Kalibrierung der Spitzen-Erkennung
|
|
# Der Hotkey wird in OBS auf "Wiedergabepuffer speichern" gelegt. Es gibt
|
|
# bewusst keinen eigenen Hotkey-Dienst - siehe ADR-0004, Punkt 4.
|
|
|
|
broadcaster:
|
|
enabled: true
|
|
mode: draft # draft | live
|
|
delaySecondsAfterOnline: 60
|
|
cooldownHours: 6
|
|
platforms:
|
|
discord: true
|
|
bluesky: true
|
|
mastodon: false
|
|
instagramStoryImage: true
|
|
|
|
community:
|
|
greetings:
|
|
enabled: true
|
|
minSecondsBetween: 20
|
|
maxPerStream: 10
|
|
returningAfterDays: 21
|
|
milestones: [5, 10, 25, 50, 100]
|
|
suppressWhileStreamerSpeaking: true
|
|
overlayHint: true
|
|
|
|
raidScout:
|
|
minViewers: 5
|
|
maxViewers: 30
|
|
minUptimeMinutes: 30
|
|
maxUptimeMinutes: 300
|
|
languages: [de]
|
|
topN: 5
|
|
|
|
recap:
|
|
enabled: true
|
|
delayMinutesAfterOffline: 10
|
|
minStreamMinutes: 20
|
|
hideViewerNumbersIfWeak: true
|
|
topChatters: 3
|
|
topClips: 2
|
|
|
|
loyalty:
|
|
enabled: false # spaetere Ausbaustufe
|
|
overlay:
|
|
port: 4791
|
|
dashboard:
|
|
port: 4792
|
|
ingestServer:
|
|
port: 4790
|