# 🛠️ 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: 1. **LXC erstellen** - Debian 12, Name `clipper` - Ressourcen wie oben (1 vCPU, 512 MB RAM, 10 GB Speicher) 2. **System aktualisieren und Basis-Tools installieren** ```bash apt update && apt upgrade -y apt install -y curl nano unzip ffmpeg inotify-tools ``` 3. **Zeitsynchronisation prüfen** ```bash timedatectl status ``` Eine 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: ```bash 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. 4. **Ordnerstruktur vorbereiten** ```bash mkdir -p /srv/clipper/{watch,out,temp,logs} ``` - `watch` → Eingangsordner für neue Videos (über Nextcloud oder Twitch-Import) - `out` → fertige Clips + Metadaten - `temp` → Zwischenablagen für Analyse - `logs` → 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. ```bash 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. ```bash 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**. ```bash usermod -aG sudo clipper ``` --- ### Schritt 4: In die Session des Benutzers clipper wechseln Ab hier arbeiten wir direkt als Benutzer `clipper`. ```bash su - clipper ``` --- ### Schritt 5: Konfigurationsdatei anlegen Wir erstellen die Umgebungsvariablen-Datei, die später von allen Skripten genutzt wird. ```bash 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. ```bash 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** ```bash nano /srv/clipper/bin/clipper-analyze ``` Inhalt: ```bash #!/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** ```bash nano /srv/clipper/bin/clipper-cut ``` Inhalt: ```bash #!/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: ```bash chmod +x /srv/clipper/bin/clipper-* ``` --- ### Schritt 8: Skripte testen Wir testen die beiden Einstiegspunkte. **Analyse-Test:** ```bash /srv/clipper/bin/clipper-analyze /srv/clipper/watch/demo.mp4 job-001 ``` **Schnitt-Test:** ```bash /srv/clipper/bin/clipper-cut /srv/clipper/watch/demo.mp4 /srv/clipper/temp/job-001/ranges.json job-001 ``` Logs prüfen: ```bash 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. ```bash 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-analyze` und `clipper-cut` laufen fehlerfrei in seiner Session. - n8n kann später direkt als Benutzer `clipper` per SSH einsteigen und die Skripte aufrufen.