GIFs in LaTeX
Sections
GIFs in LaTeX#
Using GIFs
in LaTeX/Beamer
can add animation to presentations, making them more engaging and visually appealing. Unfortunately, LaTeX
does not seem to support GIFs
natively. But it’s possible to split a GIF
into several images (frames) which are then uesd to create an animation.
Statement of Need#
So that I can have fancy GIFs in my slides.
Tools to Convert GIFs
to Images#
A useful tool is ImageMagick, a free and open-source software for editing and converting image files. One of its features is to help create a GIF animation sequence from a group of images. It can also reverse this by creating images (e.g., PNG
files) from a .gif
GIF file.
To set up ImageMagick
, see its download guide. ImageMagick
is available from packages like APT
and Brew
.
$ sudo apt install imagemagick
(For Windows, a seemingly undocumented but easy way to set up is to use Chocolatey
— choco install imagemagick.app
.)
Alternative solutions here are online websites like cleverpdf’s gif-to-png converter.
Other solutions
I have also tried other online solutions, but they usually do not work, giving weird behaviors like having only the first frame in the sequence correctly extracted while all remaining frames in the sequence are blacked out.Converting GIFs
to Images#

To convert a GIF
file (for example, the one above) to a sequence of PNG
using ImageMagick
$ magick convert -coalesce something.gif something.png
where something.gif
is the gif
file, and something.png
is the output file(s) in PNG
. The output is a sequence of ordered PNG
files—e.g., something-0.png, something-1.png, something-2.png, ….
These sequences, combined in that order, would give the original GIF
animation.
$ magick convert -coalesce something.gif png-sequences/something.png
so that the sequences of images (can be as large as a few hundred) are all contained in one folder.
Recovering Original Animation Speed#
ImageMagick also helps recover properties about the GIF
$ magick identify something.gif
something.gif[0] GIF 480x480 480x480+0+0 8-bit sRGB 128c 0.016u 0:00.011
something.gif[1] GIF 480x480 480x480+0+0 8-bit sRGB 128c 0.016u 0:00.015
something.gif[2] GIF 480x480 480x480+0+0 8-bit sRGB 128c 0.016u 0:00.015
...
showing frames and their corresponding resolution, aspect ratios, color spaces, timing, etc.
To get the frame rate
$ magick identify -verbose something.gif | grep 'Delay'
Delay: 10x100
Delay: 10x100
Delay: 10x100
...
So here, the frame rate is 10 frames per second.
Embedding GIFs
in LaTeX
#
The animate
package in LaTeX provides a simple way to include animations, including GIFs, in LaTeX-compiled documents. It allows users to specify the frame rate and options for the animation, customizing its appearance and behavior. The animate
package also supports most image formats, including PNGs
.
Import it in the preamble using the typical
\usepackage{animate}
Now the GIF
can be created by using the \animategraphics
to reference the sequence of images.
\animategraphics[loop,controls,height=.85\textheight]{10}{./png-sequences/something-}{0}{237}
Unpacking the \animategraphics
LaTeX
macro:
the
loop
option specifies non-stop looping of theGIF
controls
option adds a control panel under theGIF
(with start, pause, fast forward, speed adjustment, etc.)height
option is the typical option to adjust height10
is the frames per second we recovered from theGIF
using ImageMagick (or whatever is preferred)png-sequences/something-
is the path to the sequence of images0
is the first image in the sequence237
is the last image in the sequence
Other solutions
Other potential solutions are the movie15 and media9 packages in LaTeX. Using movie15, for example, makes it possible to directly reference the GIF\usepackage{movie15}
...
\includemovie{something.gif}
But for GIFs, the recommended solution is to use animate. GIFs are usually short, and it might not make sense to load in an entire video embedding package like movie15 or media9 just for a GIF. The animate package is a more suitable lightweight solution.
Gotcha with Size#
Adding GIFs
to LaTeX
can make the compiled pdf
swell up in size. Adding the above GIF
to my LaTeX
increases my pdf
size from around 5 to 50 MB. Adding another GIF
increases it to over 100 MB. This could be an issue if there are file size limits (to upload on a portal, for example).
One solution is to compress the sequence images. ImageMagick provides that utility too. For example, to shrink down an image,
$ magick image.png -resize 60% out.png
Caution with Mogrify
The magick mogrify command is like the magick command, except that the former is designed to modify images in place. Hence, mogrify is dangerous as it can easily write over the original image.For a batch of images, there is mogrify
to help shrink down batches of images at once.
$ magick mogrify -resize 60% "*.png"
Show/Hide
'Argument list too long' error
The quotes in "*.png" is needed because most shells limit the length of the command-line. So a batch task for many PNG files would lead to an 'Argument list too long' error. Enclosing the *.png in quotes lets magick take care of expanding the argument.Gotcha with GIFs
in LaTeX
#
Once compiled, I cannot see the GIF work in my local TeXstudio editor. To check that the GIF
works, I would have to open it in a reader like Adobe Acrobat Reader. The GIF
will not run in all readers. The GIF
animation requires a JavaScript
-supporting reader (e.g., Adobe Acrobat Reader, KDE Okular). Opening the pdf
in chrome browser does not seem to work either.