= 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 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: 1pt dotted; margin: 1em; background-color: #fffff9;" '''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 nasm 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: 1pt dotted; margin: 1em; background-color: #fffff9;" '''Note:''' 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. }}} === Yasm === Yasm is an assembler used by x264 and FFmpeg. {{{ cd ~/ffmpeg_sources git clone --depth 1 git://github.com/yasm/yasm.git cd yasm autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" make make install echo }}} {{{ #!div style="border: 1pt dotted; margin: 1em; background-color: #fffff9;" '''Note:''' The `echo` at the end is just a sacrificial command because some users are forgetting to manually execute the last command when copying and pasting each code block. }}} === 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 git://git.videolan.org/x264 cd x264 PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static make make install echo }}} === 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 echo }}} === 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 git://git.code.sf.net/p/opencore-amr/fdk-aac cd fdk-aac autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --disable-shared make make install echo }}} === libmp3lame === MP3 audio encoder. Requires `ffmpeg` to be configured with `--enable-libmp3lame`. {{{ cd ~/ffmpeg_sources curl -L -O http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz tar xzvf lame-3.99.5.tar.gz cd lame-3.99.5 ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm make make install echo }}} === libopus === Opus audio decoder and encoder. Requires `ffmpeg` to be configured with `--enable-libopus`. {{{ cd ~/ffmpeg_sources git clone http://git.opus-codec.org/opus.git cd opus autoreconf -fiv PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --disable-shared make make install echo }}} === libogg === Ogg bitstream library. Required by [#libtheora libtheora] and [#libvorbis libvorbis]. {{{ cd ~/ffmpeg_sources curl -O 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 echo }}} === libvorbis === Vorbis audio encoder. Requires [#libogg libogg]. Requires `ffmpeg` to be configured with `--enable-libvorbis`. {{{ cd ~/ffmpeg_sources curl -O http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.4.tar.gz tar xzvf libvorbis-1.3.4.tar.gz cd libvorbis-1.3.4 ./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-shared make make install echo }}} === libvpx === VP8/VP9 video encoder. 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 make make install echo }}} === FFmpeg === {{{ cd ~/ffmpeg_sources curl -O http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 tar xjvf ffmpeg-snapshot.tar.bz2 cd ffmpeg PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib -ldl" --bindir="$HOME/bin" --pkg-config-flags="--static" --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 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: 1pt dotted; 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,vsyasm,x264,x265,yasm,ytasm} # yum install autoconf automake cmake freetype-devel gcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel }}} === Update Yasm === {{{ cd ~/ffmpeg_sources/yasm make distclean git pull }}} Then run `./configure`, `make`, and `make install` as shown in the [#yasm Install yasm] section. === 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,vsyasm,x264,yasm,ytasm} # yum erase autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool mercurial nasm pkgconfig zlib-devel hash -r }}} ---- == If You Need Help == Feel free to ask your questions at the #ffmpeg IRC channel or the [http://ffmpeg.org/contact.html ffmpeg-user] mailing list. ---- == Also See == * [[Encode/H.264|H.264 Video Encoding Guide]] * [[Encode/AAC|AAC Audio Encoding Guide]]