VideoTools/scripts/git_converter/modules/encode.sh
Jake P 799102cac7 Attempted to create GUI
Attempted to create GUIs for both lt-convert and lt-gui
2025-12-17 22:50:59 +00:00

96 lines
3.2 KiB
Bash

#!/bin/bash
# ===================================================================
# Encoding Module - GIT Converter v2.7
# Core ffmpeg execution logic
# ===================================================================
encode_video() {
local input_file="$1"
local output_file="$2"
local encoder="$3"
local quality_params="$4"
local filter_chain="$5"
echo "Processing: $input_file$(basename "$output_file")"
# Stream copy mode: when user explicitly chooses no processing
if [[ "$DO_RESOLUTION" == "false" && "$DO_FPS" == "false" && "$DO_COLOR" == "false" ]]; then
echo "🚀 STREAM COPY: No processing selected"
ffmpeg -y -i "$input_file" -c:v copy -c:a copy "$output_file"
return $?
fi
# Fast bypass mode: stream copy when no processing needed
if [[ -z "$filter_chain" && -z "$quality_params" ]]; then
echo "🚀 FAST BYPASS: Stream copy (no re-encoding)"
ffmpeg -y -i "$input_file" -c:v copy -c:a copy "$output_file"
return $?
fi
# Build optimized ffmpeg command
if [[ -n "$filter_chain" ]]; then
ffmpeg -y -i "$input_file" -pix_fmt yuv420p -vf "$filter_chain" \
-c:v "$encoder" $quality_params -c:a aac -b:a 192k -ac 2 "$output_file"
else
ffmpeg -y -i "$input_file" -pix_fmt yuv420p \
-c:v "$encoder" $quality_params -c:a aac -b:a 192k -ac 2 "$output_file"
fi
if [[ $? -eq 0 ]]; then
echo "DONE → $(basename "$output_file")"
return 0
else
echo "ERROR → Failed to process $input_file"
return 1
fi
}
process_files() {
local video_files=("$@")
local encoder="$1"
local quality_params="$2"
local filter_chain="$3"
local suf="$4"
local color_suf="$5"
local ext="$6"
# Simple queue processing
local total_files=${#video_files[@]}
local current_file=0
echo "📋 Queue: $total_files file(s) to process"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
for f in "${video_files[@]}"; do
[[ -f "$f" ]] || continue
((current_file++))
# Extract basename for output filename
basename_f=$(basename "$f")
out="$OUT/${basename_f%.*}${suf}${color_suf}__cv.$ext"
echo "📁 [$current_file/$total_files] Processing: $basename_f"
if [[ -f "$out" ]]; then
echo "⚠️ SKIP - Output file already exists"
echo
continue
fi
encode_video "$f" "$out" "$encoder" "$quality_params" "$filter_chain"
if [[ $? -eq 0 ]]; then
echo "✅ [$current_file/$total_files] COMPLETED: $(basename "$out")"
else
echo "❌ [$current_file/$total_files] FAILED: $basename_f"
fi
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
done
echo "🎉 Queue processing complete!"
echo "📁 All files saved to: $OUT"
}