52 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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}"
 |