Create animated GIFs from MP4 with FFmpeg

Learn how to create an animated GIF that’s small enough to upload but with a decent quality.

Animated GIFs are after all these years still pretty popular. FFmpeg is a good FLOSS tool to create these animated GIFs. FFmpeg is available for Windows, Linux and OSX. A word of warning FFmpeg is a command line tool that’s very versatile but it’s not for everybody. In fact suppose this post is more for users that like to tinker a lot with their animated GIFs. Below I will explain not only how to create a animated GIF from an mpeg4 movie but I also provide instructions to improve the quality.

The basic command to create an animated GIF from a mpeg4 is:

ffmpeg -i input.mp4 output.gif

where the name of the input file is input.mp4 and output.gif is the name of the output file. Unfortunately gif images are large due to their lossless data compression. So you’ll end up with a file that’s much bigger than the original mpeg4 and probably something that exceeds the upload limit of Diaspora*, Friendica or Mastodon.

In order to reduce the size of the file we can reduce the size of the images or we can reduce the number of frames per second. To achieve this we need the following command:

ffmpeg -i input.mp4 -r 12 -s 320x180 output.gif

This command reduces the framerate to 12 per second and resizes to 320×180 pixels. For the size of the GIF make sure that the aspect ratio remains the same or the resulting GIF will be distorted.

When we look closely at the resulting GIF we clearly notice some shortcomings in the animation. This is due to the default GIF encoding in FFmpeg. Because GIFs only uses 256 colors the number of colors from the mpeg4 needs to be reduced. FFmpeg by default uses a generic palette of 256 colors that covers the widest range of content. This is in general not optimal for the specific video that you want to convert. Luckily FFmpeg allows us to create a custom palette for our specific video. To create this palette type:

ffmpeg -i input.mp4 -filter_complex "[0:v] palettegen" palette.png

When we look in the folder of our mpeg file well noice that a file ‘palette.png’ has been added. This is our newly created 256 color palette for our specific video which is generated by the palettegen filter. To use the new palette with our mpeg video type:

ffmpeg -i input.mp4 -i palette.png -r 12 -s 320x180 -filter_complex "[0:v][1:v] paletteuse" prettyOutput.gif

FFmpeg needs two input files (streams) in this case test.mp4 and our newly created palette.png. The paletteuse filter takes the two streams as input specified by [0:v] and [1:v] where v stands for video and the preceding number for the number of the stream. The output file is renamed to prettyOutput.gif to differentiate it from the earlier output.gif. The resulting video should be much … prettier. If your resulting video is still too large either reduce the frame rate or resize even further (or just reduce the length of the video of course).

Further reading:

How to rip a DVD

How do you rip a DVD even the one with DRM. What do you need to decrypt DVD’s, create mpeg4, add metadata and play it on Kodi, OpenELEC or LibreElec. This post describes the free/libre software that does the job.

Why in this day and age of Netflix one would be interested in how to rip a DVD? More and more people are using Netflix or an other video streaming service to watch movies and TV series. What most people don’t know is that Netflix is trampling user rights. Not only does Netflix use digital rights management (DRM) they also mine huge amounts of data from the users. This data is not only used to improve the service it can also be provided to third parties like law enforcement and other businessess for promotional ‘services’ . If you don’t believe me you can read it in the privacy statement of Netflix.

Unfortunately the’re very little legal alternatives that respect the user rights. DVD’s are an option but most of current DVD’s have strong DRM in place. Luckily this DRM can be removed with relatively simple means. Without the DRM the user can watch the content the way he/she prefers.

In this post I’ll explain what you need to remove the DRM from DVD’s and copy the movie or TV series to OpenELEC or LibreELEC or any other system with Kodi e.g in your living room.

Use original DVD’s

Don’t use pirated DVD’s. Let’s stick to what is legal. DVD’s are cheap and second hand DVD’s are even cheaper. For a few dollars/euros you can buy the best movies on DVD. Most DVD’s are protected with DRM and some publishers like Disney take severe measurements to prevent the user from making a copy for their own use. This is where Handbrake comes in.


Handbrake can, among other thing, read DVD’s and convert the content to e.g mpeg4 files. These mpeg4 files can than be stored on the HDD of a device of your liking and played with any media player. To be able to decrypt DRM protected DVD’s (see above) also a free/libre DVD playback library libdvdcss is needed. This article explains how to install this on Windows and OSX. And this article explains how libdvdcss works.

Screenshot of Handbrake
A screenshot of Handbrake. Handbrake reads a DVD and write the content to an mpeg4 file.

MetaZ or MetaX

MetaZ is a metadata editor but the beauty is that it uses the title of the movie or the TV series to retrieve metadata from The Movie Database (TMDb) and adds this metadata to the rip file we just made with HandBrake. Unfortunately MetaZ only runs on OSX while MetaX only runs on Windows. Of course we can use VLC for GNU/Linux but the user has to add the metadata manually which is a pain in the butt.

Kodi, OpenELEC, LibreElec

Eventually you want to be able to play the video files that you ripped from the DVD’s. The’re many free/libre software  choices but perhaps the most popular is Kodi.  Kodi is mediaplayer software that runs on about every media file you’ll throw at it. It is available for GNU/Linux, Windows and OSX. OpenELEC and LibreELEC take this a step further because the’re Linux based operating systems with the sole purpose to run Kodi.

