#!/bin/bash
# Parameters
max_frames=512 # maximum number of frames to extract
max_pixel_size=32 # output resolution (max 32)
frame_interval=5 # extract every nth frame
stretch=false # stretch frames to square
center_crop=true # crop to the center square of the video
if [ -z "$1" ]; then
echo "Usage: $0 "
exit 1
fi
input_file="$1"
base_name=$(basename "$input_file" | sed 's/\.[^.]*$//')
output_dir="$base_name"
mkdir -p "$output_dir"
if [ "$center_crop" = true ]; then
scale_option="crop=min(iw\,ih):min(iw\,ih),scale=${max_pixel_size}:${max_pixel_size}"
elif [ "$stretch" = true ]; then
scale_option="scale=${max_pixel_size}:${max_pixel_size}"
else
scale_option="scale=${max_pixel_size}:${max_pixel_size}:force_original_aspect_ratio=decrease,pad=${max_pixel_size}:${max_pixel_size}:-1:-1:black"
fi
ffmpeg -i "$input_file" -vf "select='not(mod(n\,${frame_interval}))',$scale_option" -vsync vfr -frames:v ${max_frames} "$output_dir/frame_%03d.png"
echo "Conversion complete. PNG frames are stored in the '$output_dir' directory."