7.1 KiB
🛠️ Kapitel 13 – Clipper (Tutorial)
Einleitung
Clips sind der beste Weg, lange Streams in kurze, teilbare Highlights zu verwandeln.
Das Ziel dieses Kapitels: Wir bauen ein System, das neue Videos automatisch erkennt, sinnvolle Stellen analysiert, passende Highlights schneidet und die Ergebnisse in Nextcloud ablegt – komplett mit Titeln und Hashtags für jede Plattform.
Der Clipper selbst übernimmt dabei nur die technische Verarbeitung. Alles rund um Steuerung, Analyse und Benachrichtigungen läuft über n8n – so bleibt das System 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, 512 MB RAM, 10 GB Speicher reichen aus
- Grundwissen: SSH-Verbindung, Nano-Editor, Basiskenntnisse in n8n
Vorbereitung
Bevor wir Clipper installieren, richten wir den Container sauber ein:
-
LXC erstellen
- Debian 12, Name
clipper - Ressourcen wie oben (1 vCPU, 512 MB RAM, 10 GB Speicher)
- Debian 12, Name
-
System aktualisieren und Basis-Tools installieren
apt update && apt upgrade -y apt install -y curl nano unzip ffmpeg inotify-tools -
Zeitsynchronisation prüfen
timedatectl statusEine saubere Zeitbasis ist entscheidend, da Clips später anhand exakter Sekundenmarken geschnitten werden.
Wenn der Container standardmäßig auf UTC läuft, kann man die Zeitzone so ändern:
timedatectl list-timezones | grep Europe timedatectl set-timezone Europe/Berlin timedatectl status
Damit springt die Systemzeit sofort auf Europe/Berlin, und alle Logs sowie Schnittzeiten passen zur lokalen Zeit.
- Ordnerstruktur vorbereiten
mkdir -p /srv/clipper/{watch,out,temp,logs}watch→ Eingangsordner für neue Videos (über Nextcloud oder Twitch-Import)out→ fertige Clips + Metadatentemp→ Zwischenablagen für Analyselogs→ Protokolle aller Abläufe
Damit ist das Fundament gelegt: Der LXC ist vorbereitet, das System auf Stand, und die Ordnerstruktur für Clipper ist vorhanden.
Abschnitt 2 – Clipper-LXC einrichten (Basisdienste & Service-Skelett)
In diesem Abschnitt bereiten wir den Container so vor, dass der Benutzer clipper alle Arbeiten übernimmt. Root wird nur für die Installation und Systemaufgaben genutzt. Danach wechseln wir bewusst in die Session von clipper und arbeiten dort weiter. So bleibt das System sauber getrennt und sicher.
Schritt 1: Benutzer und Verzeichnisse anlegen
Zuerst legen wir den Benutzer clipper an und bereiten die Arbeitsverzeichnisse vor.
adduser clipper
# Passwort vergeben und die Standardfragen beantworten
mkdir -p /srv/clipper/{watch,out,temp,logs,bin}
chown -R clipper:clipper /srv/clipper
chmod 750 /srv/clipper
Damit ist der Benutzer angelegt und besitzt alle notwendigen Verzeichnisse.
Schritt 2: Notwendige Pakete installieren
Als root installieren wir die benötigten Pakete.
apt update && apt install -y ffmpeg jq python3 python3-venv curl unzip inotify-tools sudo
- ffmpeg: Kernwerkzeug für Analyse und Schnitt
- jq: JSON-Handling
- python3/venv: Virtuelle Umgebung für spätere Analyse-Tools
- inotify-tools: optional für lokale Hooks
- sudo: erlaubt clipper bei Bedarf Systembefehle auszuführen
Schritt 3: Benutzer clipper für sudo freischalten
Damit clipper bei Bedarf Befehle mit Administratorrechten ausführen kann, geben wir ihm Zugang zur Gruppe sudo.
usermod -aG sudo clipper
Schritt 4: In die Session des Benutzers clipper wechseln
Ab hier arbeiten wir direkt als Benutzer clipper.
su - clipper
Schritt 5: Konfigurationsdatei anlegen
Wir erstellen die Umgebungsvariablen-Datei, die später von allen Skripten genutzt wird.
nano /srv/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
EXPORT_VARIANTS="16x9,9x16"
Speichern mit Strg+O, bestätigen mit Enter, beenden mit Strg+X.
Schritt 6: Virtuelle Python-Umgebung vorbereiten
Noch immer als Benutzer clipper legen wir die virtuelle Umgebung an und installieren die ersten Pakete.
python3 -m venv /srv/clipper/.venv
source /srv/clipper/.venv/bin/activate
pip install --upgrade pip
pip install numpy opencv-python-headless
Damit ist die Grundlage für spätere Analysen geschaffen. KI und STT binden wir später in Abschnitt 4 ein.
Schritt 7: Einstiegsskripte erstellen
Jetzt erstellen wir die beiden Einstiegspunkte clipper-analyze und clipper-cut. Sie liegen im Verzeichnis /srv/clipper/bin/ und dienen n8n als Schnittstelle.
Analyse-Skript
nano /srv/clipper/bin/clipper-analyze
Inhalt:
#!/usr/bin/env bash
set -euo pipefail
ENV_FILE="/srv/clipper/clipper.env"; [ -r "$ENV_FILE" ] || { echo "ENV nicht lesbar: $ENV_FILE" >&2; exit 1; }; source "$ENV_FILE"
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"
Schnitt-Skript
nano /srv/clipper/bin/clipper-cut
Inhalt:
#!/usr/bin/env bash
set -euo pipefail
ENV_FILE="/srv/clipper/clipper.env"; [ -r "$ENV_FILE" ] || { echo "ENV nicht lesbar: $ENV_FILE" >&2; exit 1; }; source "$ENV_FILE"
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
Speichern beide Male mit Strg+O, bestätigen mit Enter, beenden mit Strg+X.
Rechte setzen:
chmod +x /srv/clipper/bin/clipper-*
Schritt 8: Skripte testen
Wir testen die beiden Einstiegspunkte.
Analyse-Test:
/srv/clipper/bin/clipper-analyze /srv/clipper/watch/demo.mp4 job-001
Schnitt-Test:
/srv/clipper/bin/clipper-cut /srv/clipper/watch/demo.mp4 /srv/clipper/temp/job-001/ranges.json job-001
Logs prüfen:
tail -n 50 /srv/clipper/logs/clipper.log
Schritt 9: Logrotation einrichten
Zum Abschluss richten wir die automatische Log-Rotation ein. Dafür wechseln wir kurz zurück zu root.
exit # zurück zu root
nano /etc/logrotate.d/clipper
Inhalt:
/srv/clipper/logs/*.log {
rotate 14
daily
missingok
notifempty
compress
delaycompress
copytruncate
}
Ergebnis Abschnitt 2:
- Benutzer clipper ist vollständig eingerichtet und übernimmt die Arbeit.
- Skripte
clipper-analyzeundclipper-cutlaufen fehlerfrei in seiner Session. - n8n kann später direkt als Benutzer
clipperper SSH einsteigen und die Skripte aufrufen.