diff --git a/Kapitel 13/Tutorial.md b/Kapitel 13/Tutorial.md index e88d29a..2576ac1 100644 --- a/Kapitel 13/Tutorial.md +++ b/Kapitel 13/Tutorial.md @@ -557,61 +557,61 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d Nun befüllst du sie mit: ```bash #!/usr/bin/env bash -set -euo pipefail + set -euo pipefail -ENV_FILE="/etc/clipper/clipper.env" -[[ -r "$ENV_FILE" ]] || { echo "ENV nicht lesbar: $ENV_FILE" >&2; exit 1; } -source "$ENV_FILE" + ENV_FILE="/etc/clipper/clipper.env" + [[ -r "$ENV_FILE" ]] || { echo "ENV nicht lesbar: $ENV_FILE" >&2; exit 1; } + source "$ENV_FILE" -ID="${1:?need VOD id}" -URL="${2:-https://www.twitch.tv/videos/${ID}}" + ID="${1:?need VOD id}" + URL="${2:-https://www.twitch.tv/videos/${ID}}" -TMP="${CLIPPER_TMP:-/srv/clipper/temp}" -OUT_BASE="${CLIPPER_OUT:-/srv/clipper/out}/${ID}" -LOGDIR="${CLIPPER_LOG:-/srv/clipper/logs}/${ID}" -FILE="${TMP}/${ID}.mp4" -TEMP="${TMP}/${ID}.temp.mp4" -PART="${TMP}/${ID}.mp4.part" -LOCK="${TMP}/${ID}.lock" + TMP="${CLIPPER_TMP:-/srv/clipper/temp}" + OUT_BASE="${CLIPPER_OUT:-/srv/clipper/out}/${ID}" + LOGDIR="${CLIPPER_LOG:-/srv/clipper/logs}/${ID}" + FILE="${TMP}/${ID}.mp4" + TEMP="${TMP}/${ID}.temp.mp4" + PART="${TMP}/${ID}.mp4.part" + LOCK="${TMP}/${ID}.lock" -mkdir -p "$TMP" "$LOGDIR" "$OUT_BASE" -LOG="${LOGDIR}/download.log" -log(){ printf '[%(%F %T)T] %s\n' -1 "$*" ; } -exec > >(tee -a "$LOG") 2>&1 + mkdir -p "$TMP" "$LOGDIR" "$OUT_BASE" + LOG="${LOGDIR}/download.log" + log(){ printf '[%(%F %T)T] %s\n' -1 "$*" ; } + exec > >(tee -a "$LOG") 2>&1 -exec 9>"$LOCK" -if ! flock -n 9; then - log "LOCK: $ID wird bereits verarbeitet" - exit 0 -fi -trap 'flock -u 9; rm -f "$LOCK"' EXIT + exec 9>"$LOCK" + if ! flock -n 9; then + log "LOCK: $ID wird bereits verarbeitet" + exit 0 + fi + trap 'flock -u 9; rm -f "$LOCK"' EXIT -log "=== START: VOD ${ID} ===" -log "URL: ${URL}" -log "TMP: ${TMP}" + log "=== START: VOD ${ID} ===" + log "URL: ${URL}" + log "TMP: ${TMP}" -if [[ -s "$TEMP" && ! -s "$FILE" ]]; then - log "RESUME: $TEMP -> $FILE" - mv -f "$TEMP" "$FILE" -fi + if [[ -s "$TEMP" && ! -s "$FILE" ]]; then + log "RESUME: $TEMP -> $FILE" + mv -f "$TEMP" "$FILE" + fi -OUT="${TMP}/${ID}.%(ext)s" -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" + OUT="${TMP}/${ID}.%(ext)s" + 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"; } + [[ -s "$FILE" ]] || { [[ -s "$TEMP" ]] && mv -f "$TEMP" "$FILE"; } -if [[ ! -s "$FILE" ]]; then - log "ERROR: Download fehlgeschlagen ($FILE fehlt/leer)" - exit 10 -fi + if [[ ! -s "$FILE" ]]; then + log "ERROR: Download fehlgeschlagen ($FILE fehlt/leer)" + exit 10 + fi -FINAL_DIR="${OUT_BASE}/original" -mkdir -p "$FINAL_DIR" -mv -f "$FILE" "$FINAL_DIR/${ID}.mp4" -log "MOVE: ${FILE} -> ${FINAL_DIR}/${ID}.mp4" + FINAL_DIR="${OUT_BASE}/original" + mkdir -p "$FINAL_DIR" + mv -f "$FILE" "$FINAL_DIR/${ID}.mp4" + 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 `/logs/.log`.