Files
ffmpeg-PKGBUILD/PKGBUILD
T
Daniel Bermond 87b96dcfdf Update opencv dependency
ffmpeg have just added support for opencv4[1] in the git master
branch. Added the patch here, so now opencv2 dependency from the
AUR can be dropped, and we can use the opencv package from the
official repositories while opencv5 is not yet released.

[1] https://git.ffmpeg.org/gitweb/ffmpeg.git/commit/c4ce51ee62205c74604767f1b7dab6a036edac7f
2025-11-11 14:58:06 -03:00

415 lines
13 KiB
Bash

# Maintainer : Daniel Bermond <dbermond@archlinux.org>
# Contributor: Iacopo Isimbaldi <isiachi@rhye.it>
pkgname=ffmpeg-full
pkgver=8.0
pkgrel=4
_svt_hevc_ver='ed80959ebb5586aa7763c91a397d44be1798587c'
_obs_studio_ver='32.0.2'
_whispercpp_ver='1.8.2'
pkgdesc='Complete solution to record, convert and stream audio and video (all possible features including libfdk-aac)'
arch=('x86_64')
url='https://ffmpeg.org/'
license=('LicenseRef-nonfree-and-unredistributable')
depends=(
'alsa-lib'
'aom'
'aribb24'
'avisynthplus' # loaded on-demand by dlopen()
'bzip2'
'cairo'
'celt'
'chromaprint-fftw'
'codec2'
'dav1d'
'davs2'
'flite1'
'fontconfig'
'freetype2'
'frei0r-plugins' # loaded on-demand by dlopen()
'fribidi'
'gcc-libs'
'glib2'
'glibc'
'glslang'
'gnutls'
'gsm'
'harfbuzz'
'jack'
'kvazaar'
'ladspa' # loaded on-demand by dlopen()
'lame'
'lcevcdec'
'lcms2'
'libaribcaption'
'libass'
'libavc1394'
'libbluray'
'libbs2b'
'libcaca'
'libcdio-paranoia'
'libdc1394'
'libdrm'
'libdvdnav'
'libdvdread'
'libfdk-aac'
'libgcrypt'
'libgme'
'libiec61883'
'libilbc'
'libjxl'
'libklvanc'
'liblc3'
'libmodplug'
'libmysofa'
'libopenmpt'
'libplacebo'
'libpulse'
'librabbitmq-c'
'libraw1394'
'librist'
'librsvg'
'libsoxr'
'libssh'
'libtheora'
'libva'
'libvdpau'
'libvorbis'
'libvpl'
'libvpx'
'libx11'
'libxcb'
'libxext'
'libxml2'
'libxv'
'libwebp'
'lilv'
'ocl-icd'
'openal'
'openapv'
'opencore-amr'
'opencv'
'openh264'
'openjpeg2'
'openvino'
'opus'
'qrencode'
'quirc'
'rav1e'
'rockchip-mpp'
'rtmpdump'
'rubberband'
'sdl2'
'shine'
'smbclient'
'snappy'
'sndio'
'speex'
'srt'
'svt-av1'
'svt-hevc'
'svt-vp9'
'tesseract'
'twolame'
'uavs3d-git'
'v4l-utils'
'vapoursynth' # loaded on-demand by dlopen()
'vid.stab'
'vmaf'
'vo-amrwbenc'
'vulkan-icd-loader' # loaded on-demand by dlopen()
'vvenc'
'x264'
'x265'
'xavs'
'xavs2'
'xevd'
'xeve'
'xvidcore'
'xz'
'zeromq'
'zimg'
'zlib'
'zvbi')
optdepends=(
'nvidia-utils: for NVIDIA CUVID/NVDEC/NVENC support'
'vpl-runtime: for Intel Quick Sync Video')
makedepends=(
'amf-headers'
'clang'
'cmake'
'cuda'
'ffnvcodec-headers'
'git'
'gmp'
'libgl'
'libomxil-bellagio'
'lv2'
'nasm'
'opencl-headers'
'vulkan-headers')
provides=(
'ffmpeg'
'libavcodec.so'
'libavdevice.so'
'libavfilter.so'
'libavformat.so'
'libavutil.so'
'libswscale.so'
'libswresample.so')
conflicts=('ffmpeg')
source=("https://ffmpeg.org/releases/ffmpeg-${pkgver}.tar.xz"{,.asc}
'git+https://github.com/lensfun/lensfun.git'
"https://github.com/obsproject/obs-studio/archive/${_obs_studio_ver}/obs-studio-${_obs_studio_ver}.tar.gz"
"https://github.com/ggml-org/whisper.cpp/archive/v${_whispercpp_ver}/whisper.cpp-${_whispercpp_ver}.tar.gz"
'010-ffmpeg-add-svt-hevc.patch'
"020-ffmpeg-add-svt-hevc-docs-g${_svt_hevc_ver:0:7}.patch"::"https://raw.githubusercontent.com/OpenVisualCloud/SVT-HEVC/${_svt_hevc_ver}/ffmpeg_plugin/0002-doc-Add-libsvt_hevc-encoder-docs.patch"
'030-ffmpeg-add-svt-vp9.patch'
'040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch'
'050-ffmpeg-fix-cuda-nvcc-with-gcc14.patch'
'060-ffmpeg-whisper.cpp-fix-pkgconfig.patch'
'070-ffmpeg-lcevcdec4.0.0-fix.patch'::'https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/fa23202cc7baab899894e8d22d82851a84967848'
'080-ffmpeg-cuda13-fix.patch'::'https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/f8a300c6739ea2ca648579d7faf3ae9811b9f19a'
'090-ffmpeg-glslang16-fix.patch'::'https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/f1e9032a2000b8b885cffd6fed8eacd47b37673f'
'100-ffmpeg-add-opencv4-support.patch'::'https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/c4ce51ee62205c74604767f1b7dab6a036edac7f'
'LICENSE')
sha256sums=('b2751fccb6cc4c77708113cd78b561059b6fa904b24162fa0be2d60273d27b8e'
'SKIP'
'SKIP'
'39e99b9fbdc77e7e87cfd9c7e8709d1d427627bad5b21b791019c887c8598d13'
'bcee25589bb8052d9e155369f6759a05729a2022d2a8085c1aa4345108523077'
'4b1053cc01244c79e3b23dc696eaff1aeb0627a2098e1a720a025d4ad75b5c16'
'a164ebdc4d281352bf7ad1b179aae4aeb33f1191c444bed96cb8ab333c046f81'
'da01eb3ca31d35d23257760875e14bed808b3fea02f290028adaed76062125a0'
'5cb2475de410f5696072687af88e91461cdacd1bb636ac14a3b348e3383934f1'
'9f3d84b3abe1077b3d6c1a25f36dcddf6419a7fe3217a4edd52aab6f0e4cd838'
'98b3d28cbd13bb575c602785f6b8cb0b66ea3128ab5a3a82fc1645822320c136'
'd2bacb3a5b0201503554c3394ea1f3fbc8ad79d5c2721e0c226134d40812ad08'
'79e3fbc30c86e0db789af78e79dc23227e5f6887531bcd52b2defa8526d1455b'
'0010bf826a7008452ccc8a072b0186688e8687be0dbe2be2ca7540e26ca076f1'
'f5b448f7e6e567273f74ed6e62ed25d8470f6bc9183c247993f1c03e78b57587'
'04a7176400907fd7db0d69116b99de49e582a6e176b3bfb36a03e50a4cb26a36')
validpgpkeys=('FCF986EA15E6E293A5644F10B4322F04D67658D8')
prepare() {
rm -f "ffmpeg-${pkgver}/libavcodec"/libsvt_{hevc,vp9}.c
patch -d "ffmpeg-${pkgver}" -Np1 -i "${srcdir}/010-ffmpeg-add-svt-hevc.patch"
patch -d "ffmpeg-${pkgver}" -Np1 -i "${srcdir}/020-ffmpeg-add-svt-hevc-docs-g${_svt_hevc_ver:0:7}.patch"
patch -d "ffmpeg-${pkgver}" -Np1 -i "${srcdir}/030-ffmpeg-add-svt-vp9.patch"
patch -d "ffmpeg-${pkgver}" -Np1 -i "${srcdir}/040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch"
patch -d "ffmpeg-${pkgver}" -Np1 -i "${srcdir}/050-ffmpeg-fix-cuda-nvcc-with-gcc14.patch"
patch -d "whisper.cpp-${_whispercpp_ver}" -Np1 -i "${srcdir}/060-ffmpeg-whisper.cpp-fix-pkgconfig.patch"
patch -d "ffmpeg-${pkgver}" -Np1 -i "${srcdir}/070-ffmpeg-lcevcdec4.0.0-fix.patch"
patch -d "ffmpeg-${pkgver}" -Np1 -i "${srcdir}/080-ffmpeg-cuda13-fix.patch"
patch -d "ffmpeg-${pkgver}" -Np1 -i "${srcdir}/090-ffmpeg-glslang16-fix.patch"
patch -d "ffmpeg-${pkgver}" -Np1 -i "${srcdir}/100-ffmpeg-add-opencv4-support.patch"
}
build() {
local _stagingdir="${srcdir}/staging"
local _pkgconfigdir="${_stagingdir}/lib/pkgconfig"
export PKG_CONFIG_PATH="${_pkgconfigdir}${PKG_CONFIG_PATH:+":${PKG_CONFIG_PATH}"}"
local -a _cmake_opts=(
'-GUnix Makefiles'
'-DBUILD_SHARED_LIBS:BOOL=OFF'
'-DCMAKE_BUILD_TYPE:STRING=None'
"-DCMAKE_INSTALL_PREFIX:PATH=${_stagingdir}"
'-Wno-dev')
# ffmpeg requires lensfun git master, but lensfun-git package wrongly installs its files to non-standard locations:
# https://aur.archlinux.org/cgit/aur.git/commit/?h=lensfun-git&id=7b7a2d4890df59cde62c7dbfde3cefd7868a2707
# building it locally as a static library for the time being - this also have the benefit of avoid rebuilding packages
# requiring lensfun, like gegl (required for gimp, a commonly used package), as lensfun git master have a soname bump
cmake -B build/lensfun -S lensfun \
"${_cmake_opts[@]}" \
-DBUILD_STATIC:BOOL='ON' \
-DINSTALL_PYTHON_MODULE:BOOL='OFF' \
-DINSTALL_HELPER_SCRIPTS:BOOL='OFF'
cmake --build build/lensfun --target install
sed -i \
-e 's/\(-llensfun\)/\1 -lglib-2.0 -lstdc++/' \
-e '/Cflags: /s/$/ -DCONF_LENSFUN_STATIC/' "${_pkgconfigdir}/lensfun.pc"
# whisper.cpp AUR package conflicts with imagemagick at the time of writing
# building it locally as a static library for the time being, as imagemagick is a commonly used package (high usage in pkgstats)
cmake -B build/whisper.cpp -S "whisper.cpp-${_whispercpp_ver}" \
"${_cmake_opts[@]}" \
-DWHISPER_BUILD_EXAMPLES:BOOL='OFF' \
-DWHISPER_BUILD_TESTS:BOOL='OFF'
cmake --build build/whisper.cpp --target install
cd "ffmpeg-${pkgver}"
printf '%s\n' ' -> Running ffmpeg configure script...'
export CFLAGS+=' -isystem/opt/cuda/include'
export CFLAGS+=" -isystem${srcdir}/obs-studio-${_obs_studio_ver}/plugins/decklink/linux/decklink-sdk"
export LDFLAGS+=' -L/opt/cuda/lib64'
# fix build of libavfilter/asrc_flite.c with gcc 14
export CFLAGS+=' -Wno-error=incompatible-pointer-types'
./configure \
--prefix='/usr' \
--enable-lto \
\
--disable-rpath \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-shared \
--disable-static \
--disable-stripping \
--disable-htmlpages \
--enable-gray \
\
--enable-alsa \
--enable-avisynth \
--enable-bzlib \
--enable-chromaprint \
--enable-frei0r \
--enable-gcrypt \
--enable-gmp \
--enable-gnutls \
--enable-iconv \
--enable-ladspa \
--enable-lcms2 \
--enable-libaom \
--enable-libaribb24 \
--enable-libaribcaption \
--enable-libass \
--enable-libbluray \
--enable-libbs2b \
--enable-libcaca \
--enable-libcelt \
--enable-libcdio \
--enable-libcodec2 \
--enable-libdav1d \
--enable-libdavs2 \
--enable-libdc1394 \
--enable-libdvdnav \
--enable-libdvdread \
--enable-libfdk-aac \
--enable-libflite \
--enable-libfontconfig \
--enable-libfreetype \
--enable-libfribidi \
--enable-libharfbuzz \
--enable-libglslang \
--enable-libgme \
--enable-libgsm \
--enable-libiec61883 \
--enable-libilbc \
--enable-libjack \
--enable-libjxl \
--enable-libklvanc \
--enable-libkvazaar \
--enable-liblc3 \
--enable-liblcevc-dec \
--enable-liblensfun \
--enable-libmodplug \
--enable-libmp3lame \
--enable-liboapv \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libopencv \
--enable-libopenh264 \
--enable-libopenjpeg \
--enable-libopenmpt \
--enable-libopenvino \
--enable-libopus \
--enable-libplacebo \
--enable-libpulse \
--enable-libqrencode \
--enable-libquirc \
--enable-librabbitmq \
--enable-librav1e \
--enable-librist \
--enable-librsvg \
--enable-librubberband \
--enable-librtmp \
--disable-libshaderc \
--enable-libshine \
--enable-libsmbclient \
--enable-libsnappy \
--enable-libsoxr \
--enable-libspeex \
--enable-libsrt \
--enable-libssh \
--enable-libsvtav1 \
--enable-libsvthevc \
--enable-libsvtvp9 \
--disable-libtensorflow \
--enable-libtesseract \
--enable-libtheora \
--disable-libtls \
--disable-libtorch \
--enable-libtwolame \
--enable-libuavs3d \
--enable-libv4l2 \
--enable-libvidstab \
--enable-libvmaf \
--enable-libvo-amrwbenc \
--enable-libvorbis \
--enable-libvpx \
--enable-libvvenc \
--enable-libwebp \
--enable-libx264 \
--enable-libx265 \
--enable-libxevd \
--enable-libxeve \
--enable-libxavs \
--enable-libxavs2 \
--enable-libxcb \
--enable-libxcb-shm \
--enable-libxcb-xfixes \
--enable-libxcb-shape \
--enable-libxvid \
--enable-libxml2 \
--enable-libzimg \
--enable-libzmq \
--enable-libzvbi \
--enable-lv2 \
--enable-lzma \
--enable-decklink \
--disable-mbedtls \
--enable-libmysofa \
--enable-openal \
--enable-opencl \
--enable-opengl \
--disable-openssl \
--disable-pocketsphinx \
--enable-sndio \
--enable-sdl2 \
--enable-vapoursynth \
--enable-vulkan \
--enable-whisper \
--enable-xlib \
--enable-zlib \
\
--enable-amf \
--enable-cuda-nvcc \
--enable-cuda-llvm \
--enable-cuvid \
--enable-ffnvcodec \
--enable-libdrm \
--enable-libvpl \
--disable-libnpp \
--enable-nvdec \
--enable-nvenc \
--disable-ohcodec \
--enable-omx \
--enable-rkmpp \
--enable-v4l2-m2m \
--enable-vaapi \
--enable-vdpau
make
make tools/qt-faststart
}
package() {
make -C "ffmpeg-${pkgver}" DESTDIR="$pkgdir" install
install -D -m755 "ffmpeg-${pkgver}/tools/qt-faststart" -t "${pkgdir}/usr/bin"
install -D -m644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}"
}