Skip to content

Instantly share code, notes, and snippets.

@abrar71
Last active January 6, 2021 17:01
Show Gist options
  • Select an option

  • Save abrar71/ffdf8ed680de8da23de9cb02b7a434f3 to your computer and use it in GitHub Desktop.

Select an option

Save abrar71/ffdf8ed680de8da23de9cb02b7a434f3 to your computer and use it in GitHub Desktop.
#!/bin/bash
# HOMEPAGE: https://github.com/markus-perl/ffmpeg-build-script
# LICENSE: https://github.com/markus-perl/ffmpeg-build-script/blob/master/LICENSE
PROGNAME=$(basename "$0")
VERSION=1.21
CWD=$(pwd)
PACKAGES="$CWD/packages"
WORKSPACE="$CWD/workspace"
CFLAGS="-I$WORKSPACE/include"
LDFLAGS="-L$WORKSPACE/lib"
LDEXEFLAGS=""
EXTRALIBS="-ldl -lpthread -lm -lz"
CONFIGURE_OPTIONS=()
# Speed up the process
# Env Var NUMJOBS overrides automatic detection
if [[ -n "$NUMJOBS" ]]; then
MJOBS="$NUMJOBS"
elif [[ -f /proc/cpuinfo ]]; then
MJOBS=$(grep -c processor /proc/cpuinfo)
elif [[ "$OSTYPE" == "darwin"* ]]; then
MJOBS=$(sysctl -n machdep.cpu.thread_count)
CONFIGURE_OPTIONS=("--enable-videotoolbox")
else
MJOBS=4
fi
make_dir () {
remove_dir "$1"
if ! mkdir "$1"; then
printf "\n Failed to create dir %s" "$1";
exit 1
fi
}
remove_dir () {
if [ -d "$1" ]; then
rm -r "$1"
fi
}
download () {
# download url [filename[dirname]]
DOWNLOAD_PATH="$PACKAGES"
DOWNLOAD_FILE="${2:-"${1##*/}"}"
if [[ "$DOWNLOAD_FILE" =~ "tar." ]]; then
TARGETDIR="${DOWNLOAD_FILE%.*}"
TARGETDIR="${3:-"${TARGETDIR%.*}"}"
else
TARGETDIR="${3:-"${DOWNLOAD_FILE%.*}"}"
fi
if [ ! -f "$DOWNLOAD_PATH/$DOWNLOAD_FILE" ]; then
echo "Downloading $1 as $DOWNLOAD_FILE"
curl -L --silent -o "$DOWNLOAD_PATH/$DOWNLOAD_FILE" "$1"
EXITCODE=$?
if [ $EXITCODE -ne 0 ]; then
echo ""
echo "Failed to download $1. Exitcode $EXITCODE. Retrying in 10 seconds";
sleep 10
curl -L --silent -o "$DOWNLOAD_PATH/$DOWNLOAD_FILE" "$1"
fi
EXITCODE=$?
if [ $EXITCODE -ne 0 ]; then
echo ""
echo "Failed to download $1. Exitcode $EXITCODE";
exit 1
fi
echo "... Done"
else
echo "$DOWNLOAD_FILE has already downloaded."
fi
make_dir "$DOWNLOAD_PATH/$TARGETDIR"
if [ -n "$3" ]; then
if ! tar -xvf "$DOWNLOAD_PATH/$DOWNLOAD_FILE" -C "$DOWNLOAD_PATH/$TARGETDIR" 2>/dev/null >/dev/null; then
echo "Failed to extract $DOWNLOAD_FILE";
exit 1
fi
else
if ! tar -xvf "$DOWNLOAD_PATH/$DOWNLOAD_FILE" -C "$DOWNLOAD_PATH/$TARGETDIR" --strip-components 1 2>/dev/null >/dev/null; then
echo "Failed to extract $DOWNLOAD_FILE";
exit 1
fi
fi
echo "Extracted $DOWNLOAD_FILE";
cd "$DOWNLOAD_PATH/$TARGETDIR" || (echo "Error has occurred." ; exit 1)
}
execute () {
echo "$ $*"
OUTPUT=$("$@" 2>&1)
# shellcheck disable=SC2181
if [ $? -ne 0 ]; then
echo "$OUTPUT"
echo ""
echo "Failed to Execute $*" >&2
exit 1
fi
}
build () {
echo ""
echo "building $1"
echo "======================="
if [ -f "$PACKAGES/$1.done" ]; then
echo "$1 already built. Remove $PACKAGES/$1.done lockfile to rebuild it."
return 1
fi
return 0
}
command_exists () {
if ! [[ -x $(command -v "$1") ]]; then
return 1
fi
return 0
}
library_exists () {
local result=0
local output=$(pkg-config --exists --print-errors "$1" 2>&1 > /dev/null) || result=$?
if [ ! "$result" = "0" ]; then
return 1
fi
return 0
}
build_done () {
touch "$PACKAGES/$1.done"
}
cleanup () {
remove_dir "$PACKAGES"
remove_dir "$WORKSPACE"
echo "Cleanup done."
echo ""
}
usage () {
echo "Usage: $PROGNAME [OPTIONS]"
echo "Options:"
echo " -h, --help Display usage information"
echo " --version Display version information"
echo " -b, --build Starts the build process"
echo " -c, --cleanup Remove all working dirs"
echo " -f, --full-static Build a full static FFmpeg binary (eg. glibc, pthreads etc...) **only Linux**"
echo " Note: Because of the NSS (Name Service Switch), glibc does not recommend static links."
echo ""
}
while (( $# > 0 )); do
case $1 in
-h | --help)
usage
exit 0
;;
--version)
echo "$VERSION"
exit 0
;;
-*)
if [[ "$1" == "--build" || "$1" =~ 'b' ]]; then
bflag='-b'
fi
if [[ "$1" == "--cleanup" || "$1" =~ 'c' && ! "$1" =~ '--' ]]; then
cflag='-c'
cleanup
fi
if [[ "$1" == "--full-static" || "$1" =~ 'f' ]]; then
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "Error: A full static binary can only be build on Linux."
exit 1
fi
LDEXEFLAGS="-static"
fi
shift
;;
*)
usage
exit 1
;;
esac
done
echo "ffmpeg-build-script v$VERSION"
echo "========================="
echo ""
if [ -z "$bflag" ]; then
if [ -z "$cflag" ]; then
usage
exit 1
fi
exit 0
fi
echo "Using $MJOBS make jobs simultaneously."
if [ -n "$LDEXEFLAGS" ]; then
echo "Start the build in full static mode."
fi
mkdir -p "$PACKAGES"
mkdir -p "$WORKSPACE"
export PATH="${WORKSPACE}/bin:$PATH"
PKG_CONFIG_PATH="/usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig"
PKG_CONFIG_PATH+=":/usr/local/share/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig:/usr/lib64/pkgconfig"
export PKG_CONFIG_PATH
if ! command_exists "make"; then
echo "make not installed.";
exit 1
fi
if ! command_exists "g++"; then
echo "g++ not installed.";
exit 1
fi
if ! command_exists "curl"; then
echo "curl not installed.";
exit 1
fi
if ! command_exists "python"; then
echo "Python command not found. Lv2 filter will not be available.";
fi
##
## build tools
##
if build "pkg-config"; then
download "https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz"
execute ./configure --silent --prefix="${WORKSPACE}" --with-pc-path="${WORKSPACE}"/lib/pkgconfig --with-internal-glib
execute make -j$MJOBS
execute make install
build_done "pkg-config"
fi
if command_exists "python"; then
if build "lv2"; then
download "https://lv2plug.in/spec/lv2-1.18.0.tar.bz2" "lv2-1.18.0.tar.bz2"
execute ./waf configure --prefix="${WORKSPACE}" --lv2-user
execute ./waf
execute ./waf install
build_done "lv2"
fi
if build "waflib"; then
download "https://gitlab.com/drobilla/autowaf/-/archive/cc37724b9bfa889baebd8cb10f38b8c7cab83e37/autowaf-cc37724b9bfa889baebd8cb10f38b8c7cab83e37.tar.gz" "autowaf.tar.gz"
build_done "waflib"
fi
if build "serd"; then
download "https://gitlab.com/drobilla/serd/-/archive/v0.30.6/serd-v0.30.6.tar.gz" "serd-v0.30.6.tar.gz"
execute cp -r ${PACKAGES}/autowaf/* "${PACKAGES}/serd-v0.30.6/waflib/"
execute ./waf configure --prefix="${WORKSPACE}" --static --no-shared --no-posix
execute ./waf
execute ./waf install
build_done "serd"
fi
if build "pcre"; then
download "https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz" "pcre-8.44.tar.gz"
execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
execute make -j$MJOBS
execute make install
build_done "pcre"
fi
if build "sord"; then
download "https://gitlab.com/drobilla/sord/-/archive/v0.16.6/sord-v0.16.6.tar.gz" "sord-v0.16.6.tar.gz"
execute cp -r ${PACKAGES}/autowaf/* "${PACKAGES}/sord-v0.16.6/waflib/"
execute ./waf configure --prefix="${WORKSPACE}" CFLAGS=${CFLAGS} --static --no-shared --no-utils
execute ./waf CFLAGS=${CFLAGS}
execute ./waf install
build_done "sord"
fi
if build "sratom"; then
download "https://gitlab.com/lv2/sratom/-/archive/v0.6.6/sratom-v0.6.6.tar.gz" "sratom-v0.6.6.tar.gz"
execute cp -r ${PACKAGES}/autowaf/* "${PACKAGES}/sratom-v0.6.6/waflib/"
execute ./waf configure --prefix="${WORKSPACE}" --static --no-shared
execute ./waf
execute ./waf install
build_done "sratom"
fi
if build "lilv"; then
download "https://gitlab.com/lv2/lilv/-/archive/v0.24.10/lilv-v0.24.10.tar.gz" "lilv-v0.24.10.tar.gz"
execute cp -r ${PACKAGES}/autowaf/* "${PACKAGES}/lilv-v0.24.10/waflib/"
execute ./waf configure --prefix="${WORKSPACE}" --static --no-shared --no-utils
execute ./waf
execute ./waf install
CFLAGS+=" -I$WORKSPACE/include/lilv-0"
build_done "lilv"
fi
CONFIGURE_OPTIONS+=("--enable-lv2")
fi
if build "yasm"; then
download "https://github.com/yasm/yasm/releases/download/v1.3.0/yasm-1.3.0.tar.gz"
execute ./configure --prefix="${WORKSPACE}"
execute make -j$MJOBS
execute make install
build_done "yasm"
fi
if build "nasm"; then
download "https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.xz"
execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
execute make -j$MJOBS
execute make install
build_done "nasm"
fi
if build "frei0r"; then
download "https://files.dyne.org/frei0r/releases/frei0r-plugins-1.7.0.tar.gz"
execute cmake -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DENABLE_SHARED=off -DBUILD_SHARED_LIBS=OFF
execute make -j$MJOBS
execute make install
build_done "frei0r"
fi
if build "zlib"; then
download "https://www.zlib.net/zlib-1.2.11.tar.gz"
execute ./configure --static --prefix="${WORKSPACE}"
execute make -j$MJOBS
execute make install
build_done "zlib"
fi
if build "freetype"; then
download "https://download.savannah.gnu.org/releases/freetype/freetype-2.10.1.tar.gz"
execute ./configure --prefix="${WORKSPACE}" --enable-static --disable-shared --with-zlib=yes
# \ --with-png=yes --with-zlib=yes --with-pic
execute make -j$MJOBS
execute make install
execute make clean
build_done "freetype"
fi
if build "fribidi"; then
download "https://github.com/fribidi/fribidi/releases/download/v1.0.10/fribidi-1.0.10.tar.xz"
execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static --disable-docs
execute make -j$MJOBS
execute make install
build_done "fribidi"
fi
if build "expat"; then
download "https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.gz"
execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
execute make -j$MJOBS
execute make install
build_done "expat"
fi
if build "openssl"; then
download "https://www.openssl.org/source/openssl-1.1.1h.tar.gz"
execute ./config --prefix="${WORKSPACE}" --openssldir="${WORKSPACE}" --with-zlib-include="${WORKSPACE}"/include/ --with-zlib-lib="${WORKSPACE}"/lib no-shared zlib
execute make -j$MJOBS
execute make install_sw
build_done "openssl"
fi
CONFIGURE_OPTIONS+=("--enable-openssl")
if build "cmake"; then
download "https://cmake.org/files/v3.18/cmake-3.18.4.tar.gz"
execute ./configure --prefix="${WORKSPACE}" --system-zlib
execute make -j$MJOBS
execute make install
build_done "cmake"
fi
if build "fontconfig"; then
download "https://www.freedesktop.org/software/fontconfig/release/fontconfig-2.13.92.tar.gz"
execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static --disable-docs
execute make -j$MJOBS
execute make install
build_done "fontconfig"
fi
if build "libass"; then
download "https://github.com/libass/libass/releases/download/0.14.0/libass-0.14.0.tar.gz"
execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
execute make -j$MJOBS
execute make check
execute make install
build_done "libass"
fi
if build "openjpeg"; then
download "https://github.com/uclouvain/openjpeg/archive/v2.4.0/openjpeg-2.4.0.tar.gz"
execute cmake -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DENABLE_SHARED=off -DBUILD_SHARED_LIBS=OFF
execute make -j$MJOBS
execute make install
build_done "openjpeg"
fi
##
## video library
##
if build "x264"; then
download "https://code.videolan.org/videolan/x264/-/archive/stable/x264-stable.tar.bz2"
if [[ "$OSTYPE" == "linux-gnu" ]]; then
execute ./configure --prefix="${WORKSPACE}" --enable-static --enable-pic CXXFLAGS="-fPIC"
else
execute ./configure --prefix="${WORKSPACE}" --enable-static --enable-pic
fi
execute make -j$MJOBS
execute make install
execute make install-lib-static
build_done "x264"
fi
CONFIGURE_OPTIONS+=("--enable-libx264")
if build "x265"; then
download "https://github.com/videolan/x265/archive/Release_3.5.tar.gz" "x265-3.5.tar.gz"
cd build/linux || exit
execute cmake -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DENABLE_SHARED=off -DBUILD_SHARED_LIBS=OFF ../../source
execute make -j$MJOBS
execute make install
if [ -n "$LDEXEFLAGS" ]; then
sed -i.backup 's/-lgcc_s/-lgcc_eh/g' "${WORKSPACE}/lib/pkgconfig/x265.pc" # The -i.backup is intended and required on MacOS: https://stackoverflow.com/questions/5694228/sed-in-place-flag-that-works-both-on-mac-bsd-and-linux
fi
build_done "x265"
fi
CONFIGURE_OPTIONS+=("--enable-libx265")
if build "libvpx"; then
download "https://github.com/webmproject/libvpx/archive/v1.9.0.tar.gz" "libvpx-1.9.0.tar.gz"
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "Applying Darwin patch"
sed "s/,--version-script//g" build/make/Makefile > build/make/Makefile.patched
sed "s/-Wl,--no-undefined -Wl,-soname/-Wl,-undefined,error -Wl,-install_name/g" build/make/Makefile.patched > build/make/Makefile
fi
execute ./configure --prefix="${WORKSPACE}" --disable-unit-tests --disable-shared --as=yasm
execute make -j$MJOBS
execute make install
build_done "libvpx"
fi
CONFIGURE_OPTIONS+=("--enable-libvpx")
if build "xvidcore"; then
download "https://downloads.xvid.com/downloads/xvidcore-1.3.7.tar.gz"
cd build/generic || exit
execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
execute make -j$MJOBS
execute make install
if [[ -f ${WORKSPACE}/lib/libxvidcore.4.dylib ]]; then
execute rm "${WORKSPACE}/lib/libxvidcore.4.dylib"
fi
if [[ -f ${WORKSPACE}/lib/libxvidcore.so ]]; then
execute rm "${WORKSPACE}"/lib/libxvidcore.so*
fi
build_done "xvidcore"
fi
CONFIGURE_OPTIONS+=("--enable-libxvid")
if build "vid_stab"; then
download "https://github.com/georgmartius/vid.stab/archive/v1.1.0.tar.gz" "vid.stab-1.1.0.tar.gz"
execute cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DUSE_OMP=OFF -DENABLE_SHARED=off .
execute make
execute make install
build_done "vid_stab"
fi
CONFIGURE_OPTIONS+=("--enable-libvidstab")
if build "av1"; then
download "https://aomedia.googlesource.com/aom/+archive/b52ee6d44adaef8a08f6984390de050d64df9faa.tar.gz" "av1.tar.gz" "av1"
make_dir "$PACKAGES"/aom_build
cd "$PACKAGES"/aom_build || exit
execute cmake -DENABLE_TESTS=0 -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DCMAKE_INSTALL_LIBDIR=lib "$PACKAGES"/av1
execute make -j$MJOBS
execute make install
build_done "av1"
fi
CONFIGURE_OPTIONS+=("--enable-libaom")
##
## audio library
##
if build "opencore"; then
download "https://deac-riga.dl.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-0.1.5.tar.gz"
execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
execute make -j$MJOBS
execute make install
build_done "opencore"
fi
CONFIGURE_OPTIONS+=("--enable-libopencore_amrnb" "--enable-libopencore_amrwb")
if build "lame"; then
download "https://netcologne.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz"
execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
execute make -j$MJOBS
execute make install
build_done "lame"
fi
CONFIGURE_OPTIONS+=("--enable-libmp3lame")
if build "opus"; then
download "https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz"
execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
execute make -j$MJOBS
execute make install
build_done "opus"
fi
CONFIGURE_OPTIONS+=("--enable-libopus")
if build "libogg"; then
download "https://ftp.osuosl.org/pub/xiph/releases/ogg/libogg-1.3.3.tar.gz"
execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
execute make -j$MJOBS
execute make install
build_done "libogg"
fi
if build "libvorbis"; then
download "https://ftp.osuosl.org/pub/xiph/releases/vorbis/libvorbis-1.3.6.tar.gz"
execute ./configure --prefix="${WORKSPACE}" --with-ogg-libraries="${WORKSPACE}"/lib --with-ogg-includes="${WORKSPACE}"/include/ --enable-static --disable-shared --disable-oggtest
execute make -j$MJOBS
execute make install
build_done "libvorbis"
fi
CONFIGURE_OPTIONS+=("--enable-libvorbis")
if build "libtheora"; then
download "https://ftp.osuosl.org/pub/xiph/releases/theora/libtheora-1.1.1.tar.gz"
sed "s/-fforce-addr//g" configure > configure.patched
chmod +x configure.patched
mv configure.patched configure
execute ./configure --prefix="${WORKSPACE}" --with-ogg-libraries="${WORKSPACE}"/lib --with-ogg-includes="${WORKSPACE}"/include/ --with-vorbis-libraries="${WORKSPACE}"/lib --with-vorbis-includes="${WORKSPACE}"/include/ --enable-static --disable-shared --disable-oggtest --disable-vorbistest --disable-examples --disable-asm --disable-spec
execute make -j$MJOBS
execute make install
build_done "libtheora"
fi
CONFIGURE_OPTIONS+=("--enable-libtheora")
if build "fdk_aac"; then
download "https://sourceforge.net/projects/opencore-amr/files/fdk-aac/fdk-aac-2.0.1.tar.gz/download?use_mirror=gigenet" "fdk-aac-2.0.1.tar.gz"
execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
execute make -j$MJOBS
execute make install
build_done "fdk_aac"
fi
CONFIGURE_OPTIONS+=("--enable-libfdk-aac")
##
## image library
##
if build "libwebp"; then
download "https://github.com/webmproject/libwebp/archive/v1.1.0.tar.gz" "libwebp-1.1.0.tar.gz"
make_dir build
cd build || exit
execute cmake -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_BINDIR=bin -DCMAKE_INSTALL_INCLUDEDIR=include -DENABLE_SHARED=OFF -DENABLE_STATIC=ON ../
execute make -j$MJOBS
execute make install
build_done "libwebp"
fi
CONFIGURE_OPTIONS+=("--enable-libwebp")
##
## other library
##
if build "libsdl"; then
download "https://www.libsdl.org/release/SDL2-2.0.12.tar.gz"
execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
execute make -j$MJOBS
execute make install
build_done "libsdl"
fi
if build "srt"; then
download "https://github.com/Haivision/srt/archive/v1.4.1.tar.gz" "srt-1.4.1.tar.gz"
export OPENSSL_ROOT_DIR="${WORKSPACE}"
export OPENSSL_LIB_DIR="${WORKSPACE}"/lib
export OPENSSL_INCLUDE_DIR="${WORKSPACE}"/include/
execute cmake . -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_BINDIR=bin -DCMAKE_INSTALL_INCLUDEDIR=include -DENABLE_SHARED=OFF -DENABLE_STATIC=ON -DENABLE_APPS=OFF -DUSE_STATIC_LIBSTDCXX=ON
execute make install
if [ -n "$LDEXEFLAGS" ]; then
sed -i.backup 's/-lgcc_s/-lgcc_eh/g' "${WORKSPACE}"/lib/pkgconfig/srt.pc # The -i.backup is intended and required on MacOS: https://stackoverflow.com/questions/5694228/sed-in-place-flag-that-works-both-on-mac-bsd-and-linux
fi
build_done "srt"
fi
CONFIGURE_OPTIONS+=("--enable-libsrt")
##
## HWaccel library
##
if [[ "$OSTYPE" == "linux-gnu" ]]; then
if command_exists "nvcc" ; then
if build "nv-codec"; then
download "https://github.com/FFmpeg/nv-codec-headers/releases/download/n11.0.10.0/nv-codec-headers-11.0.10.0.tar.gz"
execute make PREFIX="${WORKSPACE}"
execute make install PREFIX="${WORKSPACE}"
build_done "nv-codec"
fi
CFLAGS+=" -I/usr/local/cuda/include"
LDFLAGS+=" -L/usr/local/cuda/lib64"
CONFIGURE_OPTIONS+=("--enable-cuda-nvcc" "--enable-cuvid" "--enable-nvenc" "--enable-cuda-llvm")
if [ -z "$LDEXEFLAGS" ]; then
CONFIGURE_OPTIONS+=("--enable-libnpp") # Only libnpp cannot be statically linked.
fi
# https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
CONFIGURE_OPTIONS+=("--nvccflags=-gencode arch=compute_52,code=sm_52")
fi
# Vaapi doesn't work well with static links FFmpeg.
if [ -z "$LDEXEFLAGS" ]; then
# If the libva development SDK is installed, enable vaapi.
if library_exists "libva" ; then
if build "vaapi"; then
build_done "vaapi"
fi
CONFIGURE_OPTIONS+=("--enable-vaapi")
fi
fi
fi
##
## FFmpeg
##
build "ffmpeg"
download "https://ffmpeg.org/releases/ffmpeg-4.3.1.tar.bz2"
# shellcheck disable=SC2086
./configure "${CONFIGURE_OPTIONS[@]}" \
--disable-debug \
--disable-doc \
--disable-shared \
--enable-gpl \
--enable-nonfree \
--enable-pthreads \
--enable-static \
--enable-small \
--enable-pic \
--enable-ffplay \
--enable-fontconfig \
--enable-frei0r \
--enable-gpl \
--enable-version3 \
--enable-libass \
--enable-libfribidi \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libopenjpeg \
--enable-libopus \
--enable-librtmp \
--enable-libsoxr \
--enable-libspeex \
--enable-libtheora \
--enable-libvidstab \
--enable-libvo-amrwbenc \
--enable-libvorbis \
--enable-libvpx \
--enable-libwebp \
--enable-libx264 \
--enable-libx265 \
--enable-libxvid \
--enable-libzimg \
--enable-nonfree \
--enable-openssl \
--enable-pthreads \
--enable-runtime-cpudetect \
--enable-avfilter \
--enable-libopencore_amrwb \
--enable-libopencore_amrnb \
--enable-filters \
--enable-libaom \
--enable-libopenh264 \
--enable-sdl2 \
--extra-cflags="${CFLAGS}" \
--extra-ldexeflags="${LDEXEFLAGS}" \
--extra-ldflags="${LDFLAGS}" \
--extra-libs="${EXTRALIBS}" \
--pkgconfigdir="$WORKSPACE/lib/pkgconfig" \
--pkg-config-flags="--static" \
--prefix="${WORKSPACE}"
execute make -j$MJOBS
execute make install
INSTALL_FOLDER="/usr/bin"
if [[ "$OSTYPE" == "darwin"* ]]; then
INSTALL_FOLDER="/usr/local/bin"
fi
echo ""
echo "Building done. The following binaries can be found here:"
echo "- ffmpeg: $WORKSPACE/bin/ffmpeg"
echo "- ffprobe: $WORKSPACE/bin/ffprobe"
echo "- ffplay: $WORKSPACE/bin/ffplay"
echo ""
if [[ "$AUTOINSTALL" == "yes" ]]; then
if command_exists "sudo"; then
sudo cp "$WORKSPACE/bin/ffmpeg" "$INSTALL_FOLDER/ffmpeg"
sudo cp "$WORKSPACE/bin/ffprobe" "$INSTALL_FOLDER/ffprobe"
sudo cp "$WORKSPACE/bin/ffplay" "$INSTALL_FOLDER/ffplay"
echo "Done. FFmpeg is now installed to your system."
else
cp "$WORKSPACE/bin/ffmpeg" "$INSTALL_FOLDER/ffmpeg"
cp "$WORKSPACE/bin/ffprobe" "$INSTALL_FOLDER/ffprobe"
sudo cp "$WORKSPACE/bin/ffplay" "$INSTALL_FOLDER/ffplay"
echo "Done. FFmpeg is now installed to your system."
fi
elif [[ ! "$SKIPINSTALL" == "yes" ]]; then
read -r -p "Install these binaries to your $INSTALL_FOLDER folder? Existing binaries will be replaced. [Y/n] " response
case $response in
[yY][eE][sS]|[yY])
if command_exists "sudo"; then
sudo cp "$WORKSPACE/bin/ffmpeg" "$INSTALL_FOLDER/ffmpeg"
sudo cp "$WORKSPACE/bin/ffprobe" "$INSTALL_FOLDER/ffprobe"
sudo cp "$WORKSPACE/bin/ffplay" "$INSTALL_FOLDER/ffplay"
else
cp "$WORKSPACE/bin/ffmpeg" "$INSTALL_FOLDER/ffmpeg"
cp "$WORKSPACE/bin/ffprobe" "$INSTALL_FOLDER/ffprobe"
cp "$WORKSPACE/bin/ffplay" "$INSTALL_FOLDER/ffplay"
fi
echo "Done. FFmpeg is now installed to your system."
;;
esac
fi
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment