49 lines
849 B
Bash
49 lines
849 B
Bash
#!/bin/sh
|
|
fps="fps=24"
|
|
scale="scale=1080:-1:flags=lanczos"
|
|
|
|
usage() {
|
|
echo "Usage: $0 [-i <string>] [-s <integer>] [-r <integer>]"
|
|
echo "Options:"
|
|
echo " i input file"
|
|
echo " s width of the resulting gif"
|
|
echo " r frame rate of the resulting gif"
|
|
}
|
|
|
|
while getopts "s: r: i: h" args; do
|
|
case "$args" in
|
|
i)
|
|
file_name=${OPTARG}
|
|
;;
|
|
s)
|
|
echo $OPTARG
|
|
if [[ $OPTARG =~ ^[0-9]+$ ]]; then
|
|
scale="scale=${OPTARG}:-1:flags=lanczos"
|
|
else
|
|
echo "Error: -s expects an integer." >&2
|
|
exit 1
|
|
fi
|
|
;;
|
|
r)
|
|
if [[ $OPTARG =~ ^[0-9]+$ ]]; then
|
|
rate="fps=${OPTARG}"
|
|
else
|
|
echo "Error: -r expects an integer." >&2
|
|
exit 1
|
|
fi
|
|
;;
|
|
h | * | \?)
|
|
usage
|
|
exit
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ $OPTIND -eq 1 ]; then
|
|
usage
|
|
exit
|
|
fi
|
|
|
|
|
|
ffmpeg -i $file_name.mp4 -vf "${fps},${scale},split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" $file_name.gif
|