Minimize FFmpeg features for ChatGUI
This commit is contained in:
1 parent
eb98d2c724
commit
8cb656dbdc
1 file changed
+34
-55
@@ -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"
|
||||||
|
|||||||
Reference in new issue
Block a user