51 lines
1.8 KiB
Bash
Executable File
51 lines
1.8 KiB
Bash
Executable File
#!/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[@]}"
|