Files
Homelab--Bratonein-Kontroll…/Kapitel 13/Tutorial.md

6.0 KiB
Raw Blame History

🛠️ Kapitel 13 Clipper (Tutorial)


Einleitung

Clips sind der beste Weg, lange Streams in kurze, teilbare Highlights zu verwandeln. Unser Ziel in diesem Kapitel: Wir bauen ein System, das neue Videos automatisch erkennt, sinnvolle Stellen analysiert, passende Highlights schneidet und die Ergebnisse in Nextcloud ablegt inklusive Titeln und Hashtags für jede Plattform. Der Clipper selbst übernimmt dabei die technische Verarbeitung, während n8n für Steuerung, Analyse und Benachrichtigungen sorgt. Das System bleibt dadurch flexibel, ressourcenschonend und jederzeit erweiterbar.


Voraussetzungen

  • Proxmox LXC mit Debian 12 (Bookworm)
  • Nextcloud (Pflicht, Zielort für Clips & Metadaten)
  • n8n-Instanz (Automatisierung, Steuerung Clipper, Analyse, Metadaten-Erzeugung)
  • Twitch-Entwickler-Account inkl. API-Key (für VOD- und Clip-Zugriff)
  • Optional: RTMP-Server, falls VODs lokal aufgezeichnet werden
  • Ressourcen für den LXC: 1 vCPU, 12 GB RAM, 10 GB Speicher reichen aus
  • Grundwissen: SSH-Verbindung, Nano-Editor, Basiskenntnisse in n8n

Vorbereitung

Wir beginnen mit einem frischen Debian12LXC in Proxmox, benennen ihn clipper und vergeben die im Abschnitt oben genannten Ressourcen. Danach bringen wir das System auf Stand und installieren die Grundwerkzeuge:

apt update && apt upgrade -y
apt install -y curl nano unzip ffmpeg inotify-tools

Eine korrekte Systemzeit ist entscheidend, da Schnittmarken später auf exakten Sekunden basieren. Prüfe die Zeit mit:

timedatectl status

Wenn hier UTC steht und du lieber „Europe/Berlin“ nutzen willst:

timedatectl list-timezones | grep Europe
timedatectl set-timezone Europe/Berlin
timedatectl status

Die Zeit wird sofort angepasst, Logs und Schnittzeiten passen damit zur lokalen Umgebung.

Zum Schluss legen wir die Arbeitsordner an:

mkdir -p /srv/clipper/{watch,out,temp,logs}
  • watch Eingangsordner für neue Videos (egal ob von Twitch oder RTMP)
  • out fertige Clips und Metadaten
  • temp Zwischenspeicher für Analyse
  • logs Protokolle aller Abläufe

Damit ist das Fundament gelegt.


Abschnitt 2 Clipper-LXC einrichten (Basisdienste & Einstiegsskripte)

Jetzt richten wir Clipper so ein, dass er klare Einstiegspunkte zum Analysieren und Schneiden hat. Die eigentliche Logik füllen wir in Abschnitt 4 und 5, hier bauen wir das Gerüst.

Benutzer und Verzeichnisse

Zuerst legen wir den Service-Benutzer an und weisen ihm die Arbeitsordner zu:

adduser clipper
mkdir -p /etc/clipper
chown root:clipper /etc/clipper
chmod 750 /etc/clipper

Pakete installieren

apt install -y ffmpeg jq python3 python3-venv curl unzip inotify-tools sudo
  • ffmpeg für Analyse und Schnitt
  • jq für JSON-Verarbeitung
  • python3/venv für optionale Analyse-Tools (z. B. Szenenerkennung, Face-Detection)
  • inotify-tools für Dateisystem-Events
  • sudo damit der Benutzer clipper bei Bedarf Rechte anheben kann

Anschließend geben wir dem Benutzer clipper Sudo-Rechte:

usermod -aG sudo clipper

Konfiguration anlegen

Wir legen eine Konfigurationsdatei an, die von allen Skripten geladen wird:

nano /etc/clipper/clipper.env

Inhalt:

CLIPPER_IN=/srv/clipper/watch
CLIPPER_OUT=/srv/clipper/out
CLIPPER_TMP=/srv/clipper/temp
CLIPPER_LOG=/srv/clipper/logs/clipper.log

Datei speichern und mit chown root:clipper /etc/clipper/clipper.env && chmod 640 /etc/clipper/clipper.env die Rechte setzen.

Python-Umgebung vorbereiten

Die eigentliche Analyse binden wir erst in Abschnitt 4 ein. Damit die Basis steht, richten wir jetzt schon eine virtuelle Umgebung ein:

su - clipper
python3 -m venv /srv/clipper/.venv
source /srv/clipper/.venv/bin/activate
pip install --upgrade pip
pip install numpy opencv-python-headless

So haben wir erste Bibliotheken, mit denen Szenen- und Gesichtserkennung später möglich wird.

Einstiegsskripte (Stubs)

Wir erstellen zwei Einstiegspunkte, die n8n direkt aufruft. Sie tun noch nichts außer Logging und Validierung.

Analyse-Stub

nano /srv/clipper/bin/clipper-analyze

Inhalt:

#!/usr/bin/env bash
set -euo pipefail
source /etc/clipper/clipper.env
IN="$1"
JOBID="${2:-manual}"
mkdir -p "$CLIPPER_TMP/$JOBID"
echo "$(date '+%F %T') [ANALYZE] job=$JOBID file=$IN" | tee -a "$CLIPPER_LOG"
OUT_JSON="$CLIPPER_TMP/$JOBID/candidates.json"
echo '[]' > "$OUT_JSON"
echo "$OUT_JSON"

Schneid-Stub

nano /srv/clipper/bin/clipper-cut

Inhalt:

#!/usr/bin/env bash
set -euo pipefail
source /etc/clipper/clipper.env
IN="$1"
RANGES_JSON="$2"
JOBID="${3:-manual}"
mkdir -p "$CLIPPER_OUT/$JOBID"
echo "$(date '+%F %T') [CUT] job=$JOBID file=$IN ranges=$RANGES_JSON" | tee -a "$CLIPPER_LOG"
exit 0

Rechte setzen:

chmod +x /srv/clipper/bin/clipper-*
chown -R clipper:clipper /srv/clipper/bin

Direktaufruf und Tests

Wir verzichten bewusst auf systemd-Templates und rufen die Skripte direkt über n8n oder manuell auf. Beispiel:

su - clipper
/srv/clipper/bin/clipper-analyze /srv/clipper/watch/demo.mp4 job-001
/srv/clipper/bin/clipper-cut /srv/clipper/watch/demo.mp4 /srv/clipper/temp/job-001/ranges.json job-001

tail -n 50 /srv/clipper/logs/clipper.log

Wenn alles passt, siehst du Einträge [ANALYZE] und [CUT] mit deiner Job-ID.

Logrotation

Zum Schluss sorgen wir dafür, dass Logs nicht unendlich wachsen:

nano /etc/logrotate.d/clipper

Inhalt:

/srv/clipper/logs/*.log {
  rotate 14
  daily
  missingok
  notifempty
  compress
  delaycompress
  copytruncate
}

Damit ist der Clipper-LXC vorbereitet: Benutzer, Verzeichnisse, Pakete, Konfiguration und Einstiegsskripte sind eingerichtet. In den nächsten Abschnitten bauen wir die Anbindung an Twitch/n8n, implementieren die Analyse-Logik (inklusive Facecam, Hochformat und Untertitel) und fügen den eigentlichen Schnitt hinzu, bevor alles sauber in Nextcloud abgelegt wird.