-
-
Save SlexAxton/4989674 to your computer and use it in GitHub Desktop.
gifify() { | |
if [[ -n "$1" ]]; then | |
if [[ $2 == '--good' ]]; then | |
ffmpeg -i $1 -r 10 -vcodec png out-static-%05d.png | |
time convert -verbose +dither -layers Optimize -resize 600x600\> out-static*.png GIF:- | gifsicle --colors 128 --delay=5 --loop --optimize=3 --multifile - > $1.gif | |
rm out-static*.png | |
else | |
ffmpeg -i $1 -s 600x400 -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=3 > $1.gif | |
fi | |
else | |
echo "proper usage: gifify <input_movie.mov>. You DO need to include extension." | |
fi | |
} |
brew install ffmpeg | |
brew tap phinze/homebrew-cask | |
brew install brew-cask | |
brew cask install x-quartz | |
open /usr/local/Cellar/x-quartz/2.7.4/XQuartz.pkg | |
# click through the stuff | |
brew install gifsicle | |
brew install imagemagick | |
# I had a weird problem with Convert/imagemagick where I had to do: | |
ln -s /usr/local/Cellar/libtool/2.4.2/lib/libltdl.7.dylib libltdl.7.dylib | |
# But hopefully you don't have to |
# Take screencast using Quicktime. Export as high quality as possible. | |
gifify screencap.mov | |
gifify screencap.mov --good |
I use QuickTime (free) or Screeny (pretty).
Just save in native quality for best results.
feature request: palindromic looping (back n forth)!
also the --good setting is incredible. same quality as what i got with GifBrewery but 20% of the size. dayum.
Looks like the location of x-quartz has moved to /usr/local/Caskroom/x-quartz/2.7.4, so line 5 in install.sh should be:
open /usr/local/Caskroom/x-quartz/2.7.4/XQuartz.pkg
I kept getting this error:
Incompatible library version: convert requires version 11.0.0 or later, but libltdl.7.dylib provides version 10.0.0
I fixed it with this command brew link libtool --force
does this require zsh?
edit: nope. just threw the .zshrc
code into my .bashrc
and it works fine.
Brew Cask put the package for XQuartz into /opt/homebrew-cask/Caskroom/x-quartz/2.7.4
If that helps anyone.
Quality is pretty amazing.
Sweet
😍
Regarding "screencap.mov.gif", try:
+ GIF="${1%.*}.gif"
if [[ $2 == '--good' ]]; then
ffmpeg -i $1 -r 10 -vcodec png out-static-%05d.png
- time convert -verbose +dither -layers Optimize -resize 600x600\> out-static*.png GIF:- | gifsicle --colors 128 --delay=5 --loop --optimize=3 --multifile - > $1.gif
+ time convert -verbose +dither -layers Optimize -resize 600x600\> out-static*.png GIF:- | gifsicle --colors 128 --delay=5 --loop --optimize=3 --multifile - > $GIF
rm out-static*.png
else
- ffmpeg -i $1 -s 600x400 -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=3 > $1.gif
+ ffmpeg -i $1 -s 600x400 -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=3 > $GIF
fi
If you're wondering what the GIF line is about:
$ FOO="Yep.nope.mov"
$ echo "${FOO%.*}.gif"
Yep.nope.gif
use brew cask install xquartz
if you get Error: No available cask for x-quartz
Not sure if anyone cares about the output, but I like to make my bash functions quiet and less verbose... Here is my stab at it. The output of the command is much prettier. I also added the ability to scale it to a max width (via an argument to the gifify command)...
function gifify {
if [ -z "$1" ]; then
echo "$(tput setaf 1)No input file given. Example: gifify example.mov [max width (pixels)]$(tput sgr 0)"
return 1
fi
output_file="${1%.*}.gif"
echo "$(tput setaf 2)Creating $output_file...$(tput sgr 0)"
if [ ! -z "$2" ]; then
maxsize="-vf scale=$2:-1"
else
maxsize=""
fi
ffmpeg -loglevel panic -i $1 $maxsize -r 10 -vcodec png gifify-tmp-%05d.png
convert +dither -layers Optimize gifify-tmp-*.png GIF:- | gifsicle --no-warnings --colors 256 --delay=10 --loop --optimize=3 --multifile - > $output_file
rm gifify-tmp-*.png
echo "$(tput setaf 2)Done.$(tput sgr 0)"
}
Hmm....I'm getting the following:
convert: unable to load module `/usr/local/Cellar/imagemagick/6.8.9-1/lib/ImageMagick//modules-Q16/coders/png.la': file not found @ error/module.c/OpenModule/1282.
convert: no decode delegate for this image format `PNG' @ error/constitute.c/ReadImage/501.
convert: no images defined `GIF:-' @ error/convert.c/ConvertImageCommand/3187.
I checked and that file exists. I've reinstalled imagemagick and libpng umpteen times now. Not sure what else to try
Few issues getting stuff installed, Xquartz seems to have changed names and versions, but now getting an error gifify:7: command not found: ffmpeg
any thoughts? :(
@thatryan It sounds like ffmpeg
didn't install right.
- Try running the command
ffmpeg
, if that seems to fail, try installing againbrew install ffmpeg
. - If brew seems to be unhappy about that, try
brew doctor
afaik the install.sh can now just be
brew install ffmpeg gifsicle imagemagick
i don't believe xquartz is at all neccessary. (not sure why it was.)
Wow, I like @tonycoco's solution. Well done!
I've added the gifify
function to my bash-it fork: nwinkler/bash-it@e4bdad6
There's now an installable binary for that, lots of options, optimized! https://github.com/vvo/gifify
I get error on that command: brew install brew-cask
Error: Failed to download resource "brew-cask"
Failure while executing: git clone --depth 1 --branch v0.53.3 https://github.com/caskroom/homebrew-cask.git /Library/Caches/Homebrew/brew-cask--git
Anyone come across this error?
Incompatible pixel format 'rgb24' for codec 'gif', auto-selecting format 'rgb8'
If this helps anyone, my XQuartz location ended up being:
open /opt/homebrew-cask/Caskroom/xquartz/2.7.7/XQuartz.pkg
I assume that's due to the update to 2.7.7?
thatryan: Yes, I have that error (Yosemite). No idea what to do about it.
For those looking to install @vvo's gifify with prerequisites:
# install pornel/giflossy (fork of gifsicle)
wget https://github.com/pornel/giflossy/releases/download/lossy%2F1.82.1/gifsicle-1.82.1-lossy.zip
unzip gifsicle-1.82.1-lossy.zip -d gifsicle-1.82.1-lossy
cp gifsicle-1.82.1-lossy/mac/gifsicle /usr/local/bin/
# install ffmpeg
brew install ffmpeg --with-fontconfig --with-libass
# install imagemagick
brew install imagemagick --with-fontconfig
# install gifify
npm install -g gifify
Thanks @vvo, @pornel, @paulirish, @SlexAxton, and internets.
Please forgive my ignorance on the matter. I really want to use this as it seems the only method for high quality gifs.
I understand this is for MAC users only? I do have a mac pro. How can I use this script?
Thanks so much again!
@nexdrew could you please add this to the gifify repo as a PR? very valuable
@nexdrew could you please add this to the gifify repo as a PR? very valuable
@vvo and @nexdrew, here's a PR that does it in a curl one-liner: vvo/gifify#46. Feedback?
For anyone else interested, installing gifify locally works pretty well too.
$ npm install --save-dev gifify
… in your package.json
:
"scripts": {
"gifify": "gifify"
}
And can be run from command line like so:
$ npm run gifify -- -o test.gif test.mp4
… or js script within package.
Does it matter what you used to record the original video file? What did you use to record cli.mov?