38 lines
		
	
	
		
			795 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			795 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
usage() { echo "Usage: $0 [-f <fps>] [-o <output-dest>] [-h]"; }
 | 
						|
 | 
						|
if [[ $# = 0 ]]; then
 | 
						|
    >&2 echo "No movie file specified"
 | 
						|
    exit
 | 
						|
elif [[ ! -f "$1" ]]; then
 | 
						|
    >&2 echo "$1 does not exist"
 | 
						|
    exit
 | 
						|
fi
 | 
						|
 | 
						|
fps=30
 | 
						|
src="$1"
 | 
						|
dest="${$(basename $src)%.mov}.gif"
 | 
						|
while getopts hf:o: opt
 | 
						|
do
 | 
						|
    case "$opt" in
 | 
						|
        -f) fps="$OPTARG" ;;
 | 
						|
        -o) dest="$OPTARG" ;;
 | 
						|
        -h) usage
 | 
						|
            exit
 | 
						|
            ;;
 | 
						|
        :)  >&2 echo "$OPTARG requires an argument"
 | 
						|
            usage
 | 
						|
            exit 1
 | 
						|
            ;;
 | 
						|
    esac
 | 
						|
done
 | 
						|
 | 
						|
palette="$(mktemp)"
 | 
						|
flags="fps=${fps}"
 | 
						|
 | 
						|
ffmpeg -v warning -i "$src" -vf "$flags,palettegen" -y "$palette"
 | 
						|
ffmpeg -v warning -i "$src" -i "$palette" -lavfi "$flags [x]; [x][1:v] paletteuse" -y "$dest"
 | 
						|
 | 
						|
[ -f "$palette" ] && rm -f "$palette"
 |