Last updated on December 22, 2020 by Dan Nanni
Once thought of as outdated art forms, animated GIF images have now come back. If you haven't noticed, quite a few online sharing and social networking sites are now supporting animated GIF images, for example, on Twitter, Reddit and Facebook. Due to their ease of consumption and sharing, GIF-ed animations are now part of mainstream Internet culture.
So some of you may wonder how you can create such animated GIF images. There are various online or offline tools dedicated to create animated GIF images. Another option is to create an animated GIF image off of an existing video clip. In this tutorial, I will describe how to convert a video file to an animated GIF image on Linux.
As a more useful example, let me demonstrate how to convert a YouTube video to an animated GIF image.
First, download a YouTube video that you would like to convert. You can use
youtube-dl tool to save a YouTube video as an MP4 file. Suppose you saved your favorite YouTube video as
Next, install FFmpeg on your Linux system, which I will use to extract video frames from the video.
The following command will extract individual video frames, and save them as GIF images. Make sure to use the output file format (
out%04d.gif) as is. That way, individual frames will be named and saved properly.
ffmpeg -t <duration> -ss <starting position in hh:mm:ss format> -i <input_video> out%04d.gif
For example, if you want to extract the video frames of input video, for 5 seconds, starting at
10 seconds from the beginning, run the following command.
$ ffmpeg -t 5 -ss 00:00:10 -i funny.mp4 out%04d.gif
After FFmpeg is completed, you will see a list of GIF files created, which are named as
The next step is to merge individual GIF files into one animated GIF image. For that, you can use ImageMagick.
First, install ImageMagick on your Linux system if you haven't done so.
Then, run the following command to merge created GIF images into a single animated GIF file.
convert -delay <ticks>x<ticks-per-second> -loop 0 out*gif <output-gif-file>
In the command,
-delay is an option that controls the animation speed. This option indicates that
[ticks/ticks-per-second] seconds must elapse before the display of the next frame. The
-loop 0 option indicates infinite loops of animation. If you want, you can specify
-loop N, in which case the animation will repeat itself
For example, to create an animated GIF image with
20 frames-per-second and infinite loop, use the following command.
$ convert -delay 1x20 -loop 0 out*.gif animation.gif
The last (optional) step is to reduce the size of the created GIF file, by using ImageMagick's GIF optimizer.
Use the following command to reduce the GIF size.
$ convert -layers Optimize animation.gif animation_small.gif
Now you are ready to share the GIF image on your social networks. The following shows a sample GIF image that I created from a cute YouTube video.
This website is made possible by minimal ads and your gracious donation via PayPal or credit card
Please note that this article is published by Xmodulo.com under a Creative Commons Attribution-ShareAlike 3.0 Unported License. If you would like to use the whole or any part of this article, you need to cite this web page at Xmodulo.com as the original source.