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

245 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🛠️ 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.