Minimize FFmpeg features for ChatGUI

This commit is contained in:
evgeny committed 2026-10-16 19:08:53 +02:00
1 parent eb98d2c724
commit 8cb656dbdc
1 file changed
+34 -55
+34 -55
View File
@@ -7,7 +7,7 @@ SRC_DIR="$BUILD_DIR/src"
INSTALL_DIR="$BUILD_DIR/install" INSTALL_DIR="$BUILD_DIR/install"
JOBS=$(nproc 2>/dev/null || echo 4) JOBS=$(nproc 2>/dev/null || echo 4)
AMF_HEADERS_VERSION="${AMF_HEADERS_VERSION:-1.5.3}" AMF_HEADERS_VERSION="${AMF_HEADERS_VERSION:-1.5.3}"
AMF_MARKER="$INSTALL_DIR/share/utun-ffmpeg-amf-enabled" FFMPEG_PROFILE_MARKER="$INSTALL_DIR/share/utun-chatgui-ffmpeg-minimal-v1"
case "$(uname -s)" in case "$(uname -s)" in
Linux) PLATFORM=linux ;; Linux) PLATFORM=linux ;;
@@ -40,21 +40,21 @@ do_clone() {
# ============================================================================ # ============================================================================
if [ "$PLATFORM" = "linux" ]; then if [ "$PLATFORM" = "linux" ]; then
MISSING="" MISSING=""
for pkg in build-essential cmake nasm pkg-config meson ninja-build git; do for pkg in build-essential cmake nasm pkg-config git; do
dpkg -s "$pkg" >/dev/null 2>&1 || MISSING="$MISSING $pkg" dpkg -s "$pkg" >/dev/null 2>&1 || MISSING="$MISSING $pkg"
done done
if [ -n "$MISSING" ]; then if [ -n "$MISSING" ]; then
log "Installing build tools:$MISSING" log "Installing build tools:$MISSING"
sudo apt update -qq && sudo apt install -y $MISSING sudo apt update -qq && sudo apt install -y $MISSING
fi fi
HW_DEPS="libva-dev libvdpau-dev" HW_DEPS="libva-dev libvpl-dev"
for pkg in $HW_DEPS; do for pkg in $HW_DEPS; do
dpkg -s "$pkg" >/dev/null 2>&1 || { log "Installing $pkg (HW accel)"; sudo apt install -y $pkg; } dpkg -s "$pkg" >/dev/null 2>&1 || { log "Installing $pkg (HW accel)"; sudo apt install -y $pkg; }
done done
else else
check_cmd pacman check_cmd pacman
for pkg in mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-ninja mingw-w64-ucrt-x86_64-nasm \ for pkg in mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-nasm \
mingw-w64-ucrt-x86_64-pkg-config mingw-w64-ucrt-x86_64-meson; do mingw-w64-ucrt-x86_64-pkg-config mingw-w64-ucrt-x86_64-libvpl; do
pacman -Qi "$pkg" >/dev/null 2>&1 || { log "Installing $pkg"; pacman -S --noconfirm "$pkg"; } pacman -Qi "$pkg" >/dev/null 2>&1 || { log "Installing $pkg"; pacman -S --noconfirm "$pkg"; }
done done
fi fi
@@ -62,7 +62,6 @@ fi
check_cmd cmake check_cmd cmake
check_cmd nasm check_cmd nasm
check_cmd pkg-config check_cmd pkg-config
check_cmd meson
check_cmd git check_cmd git
check_cmd curl check_cmd curl
@@ -135,7 +134,7 @@ if [ ! -f "$INSTALL_DIR/lib/pkgconfig/vpx.pc" ]; then
cd "$SRC_DIR/libvpx" cd "$SRC_DIR/libvpx"
log "Configure libvpx..." log "Configure libvpx..."
./configure --prefix="$INSTALL_DIR" --enable-static --disable-shared \ ./configure --prefix="$INSTALL_DIR" --enable-static --disable-shared \
--enable-pic --enable-vp8 --enable-vp9 --enable-vp9-highbitdepth \ --enable-pic --enable-vp8 --enable-vp9 --disable-vp9-highbitdepth \
--disable-examples --disable-tools --disable-docs --disable-unit-tests --disable-examples --disable-tools --disable-docs --disable-unit-tests
log "Build libvpx..." log "Build libvpx..."
make -j"$JOBS" make -j"$JOBS"
@@ -145,24 +144,6 @@ else
log "Skip libvpx: already built" log "Skip libvpx: already built"
fi fi
# --- SVT-AV1 (fast AV1 encoder) ---
if [ ! -f "$INSTALL_DIR/lib/pkgconfig/SvtAv1Enc.pc" ]; then
do_clone SVT-AV1 https://gitlab.com/AOMediaCodec/SVT-AV1.git v2.3.0
cd "$SRC_DIR/SVT-AV1"
mkdir -p build && cd build
log "Configure SVT-AV1..."
cmake .. -G "Unix Makefiles" \
-DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \
-DBUILD_SHARED_LIBS=OFF -DBUILD_APPS=OFF \
-DBUILD_TESTING=OFF -DBUILD_DEC=OFF
log "Build SVT-AV1..."
cmake --build . -j"$JOBS"
cmake --install .
log "SVT-AV1 OK"
else
log "Skip SVT-AV1: already built"
fi
# --- libaom (reference AV1 encoder) --- # --- libaom (reference AV1 encoder) ---
if [ ! -f "$INSTALL_DIR/lib/pkgconfig/aom.pc" ]; then if [ ! -f "$INSTALL_DIR/lib/pkgconfig/aom.pc" ]; then
do_clone libaom https://aomedia.googlesource.com/aom v3.12.0 do_clone libaom https://aomedia.googlesource.com/aom v3.12.0
@@ -182,21 +163,6 @@ else
log "Skip libaom: already built" log "Skip libaom: already built"
fi fi
# --- dav1d (fast AV1 decoder) ---
if [ ! -f "$INSTALL_DIR/lib/pkgconfig/dav1d.pc" ]; then
do_clone dav1d https://code.videolan.org/videolan/dav1d.git 1.5.1
cd "$SRC_DIR/dav1d"
log "Configure dav1d..."
meson setup build --prefix="$INSTALL_DIR" --buildtype release --libdir lib \
-Ddefault_library=static -Denable_tools=false -Denable_tests=false -Denable_docs=false
log "Build dav1d..."
meson compile -C build -j"$JOBS"
meson install -C build
log "dav1d OK"
else
log "Skip dav1d: already built"
fi
# --- nv-codec-headers (NVIDIA NVENC/NVDEC headers, no build needed) --- # --- nv-codec-headers (NVIDIA NVENC/NVDEC headers, no build needed) ---
if [ ! -f "$INSTALL_DIR/include/ffnvcodec/nvEncodeAPI.h" ]; then if [ ! -f "$INSTALL_DIR/include/ffnvcodec/nvEncodeAPI.h" ]; then
do_clone nv-codec-headers https://github.com/FFmpeg/nv-codec-headers.git master do_clone nv-codec-headers https://github.com/FFmpeg/nv-codec-headers.git master
@@ -229,8 +195,7 @@ if [ "$PLATFORM" = "windows" ] && [ ! -f "$INSTALL_DIR/include/AMF/core/Factory.
log "AMD AMF headers installed in $INSTALL_DIR/include/AMF" log "AMD AMF headers installed in $INSTALL_DIR/include/AMF"
fi fi
if [ -f "$INSTALL_DIR/lib/pkgconfig/libavcodec.pc" ] \ if [ -f "$INSTALL_DIR/lib/pkgconfig/libavcodec.pc" ] && [ -f "$FFMPEG_PROFILE_MARKER" ]; then
&& { [ "$PLATFORM" != "windows" ] || [ -f "$AMF_MARKER" ]; }; then
log "FFmpeg already built, skipping." log "FFmpeg already built, skipping."
log "Done: $INSTALL_DIR" log "Done: $INSTALL_DIR"
exit 0 exit 0
@@ -262,25 +227,41 @@ log "Configure FFmpeg..."
CONFIGURE_ARGS=( CONFIGURE_ARGS=(
--prefix="$INSTALL_DIR" --prefix="$INSTALL_DIR"
--disable-everything --disable-network
--enable-avcodec --enable-avformat --enable-avutil --enable-swscale --enable-swresample
--enable-shared --disable-static --enable-shared --disable-static
--enable-gpl --enable-version3 --enable-gpl --enable-version3
--pkg-config-flags=--static --pkg-config-flags=--static
--extra-cflags="-I$INSTALL_DIR/include" --extra-cflags="-I$INSTALL_DIR/include"
--extra-ldflags="-L$INSTALL_DIR/lib" --extra-ldflags="-L$INSTALL_DIR/lib"
--extra-libs="-lpthread -lm -ldl" --extra-libs="-lpthread -lm -ldl"
--enable-libx264 --enable-libx265 --enable-libx264 --enable-libx265 --enable-libvpx --enable-libaom --enable-libvpl --enable-nvenc
--enable-libvpx --enable-libsvtav1 --enable-libaom --enable-demuxer=avi --enable-demuxer=matroska --enable-demuxer=mov
--enable-libdav1d --enable-protocol=file --enable-parsers
--enable-nvenc --enable-cuda --enable-cuvid --enable-bsf=h264_mp4toannexb --enable-bsf=hevc_mp4toannexb
--enable-vaapi --enable-vdpau
--disable-programs --disable-doc --disable-avdevice --disable-programs --disable-doc --disable-avdevice
--disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-avfilter --disable-postproc --disable-muxers
--disable-debug --enable-optimizations --disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-debug --enable-optimizations
) )
DECODERS=(h264 hevc av1 vp8 vp9 mpeg4 mpeg2video mpeg1video mjpeg h263 msmpeg4v3 wmv1 wmv2 vc1
aac mp3 opus vorbis flac ac3 eac3 alac wmav1 wmav2 pcm_s16le pcm_s24le pcm_s32le pcm_u8 pcm_f32le)
ENCODERS=(libx264 libx265 libvpx_vp9 libaom_av1 h264_nvenc hevc_nvenc av1_nvenc
h264_qsv hevc_qsv vp9_qsv av1_qsv)
for decoder in "${DECODERS[@]}"; do CONFIGURE_ARGS+=("--enable-decoder=$decoder"); done
for encoder in "${ENCODERS[@]}"; do CONFIGURE_ARGS+=("--enable-encoder=$encoder"); done
if [ "$PLATFORM" = "windows" ]; then if [ "$PLATFORM" = "windows" ]; then
CONFIGURE_ARGS+=( CONFIGURE_ARGS+=(
--enable-d3d11va --enable-dxva2 --enable-amf --enable-amf --enable-d3d11va
--enable-encoder=h264_amf --enable-encoder=hevc_amf --enable-encoder=av1_amf
)
else
CONFIGURE_ARGS+=(
--enable-vaapi
--enable-encoder=h264_vaapi --enable-encoder=hevc_vaapi
--enable-encoder=vp9_vaapi --enable-encoder=av1_vaapi
) )
fi fi
@@ -291,17 +272,15 @@ if [ "$PLATFORM" = "windows" ]; then
grep -Eq "^#define $encoder 1$" config_components.h \ grep -Eq "^#define $encoder 1$" config_components.h \
|| die "FFmpeg configure did not enable $encoder; check AMF headers and config.log" || die "FFmpeg configure did not enable $encoder; check AMF headers and config.log"
done done
rm -f "$AMF_MARKER"
fi fi
log "Build FFmpeg..." log "Build FFmpeg..."
make clean
make -j"$JOBS" make -j"$JOBS"
make install make install
if [ "$PLATFORM" = "windows" ]; then mkdir -p "$(dirname "$FFMPEG_PROFILE_MARKER")"
mkdir -p "$(dirname "$AMF_MARKER")" touch "$FFMPEG_PROFILE_MARKER"
touch "$AMF_MARKER"
fi
log "===============================================================" log "==============================================================="
log "FFmpeg build SUCCESS" log "FFmpeg build SUCCESS"