Last active
February 24, 2022 21:31
-
-
Save silverkorn/d27861c9406a73a7bd4b to your computer and use it in GitHub Desktop.
An automated script to build FFmpeg non-free on RHEL/CentOS with as much features as possible. (Including mediainfo for debugging)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# TODO: Verify to link statically some dependencies usually not available in a default instllation of RHEL/CentOS (ex.: libxcb) | |
################### | |
## Configuration ## | |
################### | |
FFMPEG_CPU_COUNT=$(nproc) | |
FFMPEG_ENABLE="--enable-gpl --enable-version3 --enable-nonfree --enable-runtime-cpudetect --enable-gray --enable-openssl --enable-libfreetype" | |
FFMPEG_HOME=/usr/local/src/ffmpeg | |
#################### | |
## Initialization ## | |
#################### | |
yum -y install autoconf automake cmake freetype-devel gcc gcc-c++ git libtool make mercurial nasm pkgconfig curl-devel openssl-devel ncurses-devel p11-kit-devel zlib-devel | |
mkdir -p ${FFMPEG_HOME}/src | |
mkdir -p ${FFMPEG_HOME}/build | |
mkdir -p ${FFMPEG_HOME}/bin | |
export PATH=$PATH:${FFMPEG_HOME}/build:${FFMPEG_HOME}/build/lib:${FFMPEG_HOME}/build/include:${FFMPEG_HOME}/bin | |
############## | |
### FFMPEG ### | |
############## | |
echo | |
echo -e "\e[93mCompiling YASM...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone --depth 1 https://github.com/yasm/yasm.git | |
cd yasm | |
autoreconf -fiv | |
./configure --prefix="$HOME/ffmpeg-nonfree/build" --bindir="${FFMPEG_HOME}/bin" | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
echo | |
echo -e "\e[93mCompiling fontconfig...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
curl -L -O http://www.freedesktop.org/software/fontconfig/release/fontconfig-2.11.94.tar.gz | |
tar xzvf fontconfig-2.11.94.tar.gz | |
rm -f fontconfig-2.11.94.tar.gz | |
cd fontconfig-2.11.94 | |
./configure --prefix="${FFMPEG_HOME}/build" --bindir="${FFMPEG_HOME}/bin" --disable-shared --enable-static --enable-libxml2 | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-fontconfig" | |
echo | |
echo -e "\e[93mCompiling libfribidi...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
curl -L -O http://fribidi.org/download/fribidi-0.19.7.tar.bz2 | |
tar xjvf fribidi-0.19.7.tar.bz2 | |
rm -f fribidi-0.19.7.tar.bz2 | |
cd fribidi-0.19.7 | |
./configure --prefix="${FFMPEG_HOME}/build" --bindir="${FFMPEG_HOME}/bin" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libfribidi" | |
echo | |
echo -e "\e[93mCompiling libass...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone https://github.com/libass/libass.git | |
cd libass | |
./autogen.sh | |
PKG_CONFIG_PATH="${FFMPEG_HOME}/build/lib/pkgconfig" ./configure --prefix="${FFMPEG_HOME}/build" --bindir="${FFMPEG_HOME}/bin" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libass" | |
echo | |
echo -e "\e[93mCompiling libcaca...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone https://github.com/cacalabs/libcaca.git | |
cd libcaca | |
git checkout v0.99.beta19 | |
./bootstrap | |
./configure --prefix="${FFMPEG_HOME}/build" --bindir="${FFMPEG_HOME}/bin" --disable-shared --enable-static --disable-doc --disable-ruby --disable-csharp --disable-java --disable-python --disable-cxx --enable-ncurses --disable-x11 | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libcaca" | |
echo | |
echo -e "\e[93mCompiling libvo-amrwbenc...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
curl -L -O http://downloads.sourceforge.net/opencore-amr/vo-amrwbenc/vo-amrwbenc-0.1.3.tar.gz | |
tar xzvf vo-amrwbenc-0.1.3.tar.gz | |
rm -f vo-amrwbenc-0.1.3.tar.gz | |
cd vo-amrwbenc-0.1.3 | |
./configure --prefix="${FFMPEG_HOME}/build" --bindir="${FFMPEG_HOME}/bin" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libvo-amrwbenc" | |
echo | |
echo -e "\e[93mCompiling libopencore...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
curl -L -O http://downloads.sourceforge.net/opencore-amr/opencore-amr-0.1.3.tar.gz | |
tar xzvf opencore-amr-0.1.3.tar.gz | |
rm -f opencore-amr-0.1.3.tar.gz | |
cd opencore-amr-0.1.3 | |
./configure --prefix="${FFMPEG_HOME}/build" --bindir="${FFMPEG_HOME}/bin" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libopencore-amrnb --enable-libopencore-amrwb" | |
echo | |
echo -e "\e[93mCompiling libx264...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone --depth 1 https://git.videolan.org/git/x264.git | |
cd x264 | |
git checkout origin/stable | |
./configure --prefix="${FFMPEG_HOME}/build" --bindir="${FFMPEG_HOME}/bin" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libx264" | |
echo | |
echo -e "\e[93mCompiling libx265...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
hg clone https://bitbucket.org/multicoreware/x265 | |
cd ${FFMPEG_HOME}/src/x265/build/linux | |
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${FFMPEG_HOME}/build" -DENABLE_SHARED:bool=off ../../source | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libx265" | |
echo | |
echo -e "\e[93mCompiling libfdk-aac...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
#git clone --depth 1 git://git.code.sf.net/p/opencore-amr/fdk-aac | |
git clone --depth 1 https://github.com/mstorsjo/fdk-aac.git | |
cd fdk-aac | |
autoreconf -fiv | |
./configure --prefix="${FFMPEG_HOME}/build" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libfdk-aac" | |
echo | |
echo -e "\e[93mCompiling libmp3lame...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
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 | |
rm -f lame-3.99.5.tar.gz | |
cd lame-3.99.5 | |
./configure --prefix="${FFMPEG_HOME}/build" --bindir="${FFMPEG_HOME}/bin" --disable-shared --enable-static --enable-nasm | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libmp3lame" | |
echo | |
echo -e "\e[93mCompiling libtwolame...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
curl -L -O http://downloads.sourceforge.net/twolame/twolame-0.3.13.tar.gz | |
tar xzvf twolame-0.3.13.tar.gz | |
rm -f twolame-0.3.13.tar.gz | |
cd twolame-0.3.13 | |
./configure --prefix="${FFMPEG_HOME}/build" --bindir="${FFMPEG_HOME}/bin" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libtwolame" | |
echo | |
echo -e "\e[93mCompiling libopus...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone https://git.opus-codec.org/opus.git | |
cd opus | |
autoreconf -fiv | |
./configure --prefix="${FFMPEG_HOME}/build" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libopus" | |
echo | |
echo -e "\e[93mCompiling libogg...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
curl -L -O http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz | |
tar xzvf libogg-1.3.2.tar.gz | |
rm -f libogg-1.3.2.tar.gz | |
cd libogg-1.3.2 | |
./configure --prefix="${FFMPEG_HOME}/build" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
echo | |
echo -e "\e[93mCompiling libvorbis...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
curl -L -O http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.4.tar.gz | |
tar xzvf libvorbis-1.3.4.tar.gz | |
rm -f libvorbis-1.3.4.tar.gz | |
cd libvorbis-1.3.4 | |
LDFLAGS="-L${FFMPEG_HOME}/build/lib" CPPFLAGS="-I${FFMPEG_HOME}/build/include" ./configure --prefix="${FFMPEG_HOME}/build" --with-ogg="${FFMPEG_HOME}/build" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libvorbis" | |
echo | |
echo -e "\e[93mCompiling libspeex...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
curl -L -O http://downloads.xiph.org/releases/speex/speex-1.2rc2.tar.gz | |
tar xzvf speex-1.2rc2.tar.gz | |
rm -f speex-1.2rc2.tar.gz | |
cd speex-1.2rc2 | |
LDFLAGS="-L${FFMPEG_HOME}/build/lib" CPPFLAGS="-I${FFMPEG_HOME}/build/include" ./configure --prefix="${FFMPEG_HOME}/build" --with-ogg="${FFMPEG_HOME}/build" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libspeex" | |
echo | |
echo -e "\e[93mCompiling libvpx...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git | |
cd libvpx | |
./configure --prefix="${FFMPEG_HOME}/build" --disable-examples --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make clean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libvpx" | |
echo | |
echo -e "\e[93mCompiling libxvid...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
curl -L -O http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz | |
tar xvfz xvidcore-1.3.2.tar.gz | |
rm -f xvidcore-1.3.2.tar.gz | |
cd xvidcore/build/generic | |
./configure --prefix="${FFMPEG_HOME}/build" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libxvid" | |
echo | |
echo -e "\e[93mCompiling libtheora...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
curl -L -O http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.gz | |
tar xzvf libtheora-1.1.1.tar.gz | |
rm -f libtheora-1.1.1.tar.gz | |
cd libtheora-1.1.1 | |
./configure --prefix="${FFMPEG_HOME}/build" --disable-oggtest --with-ogg-includes="${FFMPEG_HOME}/build/include" --with-ogg-libraries="${FFMPEG_HOME}/build/lib" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libtheora" | |
echo | |
echo -e "\e[93mCompiling libwebp...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone --depth 1 https://chromium.googlesource.com/webm/libwebp.git | |
cd libwebp | |
./autogen.sh | |
./configure --prefix="${FFMPEG_HOME}/build" --bindir="${FFMPEG_HOME}/bin" --disable-shared --enable-static | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libwebp" | |
echo | |
echo -e "\e[93mCompiling libopenjpeg...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone https://github.com/uclouvain/openjpeg.git | |
cd openjpeg | |
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${FFMPEG_HOME}/build" -DBUILD_SHARED_LIBS=0 | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
rm -f -R "${FFMPEG_HOME}/build/lib/openjpeg-2.1" | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libopenjpeg" | |
echo | |
echo -e "\e[93mCompiling libilbc...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone https://github.com/TimothyGu/libilbc.git | |
cd libilbc | |
sed 's/lib64/lib/g' -i CMakeLists.txt | |
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${FFMPEG_HOME}/build" -DBUILD_SHARED_LIBS=0 -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=/lib | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libilbc" | |
echo | |
echo -e "\e[93mCompiling librtmp...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone --depth 1 http://git.ffmpeg.org/rtmpdump.git librtmp | |
cd librtmp | |
make -j ${FFMPEG_CPU_COUNT} SYS=posix prefix="${FFMPEG_HOME}/build" CRYPTO=OPENSSL SHARED= XCFLAGS="-I${FFMPEG_HOME}/build/include" XLDFLAGS="-L${FFMPEG_HOME}/build/lib" install | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-librtmp" | |
echo | |
echo -e "\e[93mCompiling libsoxr...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone http://git.code.sf.net/p/soxr/code soxr | |
cd soxr | |
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${FFMPEG_HOME}/build" -DWITH_OPENMP=off -DWITH_LSR_BINDINGS=off -DBUILD_SHARED_LIBS=0 -DBUILD_EXAMPLES=0 -DBUILD_TESTS=0 | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libsoxr" | |
echo | |
echo -e "\e[93mCompiling frei0r...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
curl -L -O https://files.dyne.org/frei0r/snapshots/frei0r-snapshot-27-01-15.tar.gz | |
tar xzvf frei0r-snapshot-27-01-15.tar.gz | |
rm -f frei0r-snapshot-27-01-15.tar.gz | |
mv frei0r-snapshot-27-01-15 frei0r-plugins-snapshot-1.5 | |
cd frei0r-plugins-snapshot-1.5 | |
PKG_CONFIG_PATH="${FFMPEG_HOME}/build/lib/pkgconfig" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${FFMPEG_HOME}/build" -DBUILD_SHARED_LIBS=0 -DCMAKE_BUILD_TYPE=Release -DWITHOUT_OPENCV=ON -DWITHOUT_GAVL=ON | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-frei0r --enable-filter=frei0r" | |
echo | |
echo -e "\e[93mCompiling libvidstab...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone https://github.com/georgmartius/vid.stab.git vidstab | |
cd vidstab | |
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${FFMPEG_HOME}/build" -DBUILD_SHARED_LIBS=0 | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-libvidstab" | |
echo | |
echo -e "\e[93mCompiling librubberband...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone https://github.com/lachs0r/rubberband.git | |
cd rubberband | |
make -j ${FFMPEG_CPU_COUNT} PREFIX="${FFMPEG_HOME}/build" install-static | |
FFMPEG_ENABLE="${FFMPEG_ENABLE} --enable-librubberband" | |
# Full "--enable" list, just in case | |
# FFMPEG_ENABLE="--enable-gpl --enable-version3 --enable-nonfree --enable-runtime-cpudetect --enable-gray --enable-openssl --enable-libfreetype --enable-fontconfig --enable-libfribidi --enable-libass --enable-libcaca --enable-libvo-amrwbenc --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libmp3lame --enable-libtwolame --enable-libopus --enable-libvorbis --enable-libspeex --enable-libvpx --enable-libxvid --enable-libtheora --enable-libwebp --enable-libopenjpeg --enable-libilbc --enable-librtmp --enable-libsoxr --enable-frei0r --enable-filter=frei0r --enable-libvidstab --enable-librubberband" | |
echo | |
echo -e "\e[93mCompiling ffmpeg...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
#git clone --depth 1 https://git.ffmpeg.org/ffmpeg.git | |
git clone --depth 1 https://github.com/FFmpeg/FFmpeg.git ffmpeg | |
cd ffmpeg | |
PKG_CONFIG_PATH="${FFMPEG_HOME}/build/lib/pkgconfig" | |
./configure --prefix="${FFMPEG_HOME}/build" --extra-cflags="-I${FFMPEG_HOME}/build/include" --extra-ldflags="-L${FFMPEG_HOME}/build/lib" --extra-libs='-lnettle -lhogweed -lgmp -lncurses' --bindir="${FFMPEG_HOME}/bin" --pkg-config-flags="--static" ${FFMPEG_ENABLE} | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
hash -r | |
################# | |
### MEDIAINFO ### | |
################# | |
echo | |
echo -e "\e[93mCompiling zenlib...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone https://github.com/MediaArea/ZenLib zenlib | |
cd zenlib/Project/CMake | |
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${FFMPEG_HOME}/build" -DLIB_INSTALL_DIR="${FFMPEG_HOME}/build/lib" -DBUILD_SHARED_LIBS=0 | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean | |
echo | |
echo -e "\e[93mCompiling mediainfolib...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone https://github.com/MediaArea/MediaInfoLib mediainfolib | |
cd mediainfolib/Project/CMake | |
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${FFMPEG_HOME}/build" -DLIB_INSTALL_DIR="${FFMPEG_HOME}/build/lib" -DBUILD_SHARED_LIBS=0 | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
sed -i 's|libzen|libcurl librtmp libzen|' "${FFMPEG_HOME}/build/lib/pkgconfig/libmediainfo.pc" | |
make distclean | |
echo | |
echo -e "\e[93mCompiling mediainfo...\e[39m" | |
echo | |
cd ${FFMPEG_HOME}/src | |
git clone https://github.com/MediaArea/MediaInfo mediainfo | |
cd mediainfo/Project/GNU/CLI | |
./autogen.sh | |
PKG_CONFIG_PATH="${FFMPEG_HOME}/build/lib/pkgconfig" ./configure --prefix="${FFMPEG_HOME}/build" | |
make -j ${FFMPEG_CPU_COUNT} | |
make install | |
make distclean |
hi tried it went through the whole script at the end i recieved this centos 7 im not a linux guru so thats why im using your script thanks for creating it.
./configure: line 15102: libzen-config: command not found
./configure: line 15197: libmediainfo-config: command not found
configure: error: libmediainfo configuration is not found
make: *** No targets specified and no makefile found. Stop.
make: *** No rule to make target install'. Stop. make: *** No rule to make target
distclean'. Stop.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Oops, I wasn't aware that someone would actually use it ;)
This was tested on CentOS 7.1 but I have a RHEL 6.7 that I could try this script and try to debug.
I'll give it a try and let you know.
BTW, are you using a x86_64 OS?