Awesome GIF 
A curated list of awesome GIF resources.
A list of tools, scripts, libraries, examples & other resources related to the Graphics Interchange Format (GIF).
A curated list of awesome GIF resources.
A list of tools, scripts, libraries, examples & other resources related to the Graphics Interchange Format (GIF).
Usually faster than ImageMagick.
Python module for video editing.
Simple high quality GIF encoding.
Convert screen recording into GIF.
Create animated GIF screencasts.
Chrome extension to put GIFs in your emails.
Record scripts and their outputs into both binary and GIF formats.
Chrome extension to make a GIF from a YouTube video.
Capture animations created with HTML5 canvas.
Beautiful open-source app to capture your screen and export to GIF.
High-quality GIF encoder based on libimagequant.
Open-source, Haskell-built editor for GIF makers.
C++ one-header library for the creation of animated GIFs.
C/C++ single-header library for creating animated GIFs.
A simple libary to record your screen and save it as animated GIF.
A simple library to display animated GIF images in WPF.
A simple library to display animated GIF images in XAML apps (WPF, WinRT, Windows Phone).
A high performance .NET library for reading and creating animated GIFs.
Haxe GIF encoder.
Views and Drawable for displaying animated GIFs on Android.
Android ImageView that handles animated GIF images.
Processing library to play and export GIF.
Animated GIF encoder for Android.
Create GIF from the DOM.
GIF 89a encoder and decoder.
JavaScript library for creating animated GIFs.
JavaScript library that prevents the autoplaying of the animated GIFs.
JQuery plugin to play and stop animated GIFs.
JavaScript convert videos to GIFs using FFmpeg and gifsicle.
Server side animated GIF generation for Node.js.
PHP class that creates animated GIF from multiple images.
PHP class that separates all the frames of an animated GIF.
GIF engine for iOS by FlipBoard.
Maximum file upload is 50MB.
Online GIF maker and image editor.
A web app for making or remixing animated GIFs.
Convert animated GIFs into individual frames online.
FFmpeg
ffmpeg -f image2 -i image%d.jpg animated.gif
ImageMagick
magick -delay 20 -loop 0 frames*.png animated.gif
Bash script (frames2gif.sh) for GraphicsMagick, ImageMagick, FFmpeg
#!/bin/bash
if [ $# -ne 5 ]; then
echo "please provide the moviename and directory where to store the frames"
echo "./frames2gif.sh [directory] [movie.mp4] [filename.gif] [gm|im|ffmpeg] [png|jpg]"
exit 1
fi
if [ "png" == "$5" ]; then
suffix="png"
else
suffix="jpg"
fi
CONVERT=$(which magick)
GM=$(which gm)
FFMPEG=$(which ffmpeg)
FFPROBE=$(which ffprobe)
FPS=$($FFPROBE -show_streams -select_streams v -i "$2" 2>/dev/null | grep "r_frame_rate" | cut -d'=' -f2 | cut -d'/' -f1)
echo "FPS: ${FPS}"
if [ "im" == "$4" ]; then # use imagemagick
FPS=$(echo "1 / ${FPS} * 100" |bc -l)
$CONVERT "$1/*.${suffix}" -delay ${FPS} -loop 0 "$3"
elif [ "gm" == "$4" ]; then # use graphicsmagick
FPS=$(echo "1 / ${FPS} * 100" |bc -l)
$GM convert "$1/*.${suffix}" -delay ${FPS} -loop 0 "$3"
else # use crappy gif-algorithm from ffmpeg
$FFMPEG -f image2 -framerate ${FPS} -i "$1/%08d.${suffix}" "$3"
fi
From DeepDreamVideo, source
ffmpeg -i video.mpg image%d.jpg
magick animated.gif -coalesce image%05d.png
with FFmpeg / based on this article
#!/bin/sh
start_time=30
duration=3
ffmpeg -y -ss $start_time -t $duration -i input.avi \
-vf fps=10,scale=320:-1:flags=lanczos,palettegen palette.png
#!/bin/sh
start_time=30
duration=3
ffmpeg -ss $start_time -t $duration -i input.avi -i palette.png -filter_complex \
"fps=10,scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif
magick output.gif -layers Optimize output_optimized.gif
./gifsicle -O3 --lossy=80 -o lossy-compressed.gif input.gif
from moviepy import VideoFileClip
clip = (VideoFileClip("input.avi")
.subclipped((4,00.00),(5,00.00))
.resized(0.3))
clip.write_gif("output.gif")
Freezing a region
from moviepy import VideoFileClip, vfx
clip = (VideoFileClip("input.avi")
.subclipped((4,00.00),(5,00.00))
.resized(0.3)
.with_effects([vfx.FreezeRegion(outside_region=(170, 230, 380, 320))]))
clip.write_gif("output.gif", fps=15)
ffmpeg \
-ss ${starttime} -t ${duration} -i ${vidfile} `# body of loop` \
-ss TODO ${starttime} MINUS ${duration} -t ${fadetime} -i ${vidfile} `# lead-in for crossfade` \
-loop 1 -i ${stillfile} `# masked still image` \
-filter_complex "
[0:v]setpts=PTS-STARTPTS[vid]; `# speed adjustment - not needed here, so noop`
color=white,scale=3840x2160,fade=in:st=0:d=${fadetime}[alpha]; `# crossfade alpha, double length ahead of speed change`
[1:v][alpha]alphamerge[am]; `# apply alpha to lead-in`
[am]setpts=PTS+(${duration}-${fadetime})/TB[layer2]; `# speed adjustment and offset for lead-in`
[vid][layer2]overlay[oo]; `# overlay for crossfade`
[oo][2:v]overlay=shortest=1[out1]; `# overlay still image`
[out1]crop=w=${cropfactor}*iw:h=${cropfactor}*ih:y=${yoffset}*ih,scale=${outputwidth}:-1, `# crop and scale`
eq=gamma=${gamma}:contrast=${contrast}:saturation=${saturation},unsharp `# final adjustments`
" -an output.mp4
from moviepy import VideoFileClip
from moviepy.video.tools.cuts import FramesMatches
clip = VideoFileClip("input.avi").resized(0.3)
scenes = FramesMatches.from_clip(clip, 10, 3)
selected_scenes = scenes.select_scenes(2, 1, 4, 0.5)
selected_scenes.write_gifs(clip.resized(width=450), "./outputs_directory")
yt-dlp https://www.youtube.com/watch?v=V2XpsaLqXc8
Using ImageMagick to solve problems concerning GIF speed.
The best ways to use this list are:
By Craig Davison and contributors.
Based on a recovered list by Ismail Baaj.