root/software/misc/build_ffmpeg.sh @ 96e4083c
| 138ecdb0 | David Sorber | #!/bin/bash
|
||
| b1d8e8c9 | david.sorber | ###############################################################################
|
||
# FFmpeg Build Script #
|
||||
# #
|
||||
# This script is based on instructions here: #
|
||||
# https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu #
|
||||
# #
|
||||
# NOTE: The script is designed to build shared libraries instead of static #
|
||||
# ones as the original instructions did. #
|
||||
# #
|
||||
###############################################################################
|
||||
| 138ecdb0 | David Sorber | |||
| b1d8e8c9 | david.sorber | # Helper function to pause between each step
|
||
function pause {
|
||||
echo "Press any key to continue"
|
||||
#~ read -n 1
|
||||
echo
|
||||
echo
|
||||
}
|
||||
# Use aggressive compiler flags (not sure these flags really matter these days...)
|
||||
export CFLAGS="-O3 -march=native -mtune=native"
|
||||
export CXXFLAGS=$CFLAGS
|
||||
| 138ecdb0 | David Sorber | |||
NUM_CORES=$(cat /proc/cpuinfo | awk '/^processor/{print $3}' | wc -l)
|
||||
| b1d8e8c9 | david.sorber | # Setup directories - modify as needed
|
||
DATESTAMP=$(date +%Y%m%d-%H%M%S)
|
||||
SOURCES_DIR="/tmp/ffmpeg-${DATESTAMP}/"
|
||||
INSTALL_DIR="/opt/local"
|
||||
BIN_DIR="$INSTALL_DIR/bin"
|
||||
# Set to a string containing the version you wish to install
|
||||
FFMPEG_VERSION="8.0"
|
||||
echo -e "BlackLynx FFmpeg Build Script\n"
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo -e "ERROR: This script must be run as root\n"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "Sources directory: ${SOURCES_DIR}"
|
||||
echo -e "Install directory: ${INSTALL_DIR}"
|
||||
echo -e "FFmpeg version: ${FFMPEG_VERSION}\n\n"
|
||||
# Determine which OS the script is running on
|
||||
DISTRIB_ID="$(lsb_release -is)"
|
||||
# Install prereqs depending on OS version
|
||||
if [[ "$DISTRIB_ID" == "RedHatEnterpriseServer" ||
|
||||
"$DISTRIB_ID" == "CentOS" ]]; then
|
||||
echo -e "\nRedHat/CentOS detected\n\n";
|
||||
sudo yum -y install \
|
||||
autoconf \
|
||||
automake \
|
||||
cmake3 \
|
||||
git \
|
||||
libass-devel \
|
||||
freetype-devel \
|
||||
libnuma \
|
||||
SDL2-devel \
|
||||
libtool \
|
||||
libva-devel \
|
||||
libvdpau-devel \
|
||||
libvorbis-devel \
|
||||
libxcb-devel \
|
||||
mercurial \
|
||||
pkgconfig \
|
||||
texinfo \
|
||||
wget \
|
||||
zlib-devel
|
||||
CMAKE_CMD="cmake3"
|
||||
LIB_DIR_NAME="lib64"
|
||||
LIB_DIR="$INSTALL_DIR/$LIB_DIR_NAME"
|
||||
| 138ecdb0 | David Sorber | |||
| b1d8e8c9 | david.sorber | elif [[ "$DISTRIB_ID" == "Ubuntu" ||
|
||
"$DISTRIB_ID" == "Linuxmint" ]]; then
|
||||
echo -e "\nUbuntu detected\n\n";
|
||||
echo "Installing prereqs..."
|
||||
sudo apt -y install \
|
||||
autoconf \
|
||||
automake \
|
||||
build-essential \
|
||||
cmake \
|
||||
git-core \
|
||||
libass-dev \
|
||||
libfreetype6-dev \
|
||||
libgnutls28-dev \
|
||||
libmp3lame-dev \
|
||||
libsdl2-dev \
|
||||
libtool \
|
||||
libva-dev \
|
||||
libvdpau-dev \
|
||||
libvorbis-dev \
|
||||
libxcb1-dev \
|
||||
libxcb-shm0-dev \
|
||||
libxcb-xfixes0-dev \
|
||||
meson \
|
||||
ninja-build \
|
||||
pkg-config \
|
||||
texinfo \
|
||||
wget \
|
||||
yasm \
|
||||
zlib1g-dev \
|
||||
nasm \
|
||||
libx264-dev \
|
||||
libx265-dev \
|
||||
libnuma-dev \
|
||||
libvpx-dev \
|
||||
libfdk-aac-dev \
|
||||
libopus-dev \
|
||||
openssl \
|
||||
libssl-dev \
|
||||
frei0r-plugins-dev \
|
||||
libchromaprint-dev \
|
||||
libgme-dev \
|
||||
flite1-dev \
|
||||
libcaca-dev \
|
||||
libbs2b-dev \
|
||||
libopenjp2-7-dev \
|
||||
libopencore-amrnb-dev \
|
||||
librubberband-dev \
|
||||
libopenmpt-dev \
|
||||
libshine-dev \
|
||||
libsnappy-dev \
|
||||
libsoxr-dev \
|
||||
libspeex-dev \
|
||||
libtheora-dev \
|
||||
libtwolame-dev \
|
||||
libv4l-dev \
|
||||
libvidstab-dev \
|
||||
libvo-amrwbenc-dev \
|
||||
libxvidcore-dev \
|
||||
liblzma-dev \
|
||||
libbluray-dev \
|
||||
libcdparanoia-dev \
|
||||
libcdio-dev \
|
||||
libcdio-paranoia-dev \
|
||||
ladspa-sdk \
|
||||
libgsm1-dev \
|
||||
libvpl2 \
|
||||
libwebp-dev \
|
||||
libzimg-dev \
|
||||
libzvbi-dev
|
||||
CMAKE_CMD="cmake"
|
||||
LIB_DIR_NAME="lib"
|
||||
LIB_DIR="$INSTALL_DIR/$LIB_DIR_NAME"
|
||||
| 138ecdb0 | David Sorber | |||
| b1d8e8c9 | david.sorber | fi
|
||
| 138ecdb0 | David Sorber | |||
| b1d8e8c9 | david.sorber | mkdir -p $SOURCES_DIR $INSTALL_DIR $BIN_DIR $LIB_DIR
|
||
| 138ecdb0 | David Sorber | echo
|
||
echo
|
||||
| b1d8e8c9 | david.sorber | #~ echo "Building NASM"
|
||
#~ cd $SOURCES_DIR && \
|
||||
#~ wget https://www.nasm.us/pub/nasm/releasebuilds/2.14/nasm-2.14.tar.bz2 && \
|
||||
#~ tar xjvf nasm-2.14.tar.bz2 && \
|
||||
#~ cd nasm-2.14 && \
|
||||
#~ ./autogen.sh && \
|
||||
#~ PATH="$BIN_DIR:$PATH" ./configure --prefix="$INSTALL_DIR" --libdir="$LIB_DIR" && \
|
||||
#~ make -j$NUM_CORES && \
|
||||
#~ sudo make install
|
||||
#~ echo
|
||||
#~ echo
|
||||
| 138ecdb0 | David Sorber | |||
| b1d8e8c9 | david.sorber | #~ echo "Building Yasm"
|
||
#~ cd $SOURCES_DIR && \
|
||||
#~ wget -O yasm-1.3.0.tar.gz 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="$INSTALL_DIR" --libdir="$LIB_DIR" --disable-static && \
|
||||
#~ make -j$NUM_CORES && \
|
||||
#~ sudo make install
|
||||
#~ echo
|
||||
#~ echo
|
||||
#~ echo "Building libx264"
|
||||
#~ cd $SOURCES_DIR && \
|
||||
#~ git -C x264 pull 2> /dev/null || git clone --depth 1 https://git.videolan.org/git/x264 && \
|
||||
#~ cd x264 && \
|
||||
#~ PATH="$BIN_DIR:$PATH" PKG_CONFIG_PATH="$LIB_DIR/pkgconfig" ./configure --prefix="$INSTALL_DIR" \
|
||||
#~ --libdir="$LIB_DIR" --enable-shared --enable-pic \
|
||||
#~ --extra-ldflags="-Wl,-rpath=$LIB_DIR,--enable-new-dtags" && \
|
||||
#~ PATH="$BIN_DIR:$PATH" make -j$NUM_CORES && sudo make install
|
||||
#~ echo
|
||||
#~ echo
|
||||
#~ echo "Building libx265"
|
||||
#~ cd $SOURCES_DIR && \
|
||||
#~ if cd x265 2> /dev/null; then hg pull && hg update; else hg clone https://bitbucket.org/multicoreware/x265; fi && \
|
||||
#~ cd x265/build/linux && \
|
||||
#~ PATH="$BIN_DIR:$PATH" $CMAKE_CMD -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \
|
||||
#~ -DLIB_INSTALL_DIR="$LIB_DIR_NAME" \
|
||||
#~ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-rpath=$LIB_DIR,--enable-new-dtags" ../../source && \
|
||||
#~ PATH="$BIN_DIR:$PATH" make -j$NUM_CORES && \
|
||||
#~ sudo make install
|
||||
#~ # NOTE: There does not appear to be a way to disable building of static lib;
|
||||
#~ # instead we remove it after the fact
|
||||
#~ rm $LIB_DIR/libx265.a
|
||||
#~ echo
|
||||
#~ echo
|
||||
#~ echo "Building libvpx"
|
||||
#~ cd $SOURCES_DIR && \
|
||||
#~ git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \
|
||||
#~ cd libvpx && \
|
||||
#~ PATH="$BIN_DIR:$PATH" ./configure --prefix="$INSTALL_DIR" --libdir="$LIB_DIR" --disable-examples \
|
||||
#~ --disable-unit-tests --enable-vp9-highbitdepth --as=yasm --enable-shared --disable-static && \
|
||||
#~ PATH="$BIN_DIR:$PATH" make -j$NUM_CORES && \
|
||||
#~ sudo make install
|
||||
#~ echo
|
||||
#~ echo
|
||||
| 138ecdb0 | David Sorber | |||
| b1d8e8c9 | david.sorber | #~ echo "Building libfdk-aac"
|
||
#~ cd $SOURCES_DIR && \
|
||||
#~ git -C fdk-aac pull 2> /dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac && \
|
||||
#~ cd fdk-aac && \
|
||||
#~ autoreconf -fiv && \
|
||||
#~ ./configure --prefix="$INSTALL_DIR" --libdir="$LIB_DIR" --disable-static && \
|
||||
#~ make -j$NUM_CORES && \
|
||||
#~ sudo make install
|
||||
#~ echo
|
||||
#~ echo
|
||||
#~ echo "Building libmp3lame"
|
||||
#~ cd $SOURCES_DIR && \
|
||||
#~ wget -O lame-3.100.tar.gz 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 && \
|
||||
#~ PATH="$BIN_DIR:$PATH" ./configure --prefix="$INSTALL_DIR" --libdir="$LIB_DIR" --disable-static && \
|
||||
#~ PATH="$BIN_DIR:$PATH" make -j$NUM_CORES && \
|
||||
#~ sudo make install
|
||||
#~ echo
|
||||
#~ echo
|
||||
#~ echo "Building libopus"
|
||||
#~ cd $SOURCES_DIR && \
|
||||
#~ git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git && \
|
||||
#~ cd opus && \
|
||||
#~ ./autogen.sh && \
|
||||
#~ ./configure --prefix="$INSTALL_DIR" --libdir="$LIB_DIR" --disable-static && \
|
||||
#~ make -j$NUM_CORES && \
|
||||
#~ sudo make install
|
||||
#~ echo
|
||||
#~ echo
|
||||
echo "Building libaom"
|
||||
| 138ecdb0 | David Sorber | cd $SOURCES_DIR && \
|
||
| b1d8e8c9 | david.sorber | git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom && \
|
||
mkdir aom_build && \
|
||||
cd aom_build && \
|
||||
PATH="$BIN_DIR:$PATH" $CMAKE_CMD -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \
|
||||
-DCMAKE_EXE_LINKER_FLAGS="-Wl,-rpath=$LIB_DIR,--enable-new-dtags" \
|
||||
-DBUILD_SHARED_LIBS=ON -DENABLE_TESTS=OFF -DENABLE_NASM=ON ../aom && \
|
||||
| 138ecdb0 | David Sorber | PATH="$BIN_DIR:$PATH" make -j$NUM_CORES && \
|
||
| b1d8e8c9 | david.sorber | sudo make install
|
||
| 138ecdb0 | David Sorber | echo
|
||
echo
|
||||
| b1d8e8c9 | david.sorber | pause
|
||
| 138ecdb0 | David Sorber | |||
| b1d8e8c9 | david.sorber | echo "Building libsvtav1"
|
||
| 138ecdb0 | David Sorber | cd $SOURCES_DIR && \
|
||
| b1d8e8c9 | david.sorber | # Temporarily use version 2.0.3 instead of latest: https://forums.linuxmint.com/viewtopic.php?t=435381
|
||
#~ git -C SVT-AV1 pull 2> /dev/null || git clone https://gitlab.com/AOMediaCodec/SVT-AV1.git && \
|
||||
wget https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v2.3.0/SVT-AV1-v2.3.0.tar.gz && \
|
||||
tar xzvf SVT-AV1-v2.3.0.tar.gz && mv SVT-AV1-v2.3.0 SVT-AV1 && /
|
||||
mkdir -p SVT-AV1/build && \
|
||||
cd SVT-AV1/build && \
|
||||
PATH="$BIN_DIR:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \
|
||||
-DCMAKE_BUILD_TYPE=Release -DBUILD_DEC=OFF -DBUILD_SHARED_LIBS=ON .. && \
|
||||
| 138ecdb0 | David Sorber | PATH="$BIN_DIR:$PATH" make -j$NUM_CORES && \
|
||
| b1d8e8c9 | david.sorber | sudo make install
|
||
| 138ecdb0 | David Sorber | echo
|
||
echo
|
||||
| b1d8e8c9 | david.sorber | pause
|
||
| 138ecdb0 | David Sorber | |||
| b1d8e8c9 | david.sorber | echo "Building libdav1d"
|
||
| 138ecdb0 | David Sorber | cd $SOURCES_DIR && \
|
||
| b1d8e8c9 | david.sorber | git -C dav1d pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/dav1d.git && \
|
||
mkdir -p dav1d/build && \
|
||||
cd dav1d/build && \
|
||||
PATH="$BIN_DIR:$PATH" meson setup -Denable_tools=false -Denable_tests=false --default-library=shared .. \
|
||||
--prefix "$INSTALL_DIR" --libdir="$LIB_DIR" && \
|
||||
ninja && \
|
||||
sudo ninja install
|
||||
| 138ecdb0 | David Sorber | echo
|
||
echo
|
||||
| b1d8e8c9 | david.sorber | pause
|
||
| 138ecdb0 | David Sorber | |||
| b1d8e8c9 | david.sorber | echo "Building libvmaf"
|
||
cd $SOURCES_DIR &&
|
||||
git clone 'https://github.com/Netflix/vmaf' 'vmaf-master' &&
|
||||
mkdir -p 'vmaf-master/libvmaf/build' &&
|
||||
cd 'vmaf-master/libvmaf/build' &&
|
||||
meson setup -Denable_tests=false -Denable_docs=false --buildtype=release --default-library=shared '../' \
|
||||
--prefix "$INSTALL_DIR" --bindir="$BIN_DIR" --libdir="$LIB_DIR" &&
|
||||
ninja &&
|
||||
sudo ninja install
|
||||
| 138ecdb0 | David Sorber | echo
|
||
echo
|
||||
| b1d8e8c9 | david.sorber | pause
|
||
| 138ecdb0 | David Sorber | |||
| b1d8e8c9 | david.sorber | echo "Building VVenC (H.266/VVC)"
|
||
cd $SOURCES_DIR &&
|
||||
git -C vvenc pull 2> /dev/null || git clone --depth 1 https://github.com/fraunhoferhhi/vvenc &&
|
||||
cd vvenc &&
|
||||
PATH="$BIN_DIR:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON &&
|
||||
PATH="$BIN_DIR:$PATH" make -j$(NUM_CORES) &&
|
||||
sudo make -j$(NUM_CORES) install
|
||||
| 138ecdb0 | David Sorber | echo
|
||
echo
|
||||
| b1d8e8c9 | david.sorber | pause
|
||
| 138ecdb0 | David Sorber | |||
echo "Building ffmpeg"
|
||||
cd $SOURCES_DIR && \
|
||||
wget -O ffmpeg-$FFMPEG_VERSION.tar.bz2 https://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.bz2 && \
|
||||
tar xjvf ffmpeg-$FFMPEG_VERSION.tar.bz2 && \
|
||||
cd ffmpeg-$FFMPEG_VERSION && \
|
||||
| b1d8e8c9 | david.sorber | PATH="$BIN_DIR:$PATH" PKG_CONFIG_PATH="$INSTALL_DIR/lib/pkgconfig:$INSTALL_DIR/lib64/pkgconfig" ./configure \
|
||
--enable-shared \
|
||||
--disable-static \
|
||||
--prefix="$INSTALL_DIR" \
|
||||
--libdir="$LIB_DIR" \
|
||||
--enable-pic \
|
||||
--extra-cflags="-I$INSTALL_DIR/include" \
|
||||
--extra-ldflags="-L$LIB_DIR -Wl,-rpath=$LIB_DIR,--enable-new-dtags" \
|
||||
| 138ecdb0 | David Sorber | --extra-libs="-lpthread -lm" \
|
||
| b1d8e8c9 | david.sorber | --enable-chromaprint \
|
||
--enable-frei0r \
|
||||
| 138ecdb0 | David Sorber | --enable-gpl \
|
||
| b1d8e8c9 | david.sorber | --enable-ladspa \
|
||
| 138ecdb0 | David Sorber | --enable-libaom \
|
||
--enable-libass \
|
||||
| b1d8e8c9 | david.sorber | --enable-libbluray \
|
||
--enable-libbs2b \
|
||||
--enable-libcaca \
|
||||
--enable-libcdio \
|
||||
| 138ecdb0 | David Sorber | --enable-libfdk-aac \
|
||
| b1d8e8c9 | david.sorber | --enable-libflite \
|
||
--enable-libfontconfig \
|
||||
| 138ecdb0 | David Sorber | --enable-libfreetype \
|
||
| b1d8e8c9 | david.sorber | --enable-libfribidi \
|
||
--enable-libgme \
|
||||
--enable-libmp3lame \
|
||||
--enable-libopenmpt \
|
||||
| 138ecdb0 | David Sorber | --enable-libmp3lame \
|
||
--enable-libopus \
|
||||
| b1d8e8c9 | david.sorber | --enable-libpulse \
|
||
--enable-librubberband \
|
||||
--enable-libshine \
|
||||
--enable-libsnappy \
|
||||
--enable-libsoxr \
|
||||
--enable-libspeex \
|
||||
--enable-libsvtav1 \
|
||||
--enable-libtheora \
|
||||
--enable-libtwolame \
|
||||
--enable-libvidstab \
|
||||
--enable-libdav1d \
|
||||
--enable-libvmaf \
|
||||
--enable-libvo-amrwbenc \
|
||||
| 138ecdb0 | David Sorber | --enable-libvorbis \
|
||
--enable-libvpx \
|
||||
--enable-libx264 \
|
||||
--enable-libx265 \
|
||||
| b1d8e8c9 | david.sorber | --enable-libxml2 \
|
||
--enable-libxvid \
|
||||
--enable-nonfree \
|
||||
--enable-opengl \
|
||||
--enable-openssl \
|
||||
--enable-version3 \
|
||||
--enable-librubberband \
|
||||
--enable-libharfbuzz \
|
||||
--enable-libwebp \
|
||||
--enable-libzimg \
|
||||
--enable-libzvbi \
|
||||
--enable-libgsm \
|
||||
--enable-libvvenc \
|
||||
--enable-vaapi \
|
||||
| 138ecdb0 | David Sorber | --enable-nonfree && \
|
||
PATH="$BIN_DIR:$PATH" make -j$NUM_CORES && \
|
||||
| b1d8e8c9 | david.sorber | sudo make install && \
|
||
| 138ecdb0 | David Sorber | hash -r
|
||
| b1d8e8c9 | david.sorber | |||
#~ if [ ! -f /etc/ld.so.conf.d/opt_local.conf ]; then
|
||||
#~ echo "Adding /opt/local/lib path to ld cache"
|
||||
#~ sudo bash -c 'echo "/opt/local/lib" > /etc/ld.so.conf.d/opt_local.conf'
|
||||
#~ sudo ldconfig
|
||||
#~ fi
|