Add runtime encoder fallback to git_converter

This commit is contained in:
Stu Leak 2025-12-10 15:37:03 -05:00
parent ed2d087730
commit a8d42b2c8f

View File

@ -7,6 +7,22 @@
OUT="Converted" OUT="Converted"
mkdir -p "$OUT" mkdir -p "$OUT"
# Choose best available encoder with runtime check
pick_encoder() {
# candidate list in order of preference
local candidates=("$@")
for enc in "${candidates[@]}"; do
# Quick runtime probe: attempt tiny encode and discard output
if ffmpeg -hide_banner -loglevel error \
-f lavfi -i color=size=16x16:rate=1 -frames:v 1 \
-c:v "$enc" -f null - >/dev/null 2>&1; then
echo "$enc"
return 0
fi
done
return 1
}
clear clear
cat << "EOF" cat << "EOF"
@ -61,8 +77,8 @@ echo
read -p " Enter 16 → " c read -p " Enter 16 → " c
case $c in case $c in
1|3) codec="av1_amf" ;; 1|3) codec_pref=("av1_amf" "libaom-av1") ;;
2|4|5|6) codec="hevc_amf" ;; 2|4|5|6) codec_pref=("hevc_amf" "hevc_nvenc" "h264_nvenc" "libx265") ;;
*) echo "Invalid — exiting"; sleep 3; exit ;; *) echo "Invalid — exiting"; sleep 3; exit ;;
esac esac
@ -76,6 +92,15 @@ case $c in
*) fps_filter=""; suf="" ;; *) fps_filter=""; suf="" ;;
esac esac
# Resolve encoder now, once
codec=$(pick_encoder "${codec_pref[@]}")
if [ -z "$codec" ]; then
echo "No supported encoder found (tried: ${codec_pref[*]})."
echo "Install/enable GPU drivers or fall back to CPU codecs."
echo "Defaulting to libx265."
codec="libx265"
fi
# — Bitrate Selection — # — Bitrate Selection —
clear clear
cat << "EOF" cat << "EOF"
@ -131,10 +156,13 @@ for f in *.mp4 *.mkv *.mov *.avi *.wmv *.ts *.m2ts; do
fi fi
# FINAL FIXED CONVERSION — 1080p FORCED + 60fps works # FINAL FIXED CONVERSION — 1080p FORCED + 60fps works
ffmpeg -y -i "$f" $bitdepth_filter -vf "scale=${scale}:flags=lanczos${fps_filter}" \ if ffmpeg -y -i "$f" $bitdepth_filter -vf "scale=${scale}:flags=lanczos${fps_filter}" \
-c:v "$codec" -b:v "$this_bitrate" -c:a aac -b:a 192k -ac 2 "$out" -c:v "$codec" -b:v "$this_bitrate" -c:a aac -b:a 192k -ac 2 "$out"; then
echo "DONE → $(basename "$out")"
echo "DONE → $(basename "$out")" else
echo "FAILED → $f (encoder: $codec). Check ffmpeg output above."
rm -f "$out"
fi
echo echo
done done