How to compile and install FFmpeg 4.1 on Debian/Ubuntu – seanthegeek.net
On
June 5, 2018 12:26 am

How to compile and install FFmpeg 4.1 on Debian/Ubuntu

By Sean Whalen

Here’s how to build and install FFmpeg 4.1 from source with all the bells and whistles (i.e codec support).  We’ll install it as a custom Debian package using checkinstall. That way, any other package that depends on the ffmpeg package will recognize that it is already installed, and won’t try to fetch it from the Debian or Ubuntu software repositories.

Install the dependencies

sudo apt-get -y install build-essential autoconf automake cmake libtool git
checkinstall

mkdir ffmpegtemp
cd ffmpegtemp

mkdir aom
cd aom
git clone https://aomedia.googlesource.com/aom
cmake aom/ -DBUILD_SHARED_LIBS=1
make
sudo checkinstall -y --deldoc=yes
cd

sudo apt-get -y install build-essential autoconf automake cmake libtool git 
checkinstall nasm yasm libass-dev libfreetype6-dev libsdl2-dev libtool 
libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev 
libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev libchromaprint-dev 
frei0r-plugins-dev gnutls-dev ladspa-sdk libcaca-dev libcdio-paranoia-dev 
libcodec2-dev libfontconfig1-dev libfreetype6-dev libfribidi-dev libgme-dev 
libgsm1-dev libjack-dev libmodplug-dev libmp3lame-dev libopencore-amrnb-dev 
libopencore-amrwb-dev libopenjp2-7-dev libopenmpt-dev libopus-dev 
libpulse-dev librsvg2-dev librubberband-dev librtmp-dev libshine-dev 
libsmbclient-dev libsnappy-dev libsoxr-dev libspeex-dev libssh-dev 
libtesseract-dev libtheora-dev libtwolame-dev libv4l-dev libvo-amrwbenc-dev 
libvorbis-dev libvpx-dev libwavpack-dev libwebp-dev libx264-dev libx265-dev 
libxvidcore-dev libxml2-dev libzmq3-dev libzvbi-dev liblilv-dev libmysofa-dev 
libopenal-dev opencl-dev libjack-dev

Install the non-free dependencies too, if you want to convert decrypted Blu-Ray content:

sudo apt-get -y install libbluray-dev libfdk-aac-dev

Download and extract the FFmpeg source code

wget https://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2
tar -xf ffmpeg-4.1.3.tar.bz2
rm ffmpeg-4.1.3.tar.bz2
cd ffmpeg-4.1.3

Configure the build

With free dependencies only

./configure --enable-gpl --enable-version3 --disable-static --enable-shared --enable-small --enable-avisynth --enable-chromaprint --enable-frei0r --enable-gmp --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-librtmp --enable-libshine --enable-libsmbclient --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtesseract --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libxml2 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-libmysofa --enable-openal --enable-opencl --enable-opengl --enable-libdrm

Or, including non-free

./configure --enable-gpl --enable-version3 --disable-static
--enable-shared --enable-small --enable-avisynth --enable-chromaprint 
--enable-frei0r --enable-gmp --enable-gnutls --enable-ladspa 
--enable-libaom --enable-libass --enable-libcaca --enable-libcdio 
--enable-libcodec2 --enable-libfontconfig --enable-libfreetype 
--enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack 
--enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb 
--enable-libopencore-amrwb --enable-libopencore-amrwb 
--enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse 
--enable-librsvg --enable-librubberband --enable-librtmp --enable-libshine 
--enable-libsnappy --enable-libsoxr --enable-libspeex 
--enable-libssh --enable-libtesseract --enable-libtheora 
--enable-libtwolame --enable-libv4l2 --enable-libvo-amrwbenc 
--enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp 
--enable-libx264 --enable-libx265 --enable-libxvid --enable-libxml2 
--enable-libzmq --enable-libzvbi --enable-lv2 --enable-libmysofa 
--enable-openal --enable-opencl --enable-opengl --enable-libdrm 
--enable-nonfree --enable-libfdk-aac --enable-libbluray

Build

make

Purge any existing package installation

sudo apt-get -y purge ffmpeg "libav*" " libpostproc*"
sudo apt-get -y autoremove

Install your custom FFmpeg build as a package

sudo checkinstall -y --deldoc=yes --pkgversion=10:4.1.3-1
cd ..
rm -rf ffmpegtemp

This post was last modified on June 6, 2019 1:01 pm

Sean Whalen

Sean Whalen is an Information Security Engineer in the healthcare industry, and founder of the InfoSec Speakeasy, specializing in intelligence and malware analysis. Previously, he worked as an intelligence analyst in the defense industry. He has a passion for open source software, and sci-fi.

