Kapitel 13/Tutorial.md aktualisiert
This commit is contained in:
@@ -123,6 +123,7 @@ CLIPPER_IN=/srv/clipper/watch
|
||||
CLIPPER_OUT=/srv/clipper/out
|
||||
CLIPPER_TMP=/srv/clipper/temp
|
||||
CLIPPER_LOG=/srv/clipper/logs/clipper.log
|
||||
CLIPPER_NC_REMOTE="nc:<DEIN-REMOTE>/<BASISPFAD>"
|
||||
```
|
||||
Dateirechte setzen, damit `clipper` sie lesen darf:
|
||||
```bash
|
||||
@@ -436,32 +437,79 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
. /etc/clipper/clipper.env
|
||||
|
||||
ID="${1:?need VOD id}"
|
||||
URL="${2:-https://www.twitch.tv/videos/${ID}}"
|
||||
TMP="<clipper-ordner>/temp"
|
||||
LOGDIR="<clipper-ordner>/logs"
|
||||
|
||||
TMP="${CLIPPER_TMP}"
|
||||
OUT_BASE="${CLIPPER_OUT}/${ID}"
|
||||
LOGDIR="${CLIPPER_LOG}/${ID}"
|
||||
CONF="/home/clipper/.config/rclone/rclone.conf"
|
||||
DST="nc:<gewünschter Ordner>/VODs/${ID}/"
|
||||
|
||||
DST="${CLIPPER_NC_REMOTE}/VODs/${ID}/"
|
||||
|
||||
OUT="$TMP/${ID}.%(ext)s"
|
||||
FILE="$TMP/${ID}.mp4"
|
||||
TEMP="$TMP/${ID}.temp.mp4"
|
||||
PART="$TMP/${ID}.mp4.part"
|
||||
LOCK="$TMP/${ID}.lock"
|
||||
LOG="$LOGDIR/${ID}.log"
|
||||
|
||||
mkdir -p "$TMP" "$LOGDIR"
|
||||
log() { echo "[$(date '+%F %T')] $*" | tee -a "$LOG"; }
|
||||
LOG="$LOGDIR/download.log"
|
||||
log(){ echo "[$(date '+%F %T')] $*"; }
|
||||
exec > >(tee -a "$LOG") 2>&1
|
||||
|
||||
log "=== Start VOD $ID ==="
|
||||
log "URL: $URL"
|
||||
if rclone lsf "$DST" --config "$CONF" >/dev/null 2>&1; then log "SKIP: $ID bereits in Nextcloud"; exit 0; fi
|
||||
if [[ -e "$LOCK" ]]; then log "LOCK: $ID wird bereits verarbeitet"; exit 0; fi
|
||||
trap 'rm -f "$LOCK"' EXIT; : > "$LOCK"
|
||||
if [[ -s "$TEMP" && ! -s "$FILE" ]]; then mv -f "$TEMP" "$FILE"; fi
|
||||
if [[ -s "$FILE" ]]; then rclone move "$FILE" "$DST" --config "$CONF" --create-empty-src-dirs -v; rm -f "$PART" "$TEMP" || true; exit 0; fi
|
||||
yt-dlp -q --no-progress --retries 20 --fragment-retries 50 --retry-sleep 5 --socket-timeout 30 --hls-prefer-ffmpeg --remux-video mp4 -o "$OUT" "$URL"
|
||||
[[ -s "$FILE" ]] || { [[ -s "$TEMP" ]] && mv -f "$TEMP" "$FILE"; }
|
||||
if [[ ! -s "$FILE" ]]; then log "ERROR: Download fehlgeschlagen ($FILE fehlt/leer)"; exit 2; fi
|
||||
log "DST: $DST"
|
||||
|
||||
if rclone lsf "$DST" --config "$CONF" >/dev/null 2>&1; then
|
||||
log "SKIP: $ID bereits in Nextcloud"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ -e "$LOCK" ]]; then
|
||||
log "LOCK: $ID wird bereits verarbeitet"
|
||||
exit 0
|
||||
fi
|
||||
trap 'rm -f "$LOCK"' EXIT
|
||||
: > "$LOCK"
|
||||
|
||||
# Resume
|
||||
if [[ -s "$TEMP" && ! -s "$FILE" ]]; then
|
||||
log "RESUME: $TEMP -> $FILE"
|
||||
mv -f "$TEMP" "$FILE"
|
||||
fi
|
||||
|
||||
if [[ -s "$FILE" ]]; then
|
||||
log "MOVE (resume): $FILE → $DST"
|
||||
rclone move "$FILE" "$DST" --config "$CONF" --create-empty-src-dirs -v
|
||||
rm -f "$PART" "$TEMP" || true
|
||||
log "CLEANUP: $TMP"
|
||||
rm -rf "${TMP:?}/"*
|
||||
log "=== Done VOD $ID (resume path) ==="
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Download + Remux
|
||||
yt-dlp -q --no-progress --retries 20 --fragment-retries 50 --retry-sleep 5 \
|
||||
--socket-timeout 30 --hls-prefer-ffmpeg --remux-video mp4 -o "$OUT" "$URL"
|
||||
|
||||
[[ -s "$FILE" ]] || { [[ -s "$TEMP" ]] && mv -f "$TEMP" "$FILE"; }
|
||||
|
||||
if [[ ! -s "$FILE" ]]; then
|
||||
log "ERROR: Download fehlgeschlagen ($FILE fehlt/leer)"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
log "MOVE: $FILE → $DST"
|
||||
rclone move "$FILE" "$DST" --config "$CONF" --create-empty-src-dirs -v
|
||||
rm -f "$PART" "$TEMP" || true
|
||||
|
||||
log "CLEANUP: $TMP"
|
||||
rm -rf "${TMP:?}/"*
|
||||
|
||||
log "=== Done VOD $ID ==="
|
||||
```
|
||||
Rechte setzen:
|
||||
|
||||
Reference in New Issue
Block a user