How to Install FFmpeg in Linux

FFmpeg is one of the best multimedia frameworks that contains various tools for different tasks. For example the ffplay is a portable media player that can be used to play audio/video files, ffmpeg can convert between different file formats, ffserver can be used to stream live broadcasts and ffprobe is able to analyze multimedia stream.

This framework is really powerful due to the diversity of available tools in it, that provide the best technical solution for the user. According to the description of FFmpeg in the official website, the reason for having such a great multimedia framework is the combination of the best free software options available.

The FFmpeg framework offers high security and the reason for this is the seriosity of the developers when they review the code, it is always done with security in mind.

I am very sure you will find this framework very useful when you would like to do some digital audio and video streaming or recording. There are many other practical thing that you can do with the help of the FFmpeg framework such as converting your wav file to an mp3 one, encode and decode your videos or even scale them.

According to the official website FFmpeg is able to do the followings.

  1. decode multimedia files
  2. encode multimedia files
  3. transcode multimedia files
  4. mux multimedia files
  5. demux multimedia files
  6. stream multimedia files
  7. filter multimedia files
  8. play multimedia files

Let me take an example, a very simple one. The following command will convert your mp4 file into an avi file, simple as that.

# ffmpeg -i Lone_Ranger.mp4 Lone_Ranger.avi

The above command is only useful for explanation, it is not recommended to be used in practice because the codex, bitrate and other specifics are not declared.

In the next part we will practice with some of the FFmpeg multimedia framework tools, but before doing that we have to install it in our Linux box.

How to Install FFmpeg Multimedia Framework in Linux

Since the FFmpeg packages are offered for the most used Linux distributions and the installation will be relatively easy. Lets start with the installation of the FFmpeg framework in Ubuntu based distributions.

Install FFmpeg on Ubuntu and Linux Mint

I will install FFmpeg via the PPA recommended in the official blog. Open a new terminal (CTRL+ALT+T) and then run the following commands.

$ sudo add-apt-repository ppa:mc3man/trusty-media
$ sudo apt-get update
$ sudo apt-get install ffmpeg
$ ffmpeg -version

Install FFmpeg on Debian

To install FFmpeg, first you need to add the following line to your /etc/apt/sources.list file. As per your distribution, change ‘<mydist>‘ with ‘stretch‘, ‘jessie‘, or ‘wheezy‘.

deb http://www.deb-multimedia.org <mydist> main non-free deb-src http://www.deb-multimedia.org <mydist> main non-free

Then update system package sources and install FFmpeg with the following commands.

$ sudo apt-get update
$ sudo apt-get install deb-multimedia-keyring
$ sudo apt-get update
$ sudo apt-get install ffmpeg
$ ffmpeg -version

Install FFmpeg on CentOS and RHEL

To install FFmpeg on CentOS and RHEL distributions, you need to enable EPEL and RPM Fusion repository on the system using following commands.

To install and enable EPEL, use following command.

# yum install epel-release

To install and enable RPM Fusion, use following command on your distribution version.

-------------- On CentOS & RHEL 7.x -------------- 
# yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm

-------------- On CentOS & RHEL 6.x --------------
# yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-6.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-6.noarch.rpm

After enabling repositories, run the following command to install FFmpeg:

# yum install ffmpeg ffmpeg-devel
# ffmpeg -version

Install FFmpeg on Fedora

On Fedora, you need to install and enable RPM Fusion to install FFmpeg as shown.

$ sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
$ sudo dnf install ffmpeg ffmpeg-devel
$ ffmpeg -version

FFmpeg Compiling from Source

Compiling software from source is not the easiest thing in the world, but with the right instructions we will be able to do it. First make sure your system meet all the dependencies. The installation of these dependencies can be done with the help of the following commands.

First, tell the system to pull down the latest packages.

$ sudo apt-get update

Install the dependencies with the following command.

-------------- On Debian & Ubuntu --------------
$ sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-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
-------------- On CentOS and RHEL --------------
# yum install glibc gcc gcc-c++ autoconf automake libtool git make nasm pkgconfig SDL-devel \
a52dec a52dec-devel alsa-lib-devel faac faac-devel faad2 faad2-devel freetype-devel giflib gsm gsm-devel \
imlib2 imlib2-devel lame lame-devel libICE-devel libSM-devel libX11-devel libXau-devel libXdmcp-devel \
libXext-devel libXrandr-devel libXrender-devel libXt-devel libogg libvorbis vorbis-tools mesa-libGL-devel \
mesa-libGLU-devel xorg-x11-proto-devel zlib-devel libtheora theora-tools ncurses-devel libdc1394 libdc1394-devel \
amrnb-devel amrwb-devel opencore-amr-devel

Then use the following command to create a new directory for the FFmpeg sources. This is the directory where the source files will be downloaded.

$ mkdir ~/ffmpeg_sources

Now compile and install yasm assembler used by FFmpeg by running the following commands.

$ cd ~/ffmpeg_sources
$ wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
$ tar xzvf yasm-1.3.0.tar.gz
$ cd yasm-1.3.0
$ ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
$ make
$ make install
$ make distclean
$ export "PATH=$PATH:$HOME/bin"

After you have successfully installed the yasm assembler it is time to install some various encoders that will be used with the specific FFmpeg tools. Use the following commands to install the H.264 video encoder.

$ cd ~/ffmpeg_sources
$ wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
$ tar xjvf last_x264.tar.bz2
$ cd x264-snapshot*
$ ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
$ make
$ make install
$ make distclean

Another nice useful encoder is the libfdk-aac AAC audio encoder.

$ cd ~/ffmpeg_sources
$ wget -O fdk-aac.zip https://github.com/mstorsjo/fdk-aac/zipball/master
$ unzip fdk-aac.zip
$ cd mstorsjo-fdk-aac*
$ autoreconf -fiv
$./configure --prefix="$HOME/ffmpeg_build" --disable-shared
$ make
$ make install
$ make distclean

Install libopus audio decoder and encoder.

$ cd ~/ffmpeg_sources
$ wget http://downloads.xiph.org/releases/opus/opus-1.1.tar.gz
$ tar xzvf opus-1.1.tar.gz
$ cd opus-1.1
$ ./configure --prefix="$HOME/ffmpeg_build" --disable-shared
$ make
$ make install
$ make distclean

Now, it’s time to install ffmpeg from source.

$ cd ~/ffmpeg_sources
$ wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
$ tar xjvf ffmpeg-snapshot.tar.bz2
$ cd ffmpeg
$ PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
$ export PKG_CONFIG_PATH
$ ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" \
   --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --extra-libs="-ldl" --enable-gpl \
   --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus \
   --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
$ make
$ make install
$ make distclean
$ hash -r

Note: If you have not installed certain encoders, make sure to remove ‘–enable-encoder_name‘ from the above ‘./configure‘ command so the installation is done without any problem.

There are many encoders that you can install, but fur the purpose of this article I am not going to install all of them, but you can install them using the following official guides.

  1. FFmpeg Compilation Guide for Ubuntu
  2. FFmpeg Compilation Guide for CentOS

Conclusion

In this first part we updated our readers with the latest news according to the FFmpeg multimedia framework and showed them how to install it in their Linux machines. The next part will be totally about learning how to use the amazing tools inside this leading multimedia framework.

Update: The Part 2 of this FFmpeg series is published, which shows some useful ffmpeg command-line usage to perform various audio, video and image conversion procedures: 15 Useful ‘FFmpeg’ Commands for Video, Audio and Image Conversion in Linux.

If You Appreciate What We Do Here On TecMint, You Should Consider:

TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

Support Us

We are thankful for your never ending support.

Ravi Saive

I am Ravi Saive, creator of TecMint. A Computer Geek and Linux Guru who loves to share tricks and tips on Internet. Most Of My Servers runs on Open Source Platform called Linux. Follow Me: Twitter, Facebook and Google+

Your name can also be listed here. Got a tip? Submit it here to become an TecMint author.

RedHat RHCE and RHCSA Certification Book
Linux Foundation LFCS and LFCE Certification Preparation Guide

You may also like...

7 Responses

  1. tom.huang says:

    I can’t fetch update from this repo ‘ppa:mc3man/trusty-media‘.

    My environment : Ubuntu 19.04

    E: The repository ‘http://ppa.launchpad.net/mc3man/trusty-media/ubuntu disco Release’ does not have a Release file.
    N: Updating from such a repository can’t be done securely, and is therefore disabled by default.
    N: See apt-secure(8) manpage for repository creation and user configuration details.

    • Ravi Saive says:

      @Tom,

      The PPA does not support your version of Ubuntu, better install FFMPEG from default repositories.

      $ sudo apt intall ffmpeg
      

      Make sure to remove the added PPA:

      $ sudo ppa-purge ppa:mc3man/trusty-media
      
  2. shair ali baig says:

    hello..the above tutorials for ffmpeg wont work with atrpms repository for centos 7…since atrpms server is dead..its no longer available..
    one can download the above commands by enabling nux desktop repository explicitely..

    sudo yum -y –enablerepo=rpmforge install ffmpeg ffmpeg-devel
    and also to the above dependency packegaes

  3. aprogrammer says:

    Thank you for the post. You can add here some additional libs and codecs for ffmpeg support all kind of audio and video formats like listed here – http://sysadm.pp.ua/linux/video-streaming/ffmpeg-build.html .

  4. Hello, people!

    I am trying to use Clip Bucket with FFPMEG conversion, but the script sent the parm ‘- aspect 0’, but the FFMPEG 2.2.4 do not recognize it.

    Some technicians talked to me for downgrade to FFMPEG 0.9.1. However, I want to use newest version.

    Look my problem:

    Converting Video
    Conversion Command : /usr/bin/ffmpeg -i /files/conversion_queue/140413494554888.mp4 -f flv -vcodec libx264 -preset normal -r 25 -s 0x0 -aspect 0 -vf pad=0:0:0:0:black -acodec libfaac -ab 128000 -an /files/videos/140413494554888.flv 2> /files/temp/140413500190db3.tmp

    Conversion Details

    ffmpeg version 2.2.4- http://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2014 the FFmpeg developers
    built on Jun 24 2014 20:49:40 with gcc 4.9 (Debian 4.9.0-7)
    configuration: –enable-gpl –enable-version3 –disable-shared –disable-debug –enable-runtime-cpudetect –enable-libmp3lame –enable-libx264 –enable-libwebp –enable-libspeex –enable-libvorbis –enable-libvpx –enable-libfreetype –enable-fontconfig –enable-libxvid –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libtheora –enable-libvo-aacenc –enable-libvo-amrwbenc –enable-gray –enable-libopenjpeg –enable-libopus –disable-ffserver –enable-libass
    libavutil 52. 66.100 / 52. 66.100
    libavcodec 55. 52.102 / 55. 52.102
    libavformat 55. 33.100 / 55. 33.100
    libavdevice 55. 10.100 / 55. 10.100
    libavfilter 4. 2.100 / 4. 2.100
    libswscale 2. 5.102 / 2. 5.102
    libswresample 0. 18.100 / 0. 18.100
    libpostproc 52. 3.100 / 52. 3.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ‘/files/conversion_queue/140413494554888.mp4’:
    Metadata:
    major_brand : isom
    minor_version : 0
    compatible_brands: isomiso2avc1
    creation_time : 2013-12-25 18:45:13
    Duration: 00:00:10.29, start: 0.000000, bitrate: 817 kb/s
    Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640×360, 700 kb/s, 30.11 fps, 30.11 tbr, 30107 tbn, 60214 tbc (default)
    Metadata:
    creation_time : 2013-12-25 18:45:12
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
    Metadata:
    creation_time : 2013-12-22 22:48:57
    Invalid aspect ratio: 0
    Conversion failed!

    Thanks a lot!

  5. Dennis says:

    Where is Part 2 of this article as promised? And why do you keep repeating Part 1?

    • Ravi Saive says:

      The part 2 of this series, will be published soon. The author (Oltjano Terpollari) having some serious personal issues, due to this, he may not getting time to publish the 2nd part of this series. And we not repeating it, we updating the article based on newer ffmpeg release. Please co-operate with us, will soon publish a remain part of this portion.

Got something to say? Join the discussion.

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.