View Comments

  • this doesn't work for debian 8
    ges/mysite/Build/aom# cmake aom/
    CMake Error at CMakeLists.txt:11 (cmake_minimum_required):
    CMake 3.5 or higher is required. You are running version 3.0.2

    -- Configuring incomplete, errors occurred!

    Cancel reply

    Leave a Reply

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

  • I tried this on an Ubuntu 18.04 and during the Build stage, the make fails:
    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    CC libavcodec/lclenc.o
    CC libavcodec/libaomdec.o
    CC libavcodec/libaomenc.o
    libavcodec/libaomenc.c:703:109: error: ‘AOM_ERROR_RESILIENT_PARTITIONS’ undeclared here (not in a function); did you mean ‘AOM_ERROR_RESILIENT_DEFAULT’?
    " is still done over the partition boundary.", 0, AV_OPT_TYPE_CONST, {.i64 = AOM_ERROR_RESILIENT_PARTITIONS}, 0, 0, VE, "er"},
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    AOM_ERROR_RESILIENT_DEFAULT
    ffbuild/common.mak:60: recipe for target 'libavcodec/libaomenc.o' failed
    make: *** [libavcodec/libaomenc.o] Error 1
    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    Just thought I would pass it on.

    Cancel reply

    Leave a Reply

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

  • Even after apply the patch I cannot get to compile

    /usr/bin/ld: /usr/local/lib/libaom.a(aom_config.c.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
    /usr/local/lib/libaom.a: error adding symbols: Bad value
    collect2: error: ld returned 1 exit status
    ffbuild/library.mak:102: recipe for target 'libavcodec/libavcodec.so.58' failed
    make: *** [libavcodec/libavcodec.so.58] Error 1

    Cancel reply

    Leave a Reply

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

    • I solved this compile error with adding the PIC compile flag to the aom library, try this patch in directory ffmpegtemp/aom/aom:

      diff --git a/build/cmake/compiler_flags.cmake b/build/cmake/compiler_flags.cmake
      index 79192c1fa..ec8d214a5 100644
      --- a/build/cmake/compiler_flags.cmake
      +++ b/build/cmake/compiler_flags.cmake
      @@ -17,6 +17,9 @@ include(CheckCCompilerFlag)
      include(CheckCXXCompilerFlag)
      include("${AOM_ROOT}/build/cmake/compiler_tests.cmake")

      +set(AOM_EXTRA_C_FLAGS "-fPIC")
      +
      # Strings used to cache flags.
      set(AOM_C_FLAGS)
      set(AOM_CXX_FLAGS)

      Cancel reply

      Leave a Reply

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

    • Tried using the latest snapshot, exactly the same issue.

      Cancel reply

      Leave a Reply

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

  • When I'm trying to compile ffmpeg, I have this error

    nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

    If you think configure made a mistake, make sure you are using the latest
    version from Git. If the latest version fails, report the problem to the
    ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
    Include the log file "ffbuild/config.log" produced by configure as this will help
    solve the problem.

    Cancel reply

    Leave a Reply

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

    • I ran into this problem as well. After I ran this I got farther:
      sudo apt install nasm

      Cancel reply

      Leave a Reply

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

  • compile aom with option:

    cmake aom/ -DAOM_EXTRA_C_FLAGS=-fPIC

    worked for me.

    Cancel reply

    Leave a Reply

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

  • I solved the ffmpeg issue with aom by compiling aom as a shared library:
    cmake aom/ -DBUILD_SHARED_LIBS=1
    as per (aom/README.md)

    Cancel reply

    Leave a Reply

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

    • Thank you for this very helpful comment!

      Cancel reply

      Leave a Reply

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

  • ..then after running ldconfig:
    erflungued@minty:~/src/ffmpegtemp/ffmpeg-4.1.3$ make check
    worked fine.
    Thanks for this tute @Sean

    Cancel reply

    Leave a Reply

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

  • After removing libavcodec I ended up in command line on boot.
    Looks like libs from this custom ffmpeg package were not linked properly. Any suggestions how to fix?

    Cancel reply

    Leave a Reply

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

    • I'm stuck there too... really wish someone answered with a solution. Google isn't helping much... =/

      LD libavcodec/libavcodec.so.58
      /usr/bin/ld: /usr/local/lib/libaom.a(noise_model.c.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
      /usr/bin/ld: final link failed: Bad value
      collect2: error: ld returned 1 exit status
      ffbuild/library.mak:102: recipe for target 'libavcodec/libavcodec.so.58' failed
      make: *** [libavcodec/libavcodec.so.58] Error 1

      Cancel reply

      Leave a Reply

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

  • 1) Small typo in instructions;
    --enable-small--enable-avisynth
    should read:
    --enable-small --enable-avisynth
    2) git clone ...
    can be
    git clone --depth=1 ...
    to avoid unecessary repo history
    3) aom: for this error: "relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC" the following works:
    delete ffmpegtemp directory, take all same steps for aom again, but change;
    cmake aom/
    to;
    cmake aom/ -DAOM_EXTRA_C_FLAGS=-fPIC
    then just go back to ffmpeg directory and type make again, build will complete
    4) Latest: https://ffmpeg.org/releases/ffmpeg-4.1.3.tar.gz

    Enjoy & God bless

    Cancel reply

    Leave a Reply

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

  • HI,

    I have this warning:

    /usr/bin/ld: warning: libavcodec.so.57, needed by /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libchromaprint.so, may conflict with libavcodec.so.58
    /usr/bin/ld: warning: libavutil.so.55, needed by /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libchromaprint.so, may conflict with libavutil.so.56
    /usr/bin/ld: warning: libswresample.so.2, needed by //usr/lib/x86_64-linux-gnu/libavcodec.so.57, may conflict with libswresample.so.3

    Then:
    support@Bench-PC-01:~/ffmpegtemp/ffmpeg-4.0$ ffmpeg
    ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory

    Cancel reply

    Leave a Reply

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

Leave a Reply

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