Advertisement
Mozai

gif2webm

Jul 25th, 2014
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.36 KB | None | 0 0
  1. #!/bin/bash
  2. # convert *.gif file (and *.sfw and *flv) to *.webm
  3. # resulting file is much smaller, though there will be more artifacts
  4.  
  5. FFMPEG="/usr/local/bin/ffmpeg"
  6. let BITRATE=1024  # initial bitrate, may downgrade
  7. AUDIO="-an"  # default is audio=null
  8.  
  9. if [ ! -x $FFMPEG ]; then echo >&2 "missing $FFMPEG"; exit 1; fi
  10. F=$1
  11. if [ ! -e "$F" ]; then
  12.   echo >&2 "missing file: $F";
  13.   exit 1;
  14. fi
  15. if [[ "$F" =~ .gif$ ]]; then
  16.   G="${F/.gif/.webm}"
  17.   let BITRATE=1024
  18.   AUDIO=-an
  19. elif [[ "$F" =~ .flv$ ]]; then
  20.   G="${F/.flv/.webm}"
  21.   let BITRATE=384
  22.   AUDIO="-ac 1"
  23. elif [[ "$F" =~ .swf$ ]]; then
  24.   G="${F/.swf/.webm}"
  25.   let BITRATE=384
  26.   AUDIO="-ac 1"
  27. else
  28.   echo >&2 "not a a recognized format : $F";
  29.   exit 1;
  30. fi
  31.  
  32. OLDSIZE=$(stat -c%s "$F")
  33. RATIO=100
  34. while [[ RATIO -ge 100 ]]; do
  35.   $FFMPEG -loglevel error -i "$F" $AUDIO -c:v libvpx -b:v ${BITRATE}K "$G"
  36.   [ -e "$G" ] || break;
  37.   NEWSIZE=$(stat -c%s "$G")
  38.   RATIO=$(bc <<<"scale=0; $NEWSIZE * 100 / $OLDSIZE")
  39.   if [[ RATIO -ge 100 ]]; then
  40.     rm "$G"
  41.     let BITRATE/=2
  42.     if [[ BITRATE -lt 32 ]];then
  43.       [ "$TERM" ] && echo "giving up; can't reasonably reduce file size";
  44.       break;
  45.     else
  46.       [ "$TERM" ] && echo "bitrate ${BITRATE}K increased size to ${RATIO}%; trying again"
  47.     fi
  48.   fi
  49. done
  50. [[ -e "$G" ]] || exit 1;
  51. [ "$TERM" ] && echo "$G reduced to ${RATIO}%"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement