= 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. This is a non-invasive guide and undoing all steps is simple and is shown at the end of this page. ---- == 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 cmake freetype-devel gcc gcc-c++ git libtool make mercurial 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 libvorbis is not needed, then skip that section and then remove `--enable-libvorbis` 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 http://www.nasm.us/pub/nasm/releasebuilds/2.13.01/nasm-2.13.01.tar.bz2 tar xjvf nasm-2.13.01.tar.bz2 cd nasm-2.13.01 ./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 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 }}} === 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 http://git.videolan.org/git/x264 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 -r` and x264 will then use your newly compiled nasm instead. }}} === 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 hg clone https://bitbucket.org/multicoreware/x265 cd ~/ffmpeg_sources/x265/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. 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 http://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.2.tar.gz tar xzvf opus-1.2.tar.gz cd opus-1.2 ./configure --prefix="$HOME/ffmpeg_build" --disable-shared make make install }}} === libogg === Ogg bitstream library. Required by [#libtheora libtheora] and [#libvorbis libvorbis]. {{{ cd ~/ffmpeg_sources curl -O -L http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz tar xzvf libogg-1.3.2.tar.gz cd libogg-1.3.2 ./configure --prefix="$HOME/ffmpeg_build" --disable-shared make make install }}} === libvorbis === Vorbis audio encoder. Requires [#libogg libogg]. Requires `ffmpeg` to be configured with `--enable-libvorbis`. {{{ cd ~/ffmpeg_sources curl -O -L http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz tar xzvf libvorbis-1.3.5.tar.gz cd libvorbis-1.3.5 ./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$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 \ --bindir="$HOME/bin" \ --enable-gpl \ --enable-libfdk_aac \ --enable-libfreetype \ --enable-libmp3lame \ --enable-libopus \ --enable-libvorbis \ --enable-libvpx \ --enable-libx264 \ --enable-libx265 \ --enable-nonfree make make install hash -r }}} Compilation is now complete and `ffmpeg` (also `ffprobe`, `ffserver`, `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,ffserver,lame,x264,x265} # yum install autoconf automake 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 rm -rf ~/ffmpeg_sources/x265/build/linux/* hg update cd ~/ffmpeg_sources/x265/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,ffserver,lame,nasm,vsyasm,x264,yasm,ytasm} # yum erase autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool mercurial 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]]