Monday, April 6, 2015

Install ffmpeg 2.6 into Linux Mint 17.1 (or 17)

I prefer ffmpeg to libav. The instructions found to "Compile FFmpeg on Ubuntu, Debian, or Mint" are thorough and work well, I like to do it differently though. I prefer to have ffmpeg installed through the package manager and I want it to replace libav. This is a quick guide how I do it.
This is an updated and simplified guide based on a previous blog and the official ffmpeg compilation instructions.

http://interknighterrant.blogspot.com/2014/03/replace-libav-with-ffmpeg-in-lm16.html
https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
As a bonus, I decided to jot down notes as to what some more interesting (to me) commands actually are doing.

Installing Requirements

sudo apt-get update
sudo apt-get install checkinstall autoconf automake build-essential libass-dev libgpac-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libx11-dev libxext-dev libxfixes-dev pkg-config texi2html zlib1g-dev libmp3lame-dev yasm libfdk-aac-dev libx264-dev x264 libopus-dev libvpx-dev

Remove libav (not installed by default)

sudo apt-get --purge remove libav-tools

Downloading and Preparing ffmpeg

mkdir $HOME/Downloads/ffmpeg
cd $HOME/Downloads/ffmpeg
wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg

Compiling and Installing ffmpeg

./configure --extra-cflags="-I/usr/local/include" --extra-ldflags="-L/usr/local/lib" --extra-libs="-ldl" --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-makelibtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab --enable-version3 --enable-postproc --enable-avresample --enable-pic --enable-avisynth
make
sudo checkinstall --pkgname=ffmpeg --pkgversion="2:`./version.sh`" --backup=no --deldoc=yes --fstrans=no --default
Two things interesting about this command. (1) checkinstall creates a .deb and installs it, which I thought was VERY cool when I came across it a few years ago. And (2) the `./version.sh` will update with each new release of ffmpeg as it calls the script that will simply print the ffmpeg version... this is a vast improvement over my old tutorial. Can't remember where I stumbled on this, but it stuck in my head and I have been using it for a bit.

Updating ldconfig

We need to tell Linux that there are some library files located in /usr/local/lib. How about we do this and practice using the terminal, shall we? If you prefer to do this via gedit look at the last guide I made for LM16.
sudo cp /etc/ld.so.conf /etc/ld.so.conf.bu
Create a BU of the configuration file.
cp /etc/ld.so.conf /tmp/ld.so.conf
Copy (as user) the configuration file into the /tmp folder (which is deleted every boot).
echo "/usr/local/lib" >> /tmp/ld.so.conf
Add a new line to the end of the temporary (user owned) configuration file with the text "/usr/local/lib" (this is called "appending" text to a document).
sudo cp /tmp/ld.so.conf /etc/ld.so.conf
As root, copy (and replace) the configuration file with the temporary configuration file.
sudo ldconfig -v
Update library locations with ldconfig.

Testing!

ffmpeg -version
ffmpeg version 2.6.git Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab --enable-version3 --enable-postproc --enable-avresample --enable-pic --enable-avisynth
libavutil      54. 22.100 / 54. 22.100
libavcodec     56. 34.100 / 56. 34.100
libavformat    56. 29.100 / 56. 29.100
libavdevice    56.  4.100 / 56.  4.100
libavfilter     5. 13.101 /  5. 13.101
libavresample   2.  1.  0 /  2.  1.  0
libswscale      3.  1.101 /  3.  1.101
libswresample   1.  1.100 /  1.  1.100
libpostproc    53.  3.100 / 53.  3.100
Aww yeah... sweet old success!

Removing ffmpeg installed with this guide / uninstall ffmpeg

sudo apt-get --purge remove ffmpeg

Re-installing libav after removal of ffmpeg

If desired, libav-tools is not installed by default in Linux Mint and might only be necessary if other software requires it.
sudo apt-get install libav-tools

Final Thoughts

I have used these same steps on several Linux Mint 17 and Linux Mint 17.1 builds now (I think this is my 5th time) and I have not had any issues. I use a few utilities tied in with .nemo_action scripts to automate some media tasks (like de-interlacing, adding an intro video, etc). I would love any suggestions on improvement to the process and I have fixed comments (I apologize to past readers who tried to comment and it would never show the comments).
The compilation guide for ffmpeg has you compile a lot of programs. After looking at repository versions compared to current stable versions, I found with the latest Linux Mint it just was not worth compiling all these different programs. Maybe if the libraries update in the next year or two I may feel inclined to do that though.