diff --git a/scripts/git_converter/git_converter.sh b/scripts/git_converter/git_converter.sh new file mode 100644 index 0000000..d7c6625 --- /dev/null +++ b/scripts/git_converter/git_converter.sh @@ -0,0 +1,144 @@ +#!/bin/bash +# =================================================================== +# GIT Converter — FINAL — 1080p FORCED + 60 FPS FIXED +# Author: LeakTechnologies +# =================================================================== + +OUT="Converted" +mkdir -p "$OUT" + +clear +cat << "EOF" + +╔═══════════════════════════════════════════════════════════════════════════════╗ +║ ║ +║ GIT Converter (December 2025) ║ +║ by LeakTechnologies ║ +║ ║ +╚═══════════════════════════════════════════════════════════════════════════════╝ + +EOF + +# — Resolution — +echo " Choose your resolution:" +echo +echo " 1) Source file resolution (no upscale)" +echo " 2) 720p (1280×720)" +echo " 3) 1080p (1920×1080)" +echo " 4) 1440p (2560×1440)" +echo " 5) 4K (3840×2160)" +echo " 6) 2X Upscale" +echo " 7) 4X Upscale" +echo +read -p " Enter 1–7 → " res + +case $res in + 1) scale="" ; res_name="Source" ;; + 2) scale="1280:720" ; res_name="720p" ;; + 3) scale="1920:1080" ; res_name="1080p" ;; + 4) scale="2560:1440" ; res_name="1440p" ;; + 5) scale="3840:2160" ; res_name="4K" ;; + 6) scale="iw*2:ih*2" ; res_name="2X" ;; + 7) scale="iw*4:ih*4" ; res_name="4X" ;; + *) echo "Invalid — using 1080p"; scale="1920:1080"; res_name="1080p" ;; +esac + +# — Codec + FPS + Container — +clear +cat << "EOF" +╔═══════════════════════════════════════════════════════════════╗ +║ Choose codec + FPS ║ +╚═══════════════════════════════════════════════════════════════╝ + + 1) [MKV] AV1_AMF — Original FPS + 2) [MKV] HEVC — Original FPS + 3) [MKV] AV1_AMF — 60 FPS + 4) [MKV] HEVC — 60 FPS + 5) [MP4] HEVC — Original FPS + 6) [MP4] HEVC — 60 FPS +EOF +echo +read -p " Enter 1–6 → " c + +case $c in + 1|3) codec="av1_amf" ;; + 2|4|5|6) codec="hevc_amf" ;; + *) echo "Invalid — exiting"; sleep 3; exit ;; +esac + +case $c in + 1|2|3|4) ext="mkv" ;; + 5|6) ext="mp4" ;; +esac + +case $c in + 3|4|6) fps_filter=",fps=60"; suf="_60fps" ;; + *) fps_filter=""; suf="" ;; +esac + +# — Bitrate Selection — +clear +cat << "EOF" +╔═══════════════════════════════════════════════════════════════╗ +║ Choose bitrate ║ +╚═══════════════════════════════════════════════════════════════╝ + + 1) 1800 kbps + 2) 2000 kbps + 3) 2300 kbps + 4) 2600 kbps + 5) 2900 kbps + 6) 3200 kbps + 7) 3500 kbps + 8) 3800 kbps + 9) Source file bitrate +EOF +echo +read -p " Enter 1–9 → " b + +case $b in + 1) BITRATE="1800k" ;; + 2) BITRATE="2000k" ;; + 3) BITRATE="2300k" ;; + 4) BITRATE="2600k" ;; + 5) BITRATE="2900k" ;; + 6) BITRATE="3200k" ;; + 7) BITRATE="3500k" ;; + 8) BITRATE="3800k" ;; + 9) BITRATE="source" ;; + *) BITRATE="2400k"; echo "Invalid → using default 2400k" ;; +esac + +# Force 8-bit input +bitdepth_filter="-pix_fmt yuv420p" + +echo +echo "Encoding → $codec | $res_name | $ext $suf @ ${BITRATE:-source} kbps" +echo + +for f in *.mp4 *.mkv *.mov *.avi *.wmv *.ts *.m2ts; do + [[ -f "$f" ]] || continue + + out="$OUT/${f%.*}${suf}__cv.$ext" + [[ -f "$out" ]] && { echo "SKIP $f"; continue; } + + # Source bitrate if chosen + if [ "$BITRATE" = "source" ]; then + src_bitrate=$(ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of csv=p=0 "$f" 2>/dev/null || echo 2400000) + this_bitrate=$(( src_bitrate / 1000 ))k + else + this_bitrate="$BITRATE" + fi + + # FINAL FIXED CONVERSION — 1080p FORCED + 60fps works + 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" + + echo "DONE → $(basename "$out")" + echo +done + +echo "========================================================" +echo "All finished — files in '$OUT'" +echo "========================================================" +read -p "Press Enter to exit" \ No newline at end of file