Click here if you want about my experience with OpenELEC.

I hope this information has helped you to rip your DVD’s and start watching them on the device of your own liking. If you have any questions about this topic feel free to send me an email. Now if you excuse me I have a nice classic movie to watch.

Diaspora*, an alternative social network for GooglePlus

Three weeks ago I wrote an article about the demise of G+ and I defined four criteria for an alternative social network. This blog post describes my experience with Diaspora.

Why an alternative social network

Three weeks ago I wrote an article about the demise of G+ and I defined four criteria for an alternative social network. Based on these criteria I choose three social networks, Mastodon, MeWe and Diaspora* and signed up on them and promised to write about my experience with these three.

I will not write any further about MeWe since I already deleted the account after one week and wrote a post about it. So that leaves Mastodon and Diaspora*. This blog post is about my experience with Diaspora*.

Screenshot of the Diaspora* interface. Not flashy but very functional and fast.

What is Diaspora*

The shortest way to describe Diaspora* is it being a Facebook clone however this doesn’t do justice to Diaspora*. Although the user interface of Diaspora* has similarities with Facebook the network couldn’t be more different, kind of an anti-Facebook. First of all Diaspora* is free and open source software while Facebook is proprietary and Diaspora* is distributed while Facebook is centralized. The latter means that while Facebook is owned by a single entity that controls the entire network and it’s users Diaspora* has no owner and thus can never be controlled by a single organisation or person. Instead Diaspora* consists of many servers (or pods) that have their own administrator. These servers are are all interconnected (or federated). Without going into details about how this works exactly being distributed has other notable advantages from a user point of view.

  • First of all Diaspora* doesn’t have ads  (it worth to note that some centralized social networks like G+ and MeWe also don’t have ads).
  • Diaspora* can’t be closed or sold.
  • There is no ‘built-in’ data-mining. While it can’t be excluded that some rogue administrator will use your data there is no ‘Diaspora* business model’ that would encourage this. Meaning that your privacy is better protected.

Conversations on Diaspora* are good and in-depth although it takes time to identify good contacts.

Working with Diaspora*

Being a user of G+ for several years I admit it took a little time to get used to the Diaspora* interface. Central is the ‘Stream’, a single column of posts of your contacts (followers in G+) and the hashtags (e.g #Linux) that you follow. Next is ‘My Activity’ which lists all posts that you liked, shared or commented on but also the posts that you wrote yourself. Lastly there is ‘Public activity’ that shows all public posts from the Diaspora* community. This also shows nudity or even porn but, as I noticed so far, this was always tagged with #nsfw which stands for ‘not suitable for work’. These #nsfw posts are not shown until the users clicks to open it. I think this is good solution to protect the user without censorship.

Conversations on Diaspora* are good and in-depth although it takes time to identify good contacts. After two weeks I have 29 contacts (on Januari 9 it was 50) of which half turns out to be what I consider good. Diaspora* provides the user with a good tool to ignore a contacts for instance if he or she turns out to be spammer. Diaspora* also allows for a private chat with an established contact which can be very handy.

Diaspora* doesn’t have the G+ equivalent of communities, a group of users sharing posts about a certain topic, and collections, a single users sharing posts about a single topic. These communities and collections can’t be mimicked by combined tags and aspects.


Diaspora* is, after Mastodon, the second biggest distributed social networks with the about 660.000 user accounts. Still a dwarf compared to FaceBook but I’m not interested in the total number of users. I’m interested in the quality of the conversation and this is good, in fact it’s very good. People are mostly knowlegdeable and helpful which guarentees meaningful chats. Just what I’m looking for.

I still prefer the G+ interface with multiple columns over the one column stream in Diaspora* because it saves a lot of scrolling however this seems like nitpicking. Overall the user interface of Diaspora* is straight forward and easy to work with.

The user has good control of the streams of information although I would have preferred the user to be able to combine tags and aspects. The reason for this is I want to be able to follow someone on certain topics instead of all his or her posts.

Yes, my family and friends are not on Diaspora* but I don’t care about that in fact it’s a plus.

Diaspora* works surprisingly good on low-end machines. This is probably due to the minimal user interface. I consider this a big plus since I have a very old Thinkpad laptop that I use regularly.

Yes, my family and friends are not on Diaspora* but I don’t care about that in fact is a plus. I’d rather see them face to face anyway.

In conclusion Diaspora* starts to grow on me. I had a slow start with it but I’m gradually beginning to experience the strength of this well established and stable social network. I found Diaspora* very easy to use a plus that is not to be underestimated. The content that’s being shared is valuable and the conversations are excellent. For me that’s what counts when it comes to social networks.

EDIT: Diaspora* users can choose between a couple of Android apps. I choose Dandelior (which is the same app from the same developer as Dandelion) and I like it. Dandelior and Dandelion for Android can be downloaded from F-Droid.

EDIT: Diaspora* uses Markdown to format text making it an excellent choice for macroblogging. Markdown appears to be more powerful than the editing features of G+. This and the single column stream are making Diaspora* an excellent choice for macroblogging.