#!/bin/bash

# Zielverzeichnis definieren
OUTPUT_DIR="./"
mkdir -p "$OUTPUT_DIR"

echo "Starte Konvertierung aller Videoformate mit AMD GPU (H.265)..."

# Aktiviert "Case-Insensitivity" (Sucht nach .mp4 UND .MP4 etc.)
shopt -s extglob nocaseglob

# Schleife durch alle gängigen Videoendungen
for f in *.*(mp4|avi|mov|flv|wmv|webm|m4v|3gp|ts); do
  # Prüfen, ob überhaupt passende Dateien existieren
  [ -f "$f" ] || continue

  # Verhindert, dass bereits konvertierte Dateien im Zielordner erneut gelesen werden
  if [[ "$f" == "$OUTPUT_DIR"/* ]]; then continue; fi

  # Alten Suffix abschneiden und durch .mkv ersetzen
  filename="${f%.*}"
  output_file="${OUTPUT_DIR}/${filename}.mkv"

  echo "--------------------------------------------------"
  echo "Verarbeite: $f -> $output_file"

  # ffmpeg Aufruf mit minimaler Ausgabe
  # ffmpeg Aufruf mit automatischer Hardware-Initialisierung und Speicher-Upload
  # Fehlertolerant durch CPU-Decoding, aber optimiert für schnellen GPU-Upload

  # Ultraschnell & Robust: GPU dekodiert und ignoriert Stream-Fehler eigenständig


#  ffmpeg -v error -stats \
#    -fflags +genpts+discardcorrupt \
#    -init_hw_device vaapi=amd:/dev/dri/renderD128 \
#    -i "$f" \
#    -vf "format=nv12,hwupload" \
#    -c:v hevc_vaapi -rc_mode CQP -qp 25 \
#    -c:a copy \
#    "$output_file"

#  ffmpeg -v error -stats \
#  	-fflags +genpts+discardcorrupt \
#  	-init_hw_device vaapi=amd:/dev/dri/renderD128 \
#  	-i "$f" \
#  	-vf format=p010le,hwupload \
#    -c:v hevc_vaapi -rc_mode VBR -b:v 3.8M -maxrate 6.5M -bufsize 6.5M -hevc_vdo_deblock_disable 0 -bf 3 \
#  	-c:a copy \
#  	"$output_file"

#  	-c:v hevc_vaapi -rc_mode VBR -b:v 3.5M -maxrate 6M -bufsize 6M -bf 3 \

#  	-vf format=nv12,hwupload \
  	#-c:v hevc_vaapi -rc_mode VBR -b:v 3.5M -maxrate 6M -bf 4 \
  ffmpeg -i "$f" \
    -c:v libx265 -crf 22 -preset medium -pix_fmt yuv420p10le \
    -g 240 -keyint_min 24 \
    -c:a copy \
    "$output_file"
 
done

# Schaltet die erweiterte Suche nach dem Skript wieder aus
shopt -u extglob nocaseglob

echo "--------------------------------------------------"
echo "Fertig! Alle Videos wurden im Ordner '$OUTPUT_DIR' gespeichert."
