Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # https://engineering.giphy.com/how-to-make-gifs-with-ffmpeg/
- INFILE="$1"
- OUT="${INFILE%.*}.gif"
- if [[ ! -f $INFILE ]]; then
- echo "'$INFILE' is not a File."
- exit 1
- fi
- INTER=$(mktemp --suffix=".mkv")
- PALETTE=$(mktemp --suffix=".png")
- function cleanup() {
- rm "$PALETTE" "$INTER"
- }
- function panic() {
- echo "Operation cancelling." >&2
- cleanup
- exit 1
- }
- [[ -z "$HEIGHT" ]] && HEIGHT=270
- [[ -z "$WIDTH" ]] && WIDTH=-2
- [[ -z "$FILTER" ]] && FILTER="scale=w=$WIDTH:h=$HEIGHT"
- echo "1/3. Creating scaled intermediate..." >&2
- ffmpeg -y -hide_banner -loglevel warning -stats -i "$@" \
- -filter_complex "[0:v] $FILTER" -map 0:v "$INTER" || panic
- # -filter_complex "[0:v] crop=1024:576:100:504" -map 0:v "$INTER" || panic
- echo "2/3. Generating palette..." >&2
- ffmpeg -y -hide_banner -loglevel warning -i "$INTER" \
- -filter_complex "[0:v] palettegen" "$PALETTE" || panic
- echo "3/3. Encoding Gif..." >&2
- ffmpeg -hide_banner -loglevel warning -stats -i "$INTER" -i "$PALETTE" \
- -filter_complex "[0:v][1:v] paletteuse" -vsync 0 -map 0:v "$OUT" || panic
- cleanup
- echo -n "Done. Size: " >&2
- numfmt --to=iec-i --suffix=B --format="%.1f" $(stat -c '%s' "$OUT") >&2
- readlink -f "$OUT"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement