#!/bin/bash LOGFILE="/home/sandro/m3u/livetv_log.txt" ARGS=("$@") IS_LIVE=false MODIFIED="NEIN" for arg in "${ARGS[@]}"; do if [[ "$arg" == rtsp://* ]] || [[ "$arg" == http://* && "$arg" == *m3u8* ]]; then IS_LIVE=true break fi done if [ "$IS_LIVE" = true ]; then # Wir bauen die ARGS komplett neu, um die Positionierung zu garantieren NEW_ARGS=() FOUND_AUDIO=false for i in "${!ARGS[@]}"; do # Wenn wir das Ziel-File erreichen (letztes Argument), # fügen wir unsere Spezial-Parameter davor ein. if [ $i -eq $((${#ARGS[@]} - 1)) ]; then # Wenn bisher kein Audio-Codec gefunden wurde, erzwingen wir Video + Audio Mapping if [ "$FOUND_AUDIO" = false ]; then # -map 0:v:0 -> Nimm das erste Video-Signal # -map 0:a:0? -> Nimm das erste Audio-Signal (falls vorhanden) NEW_ARGS+=("-map" "0:v:0" "-map" "0:a:0?" "-codec:a:0" "libfdk_aac" "-b:a" "128k") MODIFIED="JA (Full Map + fdk_aac)" fi fi # Aktuelles Argument hinzufügen NEW_ARGS+=("${ARGS[$i]}") # Prüfen, ob Jellyfin schon Audio-Parameter liefert (falls ja, ersetzen wir sie) if [[ "${ARGS[$i]}" == "-codec:a:0" || "${ARGS[$i]}" == "-c:a" ]]; then # Der Codec ist immer das NÄCHSTE Element im Array # Das wird im nächsten Schleifendurchlauf durch den Check oben überschrieben oder wir machen es hier: # Da das Skript komplexer wird, belassen wir es beim "Erzwingen"-Ansatz, # da dein Log zeigt, dass Jellyfin es eh vergisst. FOUND_AUDIO=true fi done ARGS=("${NEW_ARGS[@]}") fi echo "[$(date '+%Y-%m-%d %H:%M:%S')] Live: $IS_LIVE | Mod: $MODIFIED | Cmd: ${ARGS[*]}" >> "$LOGFILE" exec /usr/lib/jellyfin-ffmpeg/ffmpeg.original "${ARGS[@]}"