Why would I choose Libav over FFmpeg, or is there even a difference?

Update (2019-12-13): Libav development activity has nearly ceased

Commits in the last 6 months:

  • FFmpeg: 1988
  • Libav: 1

Some Libav developers are now participating again in FFmpeg. This is partly due to Jean-Baptiste Kempf (VideoLAN president) recently spearheading the re-organization of the community. A 5-person Technical Resolution Committee has been created with (former) Libav members holding two seats and Libav developers are welcome to join the General Assembly–a voting board for decision making. Discussions and meetings are still on-going, but after 8 years since the fork this may mark the beginning of a re-integration.


Original answer:

First of all see Who can tell me the difference and relation between ffmpeg, libav, and avconv. Much of the confusion is the result of:

  1. Users not differentiating between the projects, FFmpeg and libav, and their respective command-line tools, ffmpeg and avconv.
  2. The poorly worded message(s) users get when they try to use libav's ffmpeg.

FFmpeg vs ffmpeg and libav vs avconv

  • FFmpeg is the project name. ffmpeg is the name of their command line tool.
  • libav is the project name. avconv is the name of their command line tool. For a short time libav also had a ffmpeg.

Users often think "project" when "tool" is being discussed which leads to...

A poorly worded message

So, as we learned from the Who can tell me... link, when libav forked from FFmpeg they also temporarily supplied their version of ffmpeg. As a member of libav, the ffmpeg maintainer in Debian and Ubuntu then decided to switch the distro to use libav. From the perspective of libav this was their best move: to force a large user community to use the fork.

Ubuntu switched during the transitional period when libav supplied both their version of ffmpeg and their renamed tool avconv. When users attempted to use libav's ffmpeg they got the following message:

This program is not developed anymore and is only provided for compatibility.  
Use avconv instead (see Changelog for the list of incompatible changes).

In this case the "ffmpeg" mentioned in the message was libav's temporary version which was later removed (as was the message). Remember the difference between FFmpeg and ffmpeg? Of course this message thoroughly confused many users who understandably did not make the distinction between project and tool; especially Ubuntu users who were not aware that their distro did a switcharoo or users who never heard of libav. I don't know if libav intended users to think this, but they probably enjoyed this side-effect.

Some Ubuntu users thought the message was too misleading and it was later changed to:

***THIS PROGRAM IS DEPRECATED***
This program is not developed anymore and is only provided for compatibility.  
Use avconv instead (see Changelog for the list of incompatible changes).

A small improvement in my opinion, but I feel as if it is not clear enough.

Which one do I use?

Nobody can tell you which one to use. The main difference for users is that FFmpeg merges many commits from libav, but it's not so reciprocal since libav seems to pretend that FFmpeg does not exist and only occasionally cherry-picks from FFmpeg.

To the casual user, there should not be huge differences. To get FFmpeg you can follow a compile guide or see the download links for executables on the FFmpeg Download page.

For more info see The FFmpeg/Libav situation.


Update (early 2016)

  • The odds stay in favor of ffmpeg. Most distros have switched back/are switching back to ffmpeg (Gentoo, Debian)
  • One practical advantage of ffmpeg is the broad availibility of binaries for many platforms. Googling for static libs/dynamic libs/binaries yields good results for linux,mac,windows,ios and android for ffmpeg, while I could only find linux and windows builds for libav. This could be an important point if you have little experience with C/makefiles.

The current situation (mid 2015)

It appears to be better to stick with FFmpeg. The whole situation is rather messy and ugly. I just started reading up on the fork a few days ago. Ignoring all the drama, here are what appear to be facts:

  • FFmpeg incorporates change sets from libav, while libav is reluctant to do so (see debian debate)
  • Chrome uses ffmpeg, and google has put serious effort into making it secure. libav is also incorporating those changes, but at a slower pace (google blog post)
  • FFmpeg attempts to keep as many codecs as possible, while libav dropped some (libav mailing list, post from a libav dev)
  • The FFmpeg community is larger than libav, and the most dedicated developer (michael niedermayer) stuck with FFmpeg (commit stats)
  • The ubuntu/debian maintainers for FFmpeg were part of the libav fork. they added deprecation messages to some command line tools, hinting that ffmpeg is deprecated. this caused a lot of confusion. both debian and ubuntu are switching back to ffmpeg.