= Compile FFmpeg on CentOS = [[PageOutline(2, 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 [[GenericCompilationGuide|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 [#RevertingChangesmadebythisGuide Reverting Changes Made by This Guide]. {{{ #!div style="border: 1px solid #c7e5c7; margin: 1em; background-color: #ddffdd;" '''Tip:''' Recent already compiled [https://ffmpeg.org/download.html static builds] are also available if you are unable to compile or are impatient. }}} ---- == Get the Dependencies == {{{ #!div style="border: 1px solid #e5e5c7; margin: 1em; background-color: #ffd;" '''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 == {{{ #!div style="border: 1px solid #c7e5c7; margin: 1em; background-color: #ddffdd;" '''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 [#FFmpeg 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 [[Encode/H.264|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 --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 }}} {{{ #!div style="border: 1px solid #e5c7c7; margin: 1em; background-color: #fdd;" '''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 [[Encode/H.265|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 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 [[Encode/AAC|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 [[Encode/VP9|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-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. {{{ #!div style="border: 1px solid #c7e5c7; margin: 1em; background-color: #ddffdd;" '''Tip:''' Keep the `ffmpeg_sources` directory and all contents if you intend to [#Updating 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 [#x264 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 [#x265 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 [#libfdk_aac 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 [#libvpx Install libvpx] section. === Update FFmpeg === {{{ rm -rf ~/ffmpeg_sources/ffmpeg }}} Then re-run the [#FFmpeg 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 [https://ffmpeg.org/contact.html ffmpeg-user] mailing list. ---- == Also See == * [[Encode/H.264|H.264 Video Encoding Guide]] * [[Encode/AAC|AAC Audio Encoding Guide]]