Skip to content

Instantly share code, notes, and snippets.

@olibartfast
Created November 29, 2025 13:26
Show Gist options
  • Select an option

  • Save olibartfast/39136288cb127aad7799f4efba087e63 to your computer and use it in GitHub Desktop.

Select an option

Save olibartfast/39136288cb127aad7799f4efba087e63 to your computer and use it in GitHub Desktop.
YOLO Model Comparison - Side-by-Side Video Prediction Tool
#!/bin/bash
# Script to run YOLO predictions with two models and compose results side-by-side
# Check if video input is provided
if [ "$#" -lt 1 ]; then
echo "Usage: $0 <input_video>"
echo "Example: $0 /path/to/video.mp4"
exit 1
fi
# Input video
INPUT_VIDEO="$1"
# Generate output filename: <input>_composed.avi
INPUT_BASENAME=$(basename "$INPUT_VIDEO")
INPUT_NAME="${INPUT_BASENAME%.*}"
INPUT_DIR=$(dirname "$INPUT_VIDEO")
OUTPUT_FILE="$INPUT_DIR/${INPUT_NAME}_composed.avi"
# Check if input file exists
if [ ! -f "$INPUT_VIDEO" ]; then
echo "Error: Input video $INPUT_VIDEO does not exist"
exit 1
fi
# Assign model paths from arguments
MODEL1="$2"
MODEL2="$3"
# Check if models exist
if [ ! -f "$MODEL1" ]; then
echo "Error: Model 1 ($MODEL1) does not exist"
exit 1
fi
if [ ! -f "$MODEL2" ]; then
echo "Error: Model 2 ($MODEL2) does not exist"
exit 1
fi
# Temporary output paths
TEMP_DIR=$(mktemp -d)
OUTPUT1="$TEMP_DIR/model1_prediction.mp4"
OUTPUT2="$TEMP_DIR/model2_prediction.mp4"
echo "==================================="
echo "Running YOLO Model Comparison"
echo "==================================="
echo "Input video: $INPUT_VIDEO"
echo "Model 1: $MODEL1"
echo "Model 2: $MODEL2"
echo "Confidence: $CONF"
echo "Output file: $OUTPUT_FILE"
echo "==================================="
# Run prediction with Model 1
echo ""
echo "[1/3] Running prediction with Model 1..."
yolo predict model="$MODEL1" source="$INPUT_VIDEO" conf="$CONF" save=True project="$TEMP_DIR" name="model1" exist_ok=True
# Find the output video from model 1
MODEL1_OUTPUT=$(find "$TEMP_DIR/model1" -type f -name "*.avi" -o -name "*.mp4" | head -n 1)
if [ -z "$MODEL1_OUTPUT" ]; then
echo "Error: Could not find output video from Model 1"
rm -rf "$TEMP_DIR"
exit 1
fi
mv "$MODEL1_OUTPUT" "$OUTPUT1"
# Run prediction with Model 2
echo ""
echo "[2/3] Running prediction with Model 2..."
yolo predict model="$MODEL2" source="$INPUT_VIDEO" conf="$CONF" save=True project="$TEMP_DIR" name="model2" exist_ok=True
# Find the output video from model 2
MODEL2_OUTPUT=$(find "$TEMP_DIR/model2" -type f -name "*.avi" -o -name "*.mp4" | head -n 1)
if [ -z "$MODEL2_OUTPUT" ]; then
echo "Error: Could not find output video from Model 2"
rm -rf "$TEMP_DIR"
exit 1
fi
mv "$MODEL2_OUTPUT" "$OUTPUT2"
# Get model names for labels
MODEL1_NAME=$(basename "$MODEL1" .pt)
MODEL2_NAME=$(basename "$MODEL2" .pt)
# Compose videos side-by-side
echo ""
echo "[3/3] Composing videos side-by-side..."
ffmpeg -i "$OUTPUT1" -i "$OUTPUT2" \
-filter_complex "[0:v]drawtext=text='$MODEL1_NAME':fontcolor=white:fontsize=24:box=1:boxcolor=black@0.5:boxborderw=5:x=(w-text_w)/2:y=10[v0]; \
[1:v]drawtext=text='$MODEL2_NAME':fontcolor=white:fontsize=24:box=1:boxcolor=black@0.5:boxborderw=5:x=(w-text_w)/2:y=10[v1]; \
[v1][v0]scale2ref=oh*mdar:h=in_h:[scaled1][v0]; \
[v0][scaled1]hstack[vo]" \
-map "[vo]" -c:v libx264 -crf 23 -preset medium "$OUTPUT_FILE" -y
# Check if composition was successful
if [ $? -eq 0 ]; then
echo ""
echo "==================================="
echo "✓ Success!"
echo "==================================="
echo "Comparison video saved to: $OUTPUT_FILE"
# Clean up temporary directory
rm -rf "$TEMP_DIR"
echo "Temporary files cleaned up"
else
echo ""
echo "Error: FFmpeg composition failed"
echo "Temporary files preserved in: $TEMP_DIR"
exit 1
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment