diff --git a/FFMPEGMINGW.sh b/FFMPEGMINGW.sh deleted file mode 100644 index b3563bf..0000000 --- a/FFMPEGMINGW.sh +++ /dev/null @@ -1,113 +0,0 @@ -echo Updating and upgrading MSYS2 packages... if system core update requires reboot this application, please run this script again after being updated. -pacman -Syu -echo Installing MSYS2 packages... -pacman -S python git nasm vim wget $MINGW_PACKAGE_PREFIX-{toolchain,cmake,autotools,meson,ninja} -echo Starting process of FFmpeg build with libvvenc and libvvdec... -[ ! -d buildffmpegwin ] && mkdir buildffmpegwin -cd buildffmpegwin - -clonepull() { - if [ ! -d "$1" ]; then - git clone --depth=1 "$2" "$1" - else - git -C "$1" pull - fi -} - -clonepull FFmpeg-VVC https://github.com/MartinEesmaa/FFmpeg-VVC -clonepull vvenc https://github.com/fraunhoferhhi/vvenc -clonepull vvdec https://github.com/fraunhoferhhi/vvdec -clonepull fdk-aac https://github.com/mstorsjo/fdk-aac -clonepull SDL https://github.com/libsdl-org/SDL -b SDL2 -clonepull libxml2 https://github.com/gnome/libxml2 -clonepull opus https://github.com/xiph/opus -clonepull libjxl https://github.com/libjxl/libjxl -clonepull zimg https://github.com/sekrit-twc/zimg -clonepull soxr https://github.com/chirlu/soxr -clonepull dav1d https://code.videolan.org/videolan/dav1d -clonepull codec2 https://github.com/drowe67/codec2 -clonepull vmaf https://github.com/netflix/vmaf - -if [ ! -d libjxl ]; then -sed -i 's/-lm/-lm -lstdc++/g' libjxl/lib/jxl/libjxl.pc.in libjxl/lib/threads/libjxl_threads.pc.in -git -C libjxl submodule update --init --recursive --depth 1 --recommend-shallow -fi - -if [ ! -d zimg ]; then -git -C zimg submodule update --init --recursive --depth 1 -wget https://raw.githubusercontent.com/m-ab-s/mabs-patches/master/zimg/0001-libm_wrapper-define-__CRT__NO_INLINE-before-math.h.patch -git -C zimg apply 0001-libm_wrapper-define-__CRT__NO_INLINE-before-math.h.patch -rm 0001-libm_wrapper-define-__CRT__NO_INLINE-before-math.h.patch -fi - -echo Starting to build fdk-aac: -cd fdk-aac -./autogen.sh && ./configure --enable-static --disable-shared --prefix=$MSYSTEM_PREFIX && make install -j $nproc -cd .. - -echo Starting to build libxml2: -cd libxml2 -./autogen.sh && ./configure --enable-static --disable-shared --prefix=$MSYSTEM_PREFIX && make install -j $nproc -cd .. - -echo Starting to build sdl2: -mkdir -p SDL/build -cd build && cmake -DCMAKE_EXE_LINKER_FLAGS="-static" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$MSYSTEM_PREFIX .. -G "MinGW Makefiles" && cmake --build . --target install -j $nproc -cd ../../ - -echo Starting to build libopus to improve decode quality on FFmpeg: -cd opus -./autogen.sh && CFLAGS="-O2 -D_FORTIFY_SOURCE=0" LDFLAGS="-flto -s" ./configure --enable-static --disable-shared --prefix=$MSYSTEM_PREFIX && make install -j $nproc -cd .. - -echo Starting to build libjxl: -mkdir -p libjxl/build && cd libjxl/build && cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=OFF -DJPEGXL_ENABLE_BENCHMARK=OFF -DJPEGXL_ENABLE_PLUGINS=ON -DJPEGXL_ENABLE_MANPAGES=OFF -DJPEGXL_FORCE_SYSTEM_BROTLI=ON -DJPEGXL_FORCE_SYSTEM_GTEST=ON -DCMAKE_INSTALL_PREFIX=$MSYSTEM_PREFIX .. && ninja install -cd ../../ - -echo Starting to build dav1d: -mkdir -p dav1d/build && cd dav1d/build && meson -Denable_docs=false -Ddefault_library=static -Dprefix=$MSYSTEM_PREFIX .. && ninja install -cd ../../ - -echo Starting to build zimg: -cd zimg && ./autogen.sh && ./configure --disable-shared --prefix=$MSYSTEM_PREFIX && make install -j $nproc -cd .. - -echo Starting to build soxr: -mkdir -p soxr/build && cd soxr/build && cmake -D{WITH_LSR_BINDINGS,BUILD_TESTS,WITH_OPENMP}=off -DCMAKE_INSTALL_PREFIX=$MSYSTEM_PREFIX -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -Wno-dev .. -G "MinGW Makefiles" -cmake --build . -j $nproc --target install -cd ../../ - -echo Starting to build codec2: -cd codec2 -sed -i 's|if(WIN32)|if(FALSE)|g' CMakeLists.txt -grep -ERl "\b(lsp|lpc)_to_(lpc|lsp)" --include="*.[ch]" | \ - xargs -r sed -ri "s;((lsp|lpc)_to_(lpc|lsp));c2_\1;g" -mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$MSYSTEM_PREFIX -D{UNITTEST,INSTALL_EXAMPLES}=off -DBUILD_SHARED_LIBS=OFF -DCMAKE_EXE_LINKER_FLAGS="-static" .. -G "MinGW Makefiles" -cmake --build . -j $nproc --target install -cd ../../ - -echo Starting to build vmaf to apply calculate VVC video references from original video: -mkdir -p vmaf/libvmaf/build && cd vmaf/libvmaf/build && CFLAGS="-msse2 -mfpmath=sse -mstackrealign" meson -Denable_docs=false -Ddefault_library=static -Denable_float=true -Dbuilt_in_models=true -Dprefix=$MSYSTEM_PREFIX .. && ninja install -cd ../../../ -sed -i 's/-lm/-lm -lstdc++/g' $MSYSTEM_PREFIX/lib/pkgconfig/libvmaf.pc - -echo Starting to build vvenc... -cd vvenc -mkdir build && cd build -cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$MSYSTEM_PREFIX -DVVENC_ENABLE_LINK_TIME_OPT=OFF .. -G "MinGW Makefiles" -cmake --build . --target install -j $nproc -cd ../../ -echo Starting to build vvdec... -cd vvdec -mkdir build && cd build -cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$MSYSTEM_PREFIX -DVVDEC_ENABLE_LINK_TIME_OPT=OFF .. -G "MinGW Makefiles" -cmake --build . --target install -j $nproc -cd ../../ - -echo Starting configuring and making FFmpeg VVCEasy build... -cd FFmpeg-VVC -./configure --enable-gpl --enable-version3 --enable-nonfree --enable-libfdk-aac --enable-static --enable-libvvenc --enable-libvvdec --enable-pic \ ---enable-zlib --enable-libxml2 --enable-libdav1d --enable-libopus --enable-libcodec2 --enable-libjxl --enable-libzimg \ ---enable-libvmaf --enable-libsoxr --extra-ldexeflags=-static --pkg-config-flags=-static --disable-w32threads --enable-sdl2 --extra-version=VVCEasy && \ -make -j -echo FFmpeg VVC version tools are now compiled, please see buildffmpegwin/FFmpeg folder. diff --git a/libvvdecffmpeg.sh b/libvvdecffmpeg.sh index 0a11bc7..4f45fe9 100644 --- a/libvvdecffmpeg.sh +++ b/libvvdecffmpeg.sh @@ -1,10 +1,71 @@ #!/bin/bash -PREFIX=/usr/local -echo Building FFmpeg VVCEasy Linux version... -sudo apt update && sudo apt upgrade -y && \ -sudo apt install build-essential cmake nasm autoconf pkg-config \ -python3-setuptools ninja-build python3-pip libtool git wget xxd -y && \ -sudo pip3 install meson + +printf "\033[33m" +echo "Warning: It is deprecated, but you're welcome to use it anyway." +printf "\033[39m" +PREFIX="$(pwd)/buildffmpeg/prefix" +echo "Note: Your prefix folder with full directory will be built: $PREFIX" +case "$(uname -s)" in + Linux*) + OS="Linux" + DISTRO=$(cat /etc/*release | grep ^ID= | cut -d= -f2 | tr -d '"') + echo "Building FFmpeg VVCEasy $OS version..." + echo "Updating and upgrading system packages..." + + case $DISTRO in + debian|ubuntu) + echo "Detected Debian/Ubuntu" + sudo apt update && sudo apt upgrade -y + echo "Installing dependencies for Debian/Ubuntu..." + sudo apt install build-essential cmake nasm autoconf pkg-config \ + python3-setuptools ninja-build python3-pip libtool git wget xxd -y + sudo pip3 install meson + ;; + arch) + echo "Detected Arch Linux" + sudo pacman -Syu --noconfirm + echo "Installing dependencies for Arch..." + sudo pacman -S --noconfirm base-devel cmake nasm autoconf pkg-config \ + python-setuptools ninja python-pip libtool git wget xxd + sudo pip install meson + ;; + fedora) + echo "Detected Fedora" + sudo dnf update -y + echo "Installing dependencies for Fedora..." + sudo dnf install -y gcc gcc-c++ cmake nasm autoconf pkgconfig \ + python3-setuptools ninja-build python3-pip libtool git wget xxd + sudo pip3 install meson + ;; + gentoo) + echo "Detected Gentoo" + sudo emerge --sync + echo "Installing dependencies for Gentoo..." + sudo emerge -av dev-util/cmake media-libs/nasm sys-devel/autoconf \ + dev-python/setuptools dev-util/ninja dev-python/pip sys-libs/libtool \ + dev-vcs/git net-misc/wget app-editors/vim + sudo pip3 install meson + ;; + *) + echo "Unsupported Linux distribution: $DISTRO" + exit 1 + ;; + esac + ;; + MSYS*|MINGW*) + OS="Windows" + extra="--disable-w32threads --enable-libcodec2" + echo "Building FFmpeg VVCEasy Windows version..." + echo "Updating and upgrading MSYS2 packages..." + pacman -Syu + echo "Installing MSYS2 packages..." + pacman -S python git nasm vim wget xxd $MINGW_PACKAGE_PREFIX-{toolchain,cmake,autotools,meson,ninja} + ;; + *) + echo "Only for Windows & Linux are only supported" + exit 1 + ;; +esac clonepull() { if [ ! -d "$1" ]; then @@ -14,6 +75,11 @@ clonepull() { fi } +[ ! -d buildffmpeg ] && mkdir buildffmpeg +cd buildffmpeg + +[ ! -d prefix ] && mkdir prefix + clonepull FFmpeg-VVC https://github.com/MartinEesmaa/FFmpeg-VVC clonepull vvenc https://github.com/fraunhoferhhi/vvenc clonepull vvdec https://github.com/fraunhoferhhi/vvdec @@ -25,9 +91,12 @@ clonepull libjxl https://github.com/libjxl/libjxl clonepull zimg https://github.com/sekrit-twc/zimg clonepull soxr https://github.com/chirlu/soxr clonepull dav1d https://code.videolan.org/videolan/dav1d -clonepull codec2 https://github.com/drowe67/codec2 clonepull vmaf https://github.com/netflix/vmaf +if [ $OS = "Windows" ]; then +clonepull codec2 https://github.com/drowe67/codec2 +fi + if [ ! -d libjxl ]; then sed -i 's/-lm/-lm -lstdc++/g' libjxl/lib/jxl/libjxl.pc.in libjxl/lib/threads/libjxl_threads.pc.in git -C libjxl submodule update --init --recursive --depth 1 --recommend-shallow @@ -40,34 +109,40 @@ git -C zimg apply 0001-libm_wrapper-define-__CRT__NO_INLINE-before-math.h.patch rm 0001-libm_wrapper-define-__CRT__NO_INLINE-before-math.h.patch fi -cd vvenc && sudo make install-release install-prefix=$PREFIX disable-lto=1 && \ -cd .. && \ -cd vvdec && sudo make install-release install-prefix=$PREFIX disable-lto=1 && \ -cd .. && \ -cd fdk-aac && ./autogen.sh && ./configure --prefix=$PREFIX --enable-static --disable-shared && sudo make install -j $nproc && \ -cd .. && \ -cd libxml2 && ./autogen.sh && ./configure --prefix=$PREFIX --enable-static --disable-shared && sudo make install -j $nproc && \ -cd .. && \ -cd opus && ./autogen.sh && CFLAGS="-O2 -D_FORTIFY_SOURCE=0" LDFLAGS="-flto -s" ./configure --prefix=$PREFIX --enable-static --disable-shared && sudo make install -j $nproc && \ -cd .. && \ -mkdir -p libjxl/build && cd libjxl/build && cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=OFF -DJPEGXL_ENABLE_BENCHMARK=OFF -DJPEGXL_ENABLE_PLUGINS=ON -DJPEGXL_ENABLE_MANPAGES=OFF -DJPEGXL_FORCE_SYSTEM_BROTLI=ON -DJPEGXL_FORCE_SYSTEM_GTEST=ON -DCMAKE_INSTALL_PREFIX=$PREFIX .. -G Ninja && sudo ninja install && \ -cd ../../ && \ -mkdir -p vmaf/libvmaf/build && cd vmaf/libvmaf/build && CFLAGS="-msse2 -mfpmath=sse -mstackrealign" meson -Denable_docs=false -Ddefault_library=static -Denable_float=true -Dbuilt_in_models=true -Dprefix=$PREFIX .. && sudo ninja install && \ -cd ../../../ && \ -sudo sed -i 's/-lm/-lm -lstdc++/g' $PREFIX/lib/x86_64-linux-gnu/pkgconfig/libvmaf.pc && \ -cd SDL && mkdir build && cd build && cmake -DCMAKE_EXE_LINKER_FLAGS="-static" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX .. && sudo make install -j $nproc && \ -cd ../../ && \ -cd zimg && ./autogen.sh && ./configure --disable-shared --prefix=$PREFIX && sudo make install -j $nproc && \ -cd .. && \ -mkdir -p soxr/build && cd soxr/build && cmake -D{WITH_LSR_BINDINGS,BUILD_TESTS,WITH_OPENMP}=off -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -Wno-dev .. && \ -sudo cmake --build . -j $nproc --target install && \ -cd ../../ && \ -mkdir -p dav1d/build && cd dav1d/build && meson -Denable_docs=false -Ddefault_library=static -Dprefix=$PREFIX .. && sudo ninja install && \ -cd ../../ && \ -cd FFmpeg-VVC && \ -./configure --enable-static --pkg-config-flags="--static" --extra-ldexeflags="-static" \ +make="make install-r install-prefix=$PREFIX" +autogen="./autogen.sh && ./configure --prefix=$PREFIX --enable-static --disable-shared && make install -j $(nproc)" + +cd vvenc && $make && cd .. +cd vvdec && $make && cd .. +cd fdk-aac && $autogen && cd .. +cd libxml2 && $autogen && cd .. +cd opus && ./autogen.sh && CFLAGS="-O2 -D_FORTIFY_SOURCE=0" LDFLAGS="-flto -s" ./configure --prefix=$PREFIX --enable-static --disable-shared && make install -j $(nproc) && cd .. +mkdir -p libjxl/build && cd libjxl/build && cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_{TESTING,SHARED_LIBS}=OFF -DJPEGXL_ENABLE_{BENCHMARK,MANPAGES}=OFF -DJPEGXL_{ENABLE_PLUGINS,FORCE_SYSTEM_BROTLI}=ON -DCMAKE_INSTALL_PREFIX=$PREFIX .. -G Ninja && ninja install && cd ../../ +mkdir -p vmaf/libvmaf/build && cd vmaf/libvmaf/build && CFLAGS="-msse2 -mfpmath=sse -mstackrealign" meson -Denable_docs=false -Ddefault_library=static -Denable_float=true -Dbuilt_in_models=true -Dprefix=$PREFIX .. && ninja install && cd ../../../ +mkdir -p SDL/build && cd SDL/build && cmake -DCMAKE_EXE_LINKER_FLAGS="-static" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX .. && make install -j $(nproc) && cd ../../ +cd zimg && $autogen && cd .. +mkdir -p soxr/build && cd soxr/build && cmake -D{WITH_LSR_BINDINGS,BUILD_TESTS,WITH_OPENMP}=off -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF .. && cmake --build . -j $(nproc) --target install && cd ../../ +mkdir -p dav1d/build && cd dav1d/build && meson -Denable_docs=false -Ddefault_library=static -Dprefix=$PREFIX .. && ninja install && cd ../../ + +sed -i 's/-lm/-lm -lstdc++/g' $PREFIX/lib/pkgconfig/libvmaf.pc + +if [ "$OS" = "Windows" ]; then + cd codec2 + sed -i 's|if(WIN32)|if(FALSE)|g' CMakeLists.txt + grep -ERl "\b(lsp|lpc)_to_(lpc|lsp)" --include="*.[ch]" | \ + xargs -r sed -ri "s;((lsp|lpc)_to_(lpc|lsp));c2_\1;g" + mkdir -p build && cd build && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX -D{UNITTEST,INSTALL_EXAMPLES}=off -DBUILD_SHARED_LIBS=OFF -DCMAKE_EXE_LINKER_FLAGS="-static" .. -G "MinGW Makefiles" + cmake --build . -j $nproc --target install + cd ../../ +fi + +cd FFmpeg-VVC +chmod +x configure +./configure --prefix=$PREFIX --enable-static --pkg-config-flags="--static" --extra-ldexeflags="-static" \ --enable-libfdk-aac --enable-libvvenc --enable-libvvdec --enable-pic \ ---enable-libxml2 --enable-libopus --enable-libdav1d --enable-libjxl --enable-libzimg --enable-libvmaf --enable-libsoxr --enable-sdl2 && \ +--enable-libxml2 --enable-libopus --enable-libdav1d --enable-libjxl --enable-libzimg \ +--enable-libvmaf --enable-libsoxr --enable-sdl2 $extra --extra-version=VVCEasy && \ make -j -echo You are ready to preview VVC, view VVC information or convert from VVC using ffmpeg, ffplay and ffprobe. -echo - Martin Eesmaa +cd .. +echo It is ready to go for prebuilt binaries of FFmpeg-VVC, you need to go directory called FFmpeg-VVC. +echo "- 2024 Martin Eesmaa (VVCEasy, MIT License)"