#!/bin/bash # Creates a gif using a list of files from stdin tmpdir="/tmp/sxiv-gif/" rm -rf "$tmpdir" mkdir -p "$tmpdir" framerate="prompt" format="gif" extension="" while [[ $# -gt 0 ]]; do case "$1" in "-r"|"--framerate") framerate="$2" shift shift ;; "--mp4") format="mp4" shift ;; esac done if [[ "$framerate" == "prompt" ]]; then framerate=$(echo -e "0.25\n0.5\n0.75\n1\n2\n5\n10" | rofi -dmenu -p Timeout) fi i=1 while read file; do extension="${file##*.}" number=$(printf "%03d" $i) echo "$number" cp "$file" "${tmpdir}file${number}.${extension}" i=$((i+1)) done notify-send "Generating $format from images" case "$format" in "mp4") # Not entierly sure what all of these mean but they make it work in most browsers ffmpeg -f image2 -framerate "$framerate" -i "${tmpdir}file%03d.${extension}" -pix_fmt yuv420p -vcodec libx264 -y -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" "${tmpdir}out.${format}" ;; *) ffmpeg -f image2 -framerate "$framerate" -i "${tmpdir}file%03d.${extension}" "${tmpdir}out.${format}" esac mv "${tmpdir}out.${format}" "$HOME/Desktop/" notify-send "Done" "File in $HOME/Desktop/out.${format}"