#!/bin/bash # GWEncoder v3.0 Comprehensive Testing Script # Tests all encoding modes with testvid.webm and compares results set -e echo "๐Ÿงช GWEncoder v3.0 - Comprehensive Encoding Test" echo "================================================" echo "" # Check if testvid.webm exists if [ ! -f "testvid.webm" ]; then echo "โŒ testvid.webm not found in current directory" exit 1 fi # Get source file info echo "๐Ÿ“Š SOURCE FILE INFORMATION" echo "==========================" SOURCE_SIZE=$(stat -c%s "testvid.webm") SOURCE_SIZE_MB=$(echo "scale=2; $SOURCE_SIZE / 1024 / 1024" | bc) SOURCE_DURATION=$(ffprobe -v quiet -select_streams v:0 -show_entries format=duration -of csv=p=0 testvid.webm) SOURCE_RESOLUTION=$(ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height -of csv=p=0 testvid.webm) echo "File: testvid.webm" GENL_SIZE_MB=$(echo "scale=2; $SOURCE_SIZE / 1024 / 1024" | bc) echo "Size: $SOURCE_SIZE_MB MB" echo "Duration: $SOURCE_DURATION seconds" echo "Resolution: $SOURCE_RESOLUTION" echo "" # Create results file RESULTS_FILE="encoding_test_results.txt" echo "GWEncoder v3.0 - Encoding Test Results" > $RESULTS_FILE echo "Generated: $(date)" >> $RESULTS_FILE echo "Source: testvid.webm ($SOURCE_SIZE_MB MB, $SOURCE_DURATION s, $SOURCE_RESOLUTION)" >> $RESULTS_FILE echo "" >> $RESULTS_FILE echo "Mode,CRF,Preset,Container,Audio Bitrate,Encoding Time,Output Size (MB),Size Reduction (%),Compression Ratio" >> $RESULTS_FILE # Function to run encoding test run_test() { local mode=$1 local mode_name=$2 echo "๐Ÿš€ Testing $mode_name mode..." echo "Mode: $mode_name" >> $RESULTS_FILE # Clean up any previous outputs rm -f *-AV1-*-GWELL.* # Record start time start_time=$(date +%s) # Run encoding if ./gwencoder --$mode; then # Record end time end_time=$(date +%s) encoding_time=$((end_time - start_time)) # Find the output file output_file=$(ls *-AV1-*-GWELL.* 2>/dev/null | head -1) if [ -f "$output_file" ]; then output_size=$(stat -c%s "$output_file") output_size_mb=$(echo "scale=2; $output_size / 1024 / 1024" | bc) size_reduction=$(echo "scale=2; (($SOURCE_SIZE - $output_size) * 100) / $SOURCE_SIZE" | bc) compression_ratio=$(echo "scale=2; $SOURCE_SIZE / $output_size" | bc) echo "โœ… $mode_name completed in ${encoding_time}s" echo " Output: $output_file" echo " Size: $output_size_mb MB" echo " Reduction: ${size_reduction}%" echo " Compression: ${compression_ratio}:1" echo "" # Extract settings from the output file name and mode case $mode in "fast") echo "fast,32,10,mkv,64,$encoding_time,$output_size_mb,$size_reduction,$compression_ratio" >> $RESULTS_FILE ;; "web") echo "web,40,10,webm,64,$encoding_time,$output_size_mb,$size_reduction,$compression_ratio" >> $RESULTS_FILE ;; "quick") echo "quick,32,10,mkv,80,$encoding_time,$output_size_mb,$size_reduction,$compression_ratio" >> $RESULTS_FILE ;; "tiny") echo "tiny,45,8,mp4,64,$encoding_time,$output_size_mb,$size_reduction,$compression_ratio" >> $RESULTS_FILE ;; esac else echo "โŒ No output file found for $mode_name" echo "ERROR: No output file generated" >> $RESULTS_FILE fi else echo "โŒ $mode_name encoding failed" echo "ERROR: Encoding failed" >> $RESULTS_FILE fi echo "" >> $RESULTS_FILE echo "---" >> $RESULTS_FILE echo "" } # Check if gwencoder exists if [ ! -f "./gwencoder" ]; then echo "๐Ÿ”จ Building gwencoder..." if [ -f "./build.sh" ]; then ./build.sh else echo "โŒ Build script not found. Please build manually." exit 1 fi fi echo "๐Ÿ“‹ TESTING ALL ENCODING MODES" echo "=============================" echo "" # Test all modes run_test "fast" "Fast AV1" run_test "web" "Web-Optimized" run_test "quick" "Quick" run_test "tiny" "Tiny" echo "๐Ÿ“Š FINAL RESULTS SUMMARY" echo "========================" echo "" # Display results table echo "Mode | CRF | Preset | Container | Audio | Time(s) | Size(MB) | Reduction | Compression" echo "----------------|-----|--------|-----------|-------|---------|----------|-----------|------------" # Parse results and display tail -n +6 $RESULTS_FILE | grep -v "^$" | grep -v "^---$" | grep -v "^ERROR" | while IFS=',' read -r mode crf preset container audio time size reduction compression; do printf "%-15s | %-3s | %-6s | %-9s | %-5s | %-7s | %-8s | %-9s | %-11s\n" "$mode" "$crf" "$preset" "$container" "$audio" "$time" "$size" "$reduction%" "${compression}:1" done echo "" echo "๐Ÿ“ Results saved to: $RESULTS_FILE" echo "" # Show file sizes echo "๐Ÿ“ OUTPUT FILES:" echo "================" ls -lh *-AV1-*-GWELL.* 2>/dev/null | awk '{print $5, $9}' | while read size file; do echo "$size - $file" done echo "" echo "๐ŸŽฏ COMPARISON WITH ORIGINAL TOOLS:" echo "==================================" echo "" echo "Original tools consolidated:" echo "โ€ข gwemplate โ†’ --fast mode (CRF 32, MKV, Opus 64kbps)" echo "โ€ข gwquick --web โ†’ --web mode (CRF 40, WEBM, Opus 64kbps)" echo "โ€ข gwquick --quick โ†’ --quick mode (CRF 32, MKV, Opus 80kbps)" echo "โ€ข gwquick --tiny โ†’ --tiny mode (CRF 45, MP4, Opus 64kbps)" echo "" echo "All functionality preserved in unified gwencoder tool!" echo "" echo "โœ… Testing complete!"