Skip to content

@SlexAxton /.zshrc
Last active

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
My gif workflow
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
@SlexAxton
Owner

An example!

http://slex.me/image/2V1y1g3T3j36/gifify.mov.gif

@patik

The GIFs work fine in a browser, but a couple image viewers (Xee, ACDSee) only show the first frame and give a vague loading error message.

Any chance of removing the movie's file extension so the name ends up as screencap.gif instead of screencap.mov.gif?

@SlexAxton
Owner

This is definitely targeted at going along with pull requests, so that's ok with me re: browsers only.

I think that's possible. I'll have to read up on bash scripting for the 10000th time, but I'm sure it's nothing crazy. Happy to take a suggestion :D

@commadelimited

Does it matter what you used to record the original video file? What did you use to record cli.mov?

@SlexAxton
Owner

I use QuickTime (free) or Screeny (pretty).

Just save in native quality for best results.

@paulirish

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.

@tednaleid

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
@ryanseddon

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

@curtisblackwell

does this require zsh?

edit: nope. just threw the .zshrc code into my .bashrc and it works fine.

@digia

Brew Cask put the package for XQuartz into /opt/homebrew-cask/Caskroom/x-quartz/2.7.4

If that helps anyone.

@joemccann

Quality is pretty amazing.

@robertd

Sweet

@damncabbage

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
@buritica

use brew cask install xquartz if you get Error: No available cask for x-quartz

@tonycoco

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)"
}
@saimonmoore

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

@thatryan

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? :(

@robcolburn

@thatryan It sounds like ffmpeg didn't install right.

  • Try running the command ffmpeg, if that seems to fail, try installing again brew install ffmpeg.
  • If brew seems to be unhappy about that, try brew doctor
@paulirish

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.)

@samarpanda

Worked pretty good for me.

brew install ffmpeg gifsicle imagemagick

Thanks @paulirish & @slexaxton

@nwinkler

Wow, I like @tonycoco's solution. Well done!

@nwinkler

I've added the gifify function to my bash-it fork: nwinkler/bash-it@e4bdad6

@vvo

There's now an installable binary for that, lots of options, optimized! https://github.com/vvo/gifify

@jeanmichelcote

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

@thatryan

Anyone come across this error?

Incompatible pixel format 'rgb24' for codec 'gif', auto-selecting format 'rgb8'

@CharlesSmart

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?

@zentrope

thatryan: Yes, I have that error (Yosemite). No idea what to do about it.

@nexdrew

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.