| 
									
										
										
										
											2024-07-21 14:28:19 +03:00
										 |  |  | #!/usr/bin/env bash | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | #shopt -s extglob | 
					
						
							|  |  |  | #shopt -s nullglob | 
					
						
							|  |  |  | #shopt -s failglob | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DEBUG=${DEBUG:-$DRY_RUN} | 
					
						
							|  |  |  | function @ () { | 
					
						
							| 
									
										
										
										
											2025-07-16 13:55:01 +03:00
										 |  |  | 	echo "### $@" | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | 	[ -z $DRY_RUN ] \ | 
					
						
							| 
									
										
										
										
											2025-07-16 13:55:01 +03:00
										 |  |  | 		&& "$@" | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2024-07-21 14:28:19 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-21 15:26:04 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | FPS=${FPS:-8} | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | # XXX ffmpeg does not seem to support extglob... | 
					
						
							|  |  |  | #PATTERN=${PATTERN:-'*.@(JPG|jpg|JPEG|jpeg|PNG|png)'} | 
					
						
							|  |  |  | PATTERN=${PATTERN:-'*.jpeg'} | 
					
						
							| 
									
										
										
										
											2025-06-27 19:14:11 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | while [[ $# != 0 ]] ; do | 
					
						
							| 
									
										
										
										
											2025-06-27 19:14:11 +03:00
										 |  |  | 	case "$1" in | 
					
						
							|  |  |  | 		-h|--help) | 
					
						
							|  |  |  | 			echo "Usage: $(basename $0) [OPTIONS] [PATTERN]" | 
					
						
							|  |  |  | 			echo | 
					
						
							|  |  |  | 			echo "Options:" | 
					
						
							|  |  |  | 			echo "	-h --help	- print this message and exit"  | 
					
						
							|  |  |  | 			echo "	-r --rate FPS	- set framerate (default: $FPS)" | 
					
						
							|  |  |  | 			echo "	-p --pattern PATTERN" | 
					
						
							|  |  |  | 			echo "			- image pattern to use (default: '$PATTERN')" | 
					
						
							|  |  |  | 			echo | 
					
						
							|  |  |  | 			echo "NOTE: option defaults can bbe overriden by coresponding env variables." | 
					
						
							|  |  |  | 			echo | 
					
						
							|  |  |  | 			exit | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 		-r|--rate) | 
					
						
							|  |  |  | 			FPS="$2" | 
					
						
							|  |  |  | 			shift 2 | 
					
						
							|  |  |  | 			continue | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 		-p|--pattern) | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | 			PATTERN="$2" | 
					
						
							| 
									
										
										
										
											2025-06-27 19:14:11 +03:00
										 |  |  | 			shift 2 | 
					
						
							|  |  |  | 			continue | 
					
						
							|  |  |  | 			;; | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		# trailing args... | 
					
						
							| 
									
										
										
										
											2025-06-27 19:14:11 +03:00
										 |  |  | 		*) | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | 			PATTERN="$1" | 
					
						
							| 
									
										
										
										
											2025-06-27 19:14:11 +03:00
										 |  |  | 			shift | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | 			continue | 
					
						
							| 
									
										
										
										
											2025-06-27 19:14:11 +03:00
										 |  |  | 			;; | 
					
						
							|  |  |  | 	esac | 
					
						
							|  |  |  | done | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-17 04:37:14 +03:00
										 |  |  | LST=($PATTERN) | 
					
						
							| 
									
										
										
										
											2024-07-21 15:26:04 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-21 15:26:04 +03:00
										 |  |  | # generate name... | 
					
						
							|  |  |  | A=${LST[0]} | 
					
						
							| 
									
										
										
										
											2025-06-17 04:37:14 +03:00
										 |  |  | A=${A%.*} | 
					
						
							| 
									
										
										
										
											2024-07-21 15:26:04 +03:00
										 |  |  | B=${LST[$(( ${#LST[@]} - 1 ))]} | 
					
						
							| 
									
										
										
										
											2025-06-17 04:37:14 +03:00
										 |  |  | B=${B%.*} | 
					
						
							| 
									
										
										
										
											2024-07-21 15:26:04 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | NAME=${NAME:-${A}-${B}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PALETTE=${PALETTE:-.palette.png} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # generate... | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	set -o noglob | 
					
						
							|  |  |  | 	# gif palette... | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | 	@ ffmpeg \ | 
					
						
							| 
									
										
										
										
											2024-07-21 15:26:04 +03:00
										 |  |  | 		-pattern_type glob \ | 
					
						
							|  |  |  | 			-i $PATTERN \ | 
					
						
							|  |  |  | 		-vf palettegen \ | 
					
						
							|  |  |  | 		"$PALETTE" | 
					
						
							|  |  |  | 	# gif... | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | 	@ ffmpeg \ | 
					
						
							| 
									
										
										
										
											2024-07-21 15:26:04 +03:00
										 |  |  | 		-r $FPS \ | 
					
						
							|  |  |  | 		-pattern_type glob \ | 
					
						
							|  |  |  | 			-i $PATTERN \ | 
					
						
							|  |  |  | 		-i "$PALETTE" \ | 
					
						
							|  |  |  | 		-filter_complex paletteuse=dither=none \ | 
					
						
							|  |  |  | 		"${NAME}".gif | 
					
						
							| 
									
										
										
										
											2024-07-28 11:27:06 +03:00
										 |  |  | 	# cleanup... | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | 	@ rm "$PALETTE" | 
					
						
							| 
									
										
										
										
											2024-07-21 15:26:04 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	# mkv... | 
					
						
							| 
									
										
										
										
											2025-06-29 21:06:04 +03:00
										 |  |  | 	@ ffmpeg \ | 
					
						
							| 
									
										
										
										
											2024-07-21 15:26:04 +03:00
										 |  |  | 		-r $FPS \ | 
					
						
							|  |  |  | 		-pattern_type glob \ | 
					
						
							|  |  |  | 			-i $PATTERN \ | 
					
						
							|  |  |  | 		"${NAME}".mkv | 
					
						
							|  |  |  | 	#set +o noglob | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2024-07-21 14:28:19 +03:00
										 |  |  | 
 |