added video compressor
This commit is contained in:
@@ -47,7 +47,7 @@ alias star-edit="nano ~/.config/starship.toml"
|
||||
alias ssh="kitty +kitten ssh"
|
||||
alias pack="tar -cvJf" # pack compressed.tar.xz /folder/file1.txt /folder/folder2
|
||||
alias unpack="tar -xvf"
|
||||
|
||||
alias compress="~/.bash/compress.sh"
|
||||
|
||||
export GSK_RENDERER=cairo
|
||||
eval "$(starship init bash)"
|
||||
|
||||
Executable
+120
@@ -0,0 +1,120 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ==========================================
|
||||
# CONFIGURATION (Edit these!)
|
||||
# ==========================================
|
||||
GOTIFY_TOKEN="AH5NXt3g0lSCyfT" # <--- Paste your token here
|
||||
GOTIFY_URL="https://gotify.marlow.quest"
|
||||
SRC_DIR="$HOME/Videos/Compress"
|
||||
OUT_DIR="$SRC_DIR/Complete"
|
||||
|
||||
# ==========================================
|
||||
# DEPENDENCY CHECKS
|
||||
# ==========================================
|
||||
for cmd in gum HandBrakeCLI curl awk; do
|
||||
if ! command -v $cmd &> /dev/null; then
|
||||
echo "Error: '$cmd' is not installed."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Ensure directories exist
|
||||
mkdir -p "$SRC_DIR"
|
||||
mkdir -p "$OUT_DIR"
|
||||
|
||||
# ==========================================
|
||||
# GUM UI & SETTINGS
|
||||
# ==========================================
|
||||
clear
|
||||
gum style \
|
||||
--border double --border-foreground 240 --foreground 208 \
|
||||
--padding "1 6" --margin "1 1" --align center \
|
||||
"Video Converter"
|
||||
|
||||
# 1. Quality Selection
|
||||
QUALITY=$(gum input --prompt "Enter Quality Factor (CQ): " --placeholder "35" --width 50)
|
||||
[ -z "$QUALITY" ] && exit 0
|
||||
export QUALITY
|
||||
|
||||
# 2. Gotify Toggle
|
||||
if gum confirm "Enable Gotify notification upon completion?" --default=no --affirmative "Yes" --negative "No"; then
|
||||
if [ -z "$GOTIFY_TOKEN" ]; then
|
||||
gum style --foreground 196 "!! Warning: Gotify enabled but GOTIFY_TOKEN is empty at top of script. Skipping notification."
|
||||
GOTIFY_ENABLED=false
|
||||
else
|
||||
GOTIFY_ENABLED=true
|
||||
fi
|
||||
else
|
||||
GOTIFY_ENABLED=false
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# FILE PROCESSING
|
||||
# ==========================================
|
||||
shopt -s nocaseglob
|
||||
shopt -s nullglob
|
||||
cd "$SRC_DIR" || exit 1
|
||||
files=( *.mp4 *.mkv *.mov *.avi )
|
||||
|
||||
if [ ${#files[@]} -eq 0 ]; then
|
||||
gum style --foreground 208 "No video files found in $SRC_DIR."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
TOTAL_OLD_BYTES=0
|
||||
TOTAL_NEW_BYTES=0
|
||||
FILE_COUNT=0
|
||||
|
||||
gum style --foreground 208 --margin "1 0" "Found ${#files[@]} files. Starting queue..."
|
||||
|
||||
for f in "${files[@]}"; do
|
||||
filename=$(basename -- "$f")
|
||||
basename="${filename%.*}"
|
||||
export IN_FILE="$f"
|
||||
export OUT_FILE="$OUT_DIR/${basename}.mkv"
|
||||
|
||||
# Size calculations
|
||||
old_size=$(wc -c < "$f")
|
||||
old_mb=$(awk "BEGIN {printf \"%.1f\", $old_size/1048576}")
|
||||
|
||||
# Spinner & Handbrake
|
||||
gum spin --spinner minidot --spinner.foreground 208 --title "Encoding: $filename ($old_mb MB)..." -- \
|
||||
bash -c 'HandBrakeCLI -i "$IN_FILE" -o "$OUT_FILE" -e svt_av1 --encoder-preset 8 -q "$QUALITY" --vfr -l 1080 -E opus -B 128 > /dev/null 2>&1'
|
||||
|
||||
if [ $? -eq 0 ] && [ -f "$OUT_FILE" ]; then
|
||||
new_size=$(wc -c < "$OUT_FILE")
|
||||
new_mb=$(awk "BEGIN {printf \"%.1f\", $new_size/1048576}")
|
||||
saved_mb=$(awk "BEGIN {printf \"%.1f\", $old_mb - $new_mb}")
|
||||
|
||||
gum style --foreground 76 "✓ $filename"
|
||||
gum style --foreground 245 " ↳ Size: ${old_mb}MB → ${new_mb}MB (Saved: ${saved_mb}MB)"
|
||||
|
||||
TOTAL_OLD_BYTES=$((TOTAL_OLD_BYTES + old_size))
|
||||
TOTAL_NEW_BYTES=$((TOTAL_NEW_BYTES + new_size))
|
||||
((FILE_COUNT++))
|
||||
else
|
||||
gum style --foreground 196 "✗ Failed: $filename"
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
|
||||
# ==========================================
|
||||
# SUMMARY & NOTIFICATION
|
||||
# ==========================================
|
||||
TOTAL_SAVED_MB=$(awk "BEGIN {printf \"%.1f\", ($TOTAL_OLD_BYTES - TOTAL_NEW_BYTES)/1048576}")
|
||||
|
||||
gum style \
|
||||
--border rounded --border-foreground 208 --foreground 245 \
|
||||
--padding "1 2" --margin "1 0" \
|
||||
"Batch Complete! Processed: $FILE_COUNT files | Total Saved: $TOTAL_SAVED_MB MB"
|
||||
|
||||
if [ "$GOTIFY_ENABLED" = true ] && [ $FILE_COUNT -gt 0 ]; then
|
||||
MESSAGE="Finished processing $FILE_COUNT videos. Total space saved: $TOTAL_SAVED_MB MB."
|
||||
|
||||
curl -s -S "$GOTIFY_URL/message?token=$GOTIFY_TOKEN" \
|
||||
-F "title=✅ Video Encoding Complete" \
|
||||
-F "message=$MESSAGE" \
|
||||
-F "priority=5" > /dev/null
|
||||
|
||||
gum style --foreground 240 " (Gotify notification sent)"
|
||||
fi
|
||||
Reference in New Issue
Block a user