44

I wish to display some animations in my beamer presentation. The most trivial way that comes to my mind is to use a gif image. How can I put it in the presentation and what should I use to display it? Is there any other way of doing it?

7
  • You could have a look into the beameruserguide Chapter 14, which describes some different methods to do animated stuff. Commented Sep 25, 2012 at 16:38
  • Does using \includegraphics{<file-name.gif>} not work? Commented Sep 25, 2012 at 16:46
  • 1
    @PeterGrill: GIF is not supported. Commented Sep 25, 2012 at 16:58
  • @garbagecollector: useful to mention the context, here -- when pdftex was being developed, gif format was encumbered with a software patent that applied to its compression method (lzw). there are several free software projects that avoided gif, in that context, and pdftex was one of them. it's a pity, since (as sthiadhi says) motion gif is one of the easiest motion formats to handle. Commented Sep 25, 2012 at 20:21
  • 1
    The first answer to this question worked for me and is much more straightforward than those below. Commented Jul 17, 2014 at 19:27

2 Answers 2

27

In a single run you will get 4 separate files as follows,

  • a GIF animation
  • a PDF animation
  • a MP4 video
  • a slide that contains a PDF animation and imports a MP4 video as shown in the figure below

enter image description here

Requirements

  • ImageMagick must be installed and its path must be registered to PATH system variable.
  • FFMPEG must be installed and its path must be registered to PATH system variable.

How to compile

The following input file, named as main.tex, must be compiled with pdflatex -shell-escape main. WARNING: If your OS is not Windows, then please adapt the Windows shell command to your OS shell command.

% this filename is main.tex
% compile it with "pdflatex -shell-escape main" (without the quotes)

\documentclass[mathserif]{beamer}

\usepackage{filecontents}

% Create a PDF file that consist of some pages
\begin{filecontents*}{frames.tex}
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}

\begin{document}
\multido{\i=5+5}{72}
{
    \begin{pspicture}[showgrid=false](-2,-2)(2,2)
        \psparametricplot[algebraic,plotpoints=1000,linecolor=red]{0}{\i}{2*sin(7*t*Pi/180)|2*cos(11*t*Pi/180)}
    \end{pspicture}
}
\end{document}
\end{filecontents*}

\immediate\write18{latex frames}
\immediate\write18{dvips frames}
\immediate\write18{ps2pdf frames.ps}
% sometimes you need to disable auto rotate in ps2pdf. Please follow up if you really need it!
% delete auxiliary files generated by the 3 commands above.
\makeatletter
\@for\x:={tex,dvi,ps,log,aux}\do{\immediate\write18{cmd /c del frames.\x}}
\makeatother

% convert to GIF animation
\immediate\write18{convert -delay 5 -loop 0 -density 75 -alpha remove frames.pdf Lissajous.gif}

% convert to MP4
\makeatletter
\immediate\write18{convert -density 600 -alpha remove frames.pdf frames-\@percentchar04d.png}
\immediate\write18{cmd /c if exist Lissajous.mp4 del Lissajous.mp4}
\immediate\write18{ffmpeg -r 5 -i frames-\@percentchar04d.png -vcodec libx264 Lissajous.mp4}
\immediate\write18{cmd /c if exist frames-*.png del frames-*.png}
\makeatother

% convert to a single PDF animation
\begin{filecontents*}{Lissajous.tex}
\documentclass[preview,border=12pt]{standalone}
\usepackage{animate}
\begin{document}
\animategraphics[controls,loop,autoplay,scale=1]{10}{frames}{}{}
\end{document}
\end{filecontents*}

\immediate\write18{pdflatex Lissajous}
% delete auxiliary files generated by the above command.
\makeatletter
\@for\x:={tex,log,aux}\do{\immediate\write18{cmd /c del Lissajous.\x}}
\makeatother


\usepackage{animate,media9}
\begin{document}

\begin{frame}[t]{Lissajous in action}
\begin{columns}[T]
%=============
\begin{column}{0.5\textwidth}
\begin{block}{PDF Animation}
%\animategraphics[controls,autoplay,loop,scale=<integer>]{<frame rate>}{<PDF filename without extension>}{<left blank>}{<left blank>}
\animategraphics[controls,autoplay,loop,scale=1]{10}{frames}{}{}
\end{block}
\end{column}
%=============
\begin{column}{0.5\textwidth}
\begin{block}{MP4}
\includemedia[
    activate=onclick,
    width=\linewidth,height=\linewidth,
    addresource=Lissajous.mp4,
    flashvars={%
        source=Lissajous.mp4%same path as in addresource!
        &autoPlay=true%optional configuration
        &loop=true%variables
    }
]{}{VPlayer.swf}
\end{block}
\end{column}
%=============
\end{columns}
\end{frame}
\end{document}

Notes:

The auxiliary file named frames.pdf must be removed manually because I cannot remove it from within main.tex. If you know how to do this, let me know!

8
  • 1
    Related: how to create a GIF animation? and how to create a PDF animation?. Commented Sep 26, 2012 at 7:59
  • There is yet another option. You could convert frames.pdf to animated SWF using swftools and embed this one using \includemedia from media9 package. This keeps the vectorial nature of the graphics (as opposed to MP4).
    – AlexG
    Commented Sep 26, 2012 at 8:14
  • @AlexG: OK. Thanks. I will update this answer once I am finished trying it. Commented Sep 26, 2012 at 8:15
  • 2
    this could also be written into an arara rule :)
    – cmhughes
    Commented Jun 22, 2013 at 19:06
  • @cmhughes: Yes it might be rewritten in an arara rule but learning arara will burden us to spend an extra time. Commented Jun 22, 2013 at 19:27
15

the same without using an external file (the pdf is here: http://perce.de/temp/anim0.pdf):

\documentclass[mathserif]{beamer}
\usepackage{pst-plot,animate}
\begin{document}

\begin{frame}[t]{Lissajous in action}
\begin{columns}[T]
\begin{column}{0.5\textwidth}
\begin{animateinline}[%
  width=0.9\linewidth,
  begin={\begin{pspicture}(-2.1,-2.1)(2.1,2.1)},
  end={\end{pspicture}},
  controls, %palindrome, %autoplay
]{3}
\multiframe{72}{iA=50+50,iB=5+5}{
  \psset{algebraic,plotpoints=\iA,linecolor=red}
  \parametricplot{0}{\iB}{2*sin(7*t*Pi/180)|2*cos(11*t*Pi/180)}
}
\end{animateinline}
\end{column}
\begin{column}{0.5\textwidth}
\begin{align}
    x(t)&=2\sin(7t)\\
    y(t)&=2\cos(11t)    
\end{align}
\end{column}
\end{columns}
\end{frame}

\end{document}

enter image description here

15
  • I downloaded the pdf and viewed it in evince but the animation doesn't work. Do I need any other pdf viewer for this?
    – lovespeed
    Commented Sep 25, 2012 at 18:02
  • I suppose that it works only with acrobat
    – user2478
    Commented Sep 25, 2012 at 18:06
  • Apparently, pst-plot has already imported multido. Commented Sep 25, 2012 at 18:50
  • I do not need it anyway ...
    – user2478
    Commented Sep 25, 2012 at 18:59
  • 2
    @chepukha: run the example with xelatex. It does not work with pdflatex. If you want to use several images then have a look into the documentation of animate, it has some examples.
    – user2478
    Commented May 1, 2013 at 18:30

Not the answer you're looking for? Browse other questions tagged .