Compile FFmpeg on CentOS
Contents
This guide is based on a minimal installation of the latest CentOS release, and will provide a local, non-system installation of FFmpeg with support for several common external encoding libraries. These instructions should also work for recent Red Hat Enterprise Linux (RHEL) and Fedora.
You may also refer to the Generic Compilation Guide for additional information about compiling software.
This guide is designed to be non-intrusive and will create several directories in your home directory:
ffmpeg_sources
– Where the source files will be downloaded. This can be deleted if desired when finished with the guide.ffmpeg_build
– Where the files will be built and libraries installed. This can be deleted if desired when finished with the guide.bin
– Where the resulting binaries (ffmpeg
,ffprobe
,x264
,x265
) will be installed.
You can easily undo any of this as shown in Reverting Changes Made by This Guide.
Tip: Recent already compiled static builds are also available if you are unable to compile or are impatient.
Get the Dependencies
Note: The #
indicates that the command should be executed as superuser or root and is only required in this guide for the yum
command.
Get the dependencies. These are required for compiling, but you can remove them when you are done if you prefer (except make
; it should be installed by default and many things depend on it).
# yum install autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool make pkgconfig zlib-devel
In your home directory make a new directory to put all of the source code into:
mkdir ~/ffmpeg_sources
Compilation & Installation
Tip: If you do not require certain encoders you may skip the relevant section and then remove the appropriate ./configure
option in FFmpeg. For example, if libvpx is not needed, then skip that section and then remove --enable-libvpx
from the Install FFmpeg section.
NASM
An assembler used by some libraries. Highly recommended or your resulting build may be very slow.
cd ~/ffmpeg_sources curl -O -L https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.bz2 tar xjvf nasm-2.15.05.tar.bz2 cd nasm-2.15.05 ./autogen.sh ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" make make install
Yasm
An assembler used by some libraries. Highly recommended or your resulting build may be very slow.
cd ~/ffmpeg_sources curl -O -L https://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
libx264
H.264 video encoder. See the H.264 Encoding Guide for more information and usage examples.
Requires ffmpeg
to be configured with --enable-gpl
--enable-libx264
.
cd ~/ffmpeg_sources git clone --branch stable --depth 1 https://code.videolan.org/videolan/x264.git cd x264 PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static make make install
Warning: If you get Found no assembler. Minimum version is nasm-2.13
or similar after running ./configure
then the outdated nasm package from the repo is installed. Run yum remove nasm && hash -d nasm
and x264 will then use your newly compiled nasm instead. Ensure environment is able to resolve path to nasm binary.
libx265
H.265/HEVC video encoder. See the H.265 Encoding Guide for more information and usage examples.
Requires ffmpeg
to be configured with --enable-gpl
--enable-libx265
.
cd ~/ffmpeg_sources git clone --branch stable --depth 2 https://bitbucket.org/multicoreware/x265_git cd ~/ffmpeg_sources/x265_git/build/linux cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source make make install
libfdk_aac
AAC audio encoder. See the AAC Audio Encoding Guide for more information and usage examples.
Requires ffmpeg
to be configured with --enable-libfdk_aac
(and --enable-nonfree
if you also included --enable-gpl
).
cd ~/ffmpeg_sources git clone --depth 1 https://github.com/mstorsjo/fdk-aac cd fdk-aac autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --disable-shared make make install
libmp3lame
MP3 audio encoder.
Requires ffmpeg
to be configured with --enable-libmp3lame
.
cd ~/ffmpeg_sources curl -O -L https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz tar xzvf lame-3.100.tar.gz cd lame-3.100 ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm make make install
libopus
Opus audio decoder and encoder.
Requires ffmpeg
to be configured with --enable-libopus
.
cd ~/ffmpeg_sources curl -O -L https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz tar xzvf opus-1.3.1.tar.gz cd opus-1.3.1 ./configure --prefix="$HOME/ffmpeg_build" --disable-shared make make install
libvpx
VP8/VP9 video encoder and decoder. See the VP9 Video Encoding Guide for more information and usage examples.
Requires ffmpeg
to be configured with --enable-libvpx
.
cd ~/ffmpeg_sources git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git cd libvpx ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm make make install
FFmpeg
cd ~/ffmpeg_sources curl -O -L https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 tar xjvf ffmpeg-snapshot.tar.bz2 cd ffmpeg PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ --prefix="$HOME/ffmpeg_build" \ --pkg-config-flags="--static" \ --extra-cflags="-I$HOME/ffmpeg_build/include" \ --extra-ldflags="-L$HOME/ffmpeg_build/lib" \ --extra-libs=-lpthread \ --extra-libs=-lm \ --bindir="$HOME/bin" \ --enable-gpl \ --enable-libfdk_aac \ --enable-libfreetype \ --enable-libharfbuzz \ --enable-libmp3lame \ --enable-libopus \ --enable-libvpx \ --enable-libx264 \ --enable-libx265 \ --enable-nonfree make make install hash -d ffmpeg
Compilation is now complete and ffmpeg
(also ffprobe
, lame
, and x264
) should now be ready to use. The rest of this guide shows how to update or remove FFmpeg.
Tip: Keep the ffmpeg_sources
directory and all contents if you intend to update as shown below. Otherwise you can delete this directory.
Updating
Development of FFmpeg is active and an occasional update can give you new features and bug fixes. First, remove the old files and then update the dependencies:
rm -rf ~/ffmpeg_build ~/bin/{ffmpeg,ffprobe,lame,x264,x265} # yum install autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel
Update x264
cd ~/ffmpeg_sources/x264 make distclean git pull
Then run ./configure
, make
, and make install
as shown in the Install x264 section.
Update x265
cd ~/ffmpeg_sources/x265_git rm -rf ~/ffmpeg_sources/x265_git/build/linux/* git pull cd ~/ffmpeg_sources/x265_git/build/linux
Then run cmake
, make
, and make install
as shown in the Install x265 section.
Update libfdk_aac
cd ~/ffmpeg_sources/fdk_aac make distclean git pull
Then run ./configure
, make
, and make install
as shown in the Install libfdk_aac section.
Update libvpx
cd ~/ffmpeg_sources/libvpx make distclean git pull
Then run ./configure
, make
, and make install
as shown in the Install libvpx section.
Update FFmpeg
rm -rf ~/ffmpeg_sources/ffmpeg
Then re-run the Install FFmpeg section.
Reverting Changes made by this Guide
rm -rf ~/ffmpeg_build ~/ffmpeg_sources ~/bin/{ffmpeg,ffprobe,lame,nasm,vsyasm,x264,yasm,ytasm} # yum erase autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool zlib-devel hash -r
If You Need Help
Feel free to ask your questions at the #ffmpeg IRC channel or the ffmpeg-user mailing list.