Kapitel 13/Tutorial.md aktualisiert
This commit is contained in:
@@ -15,7 +15,7 @@ Clips sind der beste Weg, lange Streams in kurze, teilbare Highlights zu verwand
|
|||||||
- **n8n-Instanz** (Automatisierung, Steuerung Clipper, Analyse, Metadaten-Erzeugung)
|
- **n8n-Instanz** (Automatisierung, Steuerung Clipper, Analyse, Metadaten-Erzeugung)
|
||||||
- **Twitch-Entwickler-Account** inkl. API-Key (für VOD- und Clip-Zugriff)
|
- **Twitch-Entwickler-Account** inkl. API-Key (für VOD- und Clip-Zugriff)
|
||||||
- **Optional**: RTMP-Server, falls VODs lokal aufgezeichnet werden
|
- **Optional**: RTMP-Server, falls VODs lokal aufgezeichnet werden
|
||||||
- **Ressourcen für den LXC**: 1 vCPU, 1–2 GB RAM, 10 GB Speicher reichen aus
|
- **Ressourcen für den LXC**: 1 vCPU, 1–2 GB RAM, 100 GB Speicher reichen aus
|
||||||
- **Grundwissen**: SSH-Verbindung, Nano-Editor, Basiskenntnisse in n8n
|
- **Grundwissen**: SSH-Verbindung, Nano-Editor, Basiskenntnisse in n8n
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -26,6 +26,7 @@ Wir beginnen mit einem frischen Debian‑12‑LXC in Proxmox, benennen ihn `clip
|
|||||||
```bash
|
```bash
|
||||||
apt update && apt upgrade -y
|
apt update && apt upgrade -y
|
||||||
apt install -y curl unzip ffmpeg inotify-tools
|
apt install -y curl unzip ffmpeg inotify-tools
|
||||||
|
pip3 install ffmpeg-python numpy scipy soundfile
|
||||||
```
|
```
|
||||||
|
|
||||||
Eine korrekte Systemzeit ist entscheidend, da Schnittmarken später auf exakten Sekunden basieren. Prüfe die Zeit mit:
|
Eine korrekte Systemzeit ist entscheidend, da Schnittmarken später auf exakten Sekunden basieren. Prüfe die Zeit mit:
|
||||||
@@ -123,6 +124,8 @@ SFTP_PORT=22
|
|||||||
SFTP_USER=sftp_uploader
|
SFTP_USER=sftp_uploader
|
||||||
SFTP_KEY=/home/clipper/.ssh/nc_sftp_ed25519
|
SFTP_KEY=/home/clipper/.ssh/nc_sftp_ed25519
|
||||||
DROP_BASE="/mnt/hdd/incoming"
|
DROP_BASE="/mnt/hdd/incoming"
|
||||||
|
CLIPPER_PEAK_THRESHOLD=0.85
|
||||||
|
|
||||||
|
|
||||||
CLIPPER_IN=/srv/clipper/watch
|
CLIPPER_IN=/srv/clipper/watch
|
||||||
CLIPPER_OUT=/srv/clipper/out
|
CLIPPER_OUT=/srv/clipper/out
|
||||||
@@ -146,7 +149,7 @@ Erzeuge und fülle eine virtuelle Umgebung für die spätere Analyse:
|
|||||||
python3 -m venv /srv/clipper/.venv
|
python3 -m venv /srv/clipper/.venv
|
||||||
source /srv/clipper/.venv/bin/activate
|
source /srv/clipper/.venv/bin/activate
|
||||||
pip install --upgrade pip
|
pip install --upgrade pip
|
||||||
pip install numpy opencv-python-headless
|
pip install librosa soundfile numpy scipy
|
||||||
deactivate
|
deactivate
|
||||||
```
|
```
|
||||||
Wechsle für die nächsten Schritte **im Benutzer clipper** weiter.
|
Wechsle für die nächsten Schritte **im Benutzer clipper** weiter.
|
||||||
@@ -574,7 +577,10 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d
|
|||||||
PART="${TMP}/${ID}.mp4.part"
|
PART="${TMP}/${ID}.mp4.part"
|
||||||
LOCK="${TMP}/${ID}.lock"
|
LOCK="${TMP}/${ID}.lock"
|
||||||
|
|
||||||
mkdir -p "$TMP" "$LOGDIR" "$OUT_BASE"
|
FINAL_DIR="${OUT_BASE}/original"
|
||||||
|
FINAL_FILE="${FINAL_DIR}/${ID}.mp4"
|
||||||
|
|
||||||
|
mkdir -p "$TMP" "$LOGDIR" "$FINAL_DIR"
|
||||||
LOG="${LOGDIR}/download.log"
|
LOG="${LOGDIR}/download.log"
|
||||||
log(){ printf '[%(%F %T)T] %s\n' -1 "$*" ; }
|
log(){ printf '[%(%F %T)T] %s\n' -1 "$*" ; }
|
||||||
exec > >(tee -a "$LOG") 2>&1
|
exec > >(tee -a "$LOG") 2>&1
|
||||||
@@ -590,15 +596,31 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d
|
|||||||
log "URL: ${URL}"
|
log "URL: ${URL}"
|
||||||
log "TMP: ${TMP}"
|
log "TMP: ${TMP}"
|
||||||
|
|
||||||
|
# Wenn Zieldatei schon vorhanden → überspringen
|
||||||
|
if [[ -s "$FINAL_FILE" ]]; then
|
||||||
|
log "SKIP: Finaldatei existiert bereits → $FINAL_FILE"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Falls temp-Datei noch da ist → wiederaufnehmen
|
||||||
if [[ -s "$TEMP" && ! -s "$FILE" ]]; then
|
if [[ -s "$TEMP" && ! -s "$FILE" ]]; then
|
||||||
log "RESUME: $TEMP -> $FILE"
|
log "RESUME: $TEMP -> $FILE"
|
||||||
mv -f "$TEMP" "$FILE"
|
mv -f "$TEMP" "$FILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
OUT="${TMP}/${ID}.%(ext)s"
|
OUT="${TMP}/${ID}.%(ext)s"
|
||||||
yt-dlp -q --no-progress --retries 20 --fragment-retries 50 --retry-sleep 5 \
|
yt-dlp --newline \
|
||||||
--socket-timeout 30 --hls-prefer-ffmpeg --remux-video mp4 -o "$OUT" "$URL"
|
--progress \
|
||||||
|
--progress-template "progress: %(progress._percent_str)s" \
|
||||||
|
--retries 20 \
|
||||||
|
--fragment-retries 50 \
|
||||||
|
--retry-sleep 5 \
|
||||||
|
--socket-timeout 30 \
|
||||||
|
--hls-prefer-ffmpeg \
|
||||||
|
--remux-video mp4 \
|
||||||
|
-o "$OUT" "$URL"
|
||||||
|
|
||||||
|
# Fallback für .temp-Datei
|
||||||
[[ -s "$FILE" ]] || { [[ -s "$TEMP" ]] && mv -f "$TEMP" "$FILE"; }
|
[[ -s "$FILE" ]] || { [[ -s "$TEMP" ]] && mv -f "$TEMP" "$FILE"; }
|
||||||
|
|
||||||
if [[ ! -s "$FILE" ]]; then
|
if [[ ! -s "$FILE" ]]; then
|
||||||
@@ -606,17 +628,13 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d
|
|||||||
exit 10
|
exit 10
|
||||||
fi
|
fi
|
||||||
|
|
||||||
FINAL_DIR="${OUT_BASE}/original"
|
# Datei verschieben → Zielstruktur
|
||||||
mkdir -p "$FINAL_DIR"
|
mv -f "$FILE" "$FINAL_FILE"
|
||||||
mv -f "$FILE" "$FINAL_DIR/${ID}.mp4"
|
log "MOVE: ${FILE} -> ${FINAL_FILE}"
|
||||||
log "MOVE: ${FILE} -> ${FINAL_DIR}/${ID}.mp4"
|
|
||||||
|
|
||||||
log "=== DONE: VOD ${ID} erfolgreich geladen ==="
|
log "=== DONE: VOD ${ID} erfolgreich geladen ==="
|
||||||
|
|
||||||
```
|
```
|
||||||
Mit diesem Skript laden wir die aktuellen VODs herunter, laden sie in die Nextcloud für die weitere Verabeitung und räumen wieder auf. Zusätzlich erzeugen wir logs in `<clipper-ordner>/logs/<ID>.log`.
|
|
||||||
|
|
||||||
Damit die Datei auch ausgeführt werden kann, musst du die folgenden zwei Befehle eingeben:
|
|
||||||
```bash
|
```bash
|
||||||
chmod 755 <clipper-ordner>/bin/clipper-vod-get
|
chmod 755 <clipper-ordner>/bin/clipper-vod-get
|
||||||
chown clipper:clipper <clipper-ordner>/bin/clipper-vod-get
|
chown clipper:clipper <clipper-ordner>/bin/clipper-vod-get
|
||||||
|
|||||||
Reference in New Issue
Block a user