From 7e453a7f16746d8cac4e3a6d4236133225d4b80f Mon Sep 17 00:00:00 2001 From: Yingjie Wang Date: Wed, 14 Jan 2026 01:29:03 -0500 Subject: [PATCH] new blfs: media-video/ffmpeg-7.1.3 --- media-video/ffmpeg-7.1.3.PKGBUILD | 326 ++++++++++++++++++++++++++++++ 1 file changed, 326 insertions(+) create mode 100644 media-video/ffmpeg-7.1.3.PKGBUILD diff --git a/media-video/ffmpeg-7.1.3.PKGBUILD b/media-video/ffmpeg-7.1.3.PKGBUILD new file mode 100644 index 0000000..c3b74ac --- /dev/null +++ b/media-video/ffmpeg-7.1.3.PKGBUILD @@ -0,0 +1,326 @@ +pkgname=ffmpeg +pkgver=7.1.3 +_ver=${pkgver%.*} +pkgdesc='Complete solution to record, convert and stream audio and video' +arch=(x86_64) +homepage=https://ffmpeg.org +license=(GPL-3.0-only) +depends=( + bzip2 + dav1d + fontconfig + freetype + glibc + harfbuzz + libass + libdrm + libgl + libpulse + libraw1394 + libva + libwebp + libxml2 + opus + x264 + x265 + xz + zlib +) +makedepends=( + mesa + nasm + vulkan-headers +) +sources=("${pkgname}-${pkgver}.tar.xz" + "${pkgname}-${_ver}-patchset-2.tar.xz" #from gentoo +) +urls=("https://ffmpeg.org/releases/ffmpeg-${pkgver}.tar.xz" + "https://dev.gentoo.org/~ionen/distfiles/${sources[1]}" +) +sha512sums=("1231cb6fe8305e040565d9c2a05228af6e90ded88b8548b24b1e7c46964ea25e43db44eb2b677837c0d68bc4e2a10ea5db101c2d2a24d2e3132cd20d599b0da0" + "bde2e07e2284f9c59bfc3dd448d46f34e14e3983d01baac6b89efac1093dd804318c4770cebe16d84830b34325dcd0aa88cf56136b3529bd36651bb32d73632b" +) + +USE="bzip2 dav1d drm fontconfig gpl libass openssl opus postproc pulseaudio truetype vaapi vulkan webp x264 x265 xml zlib" +FFMPEG_IUSE_MAP=( + # [+]flag[:[^][!]opt1,...][@]], ^ = native-only, ! = override + # remember to keep LICENSE, REQUIRED_USE, and RESTRICT in sync + X:libxcb,libxcb-shape,libxcb-shm,libxcb-xfixes,xlib + alsa + amf + amrenc:libvo-amrwbenc@v3 + amr:libopencore-amrnb,libopencore-amrwb@v3 + appkit + bluray:libbluray + bs2b:libbs2b + bzip2:bzlib + cdio:libcdio + chromaprint + codec2:libcodec2 + cuda:cuda-llvm + +dav1d:libdav1d + ${FFMPEG_UNSLOTTED:+doc:^htmlpages} + +drm:libdrm + dvd:libdvdnav,libdvdread + fdk:libfdk-aac@nonfree + flite:libflite + +fontconfig:libfontconfig + frei0r + fribidi:libfribidi + gcrypt + gme:libgme + gmp:@v3 + +gnutls # unused if USE=openssl, default for bug #905113,#917627 + +gpl + gsm:libgsm + iec61883:libiec61883 + ieee1394:libdc1394 + jack:libjack + jpeg2k:libopenjpeg + jpegxl:libjxl + kvazaar:libkvazaar + ladspa + lame:libmp3lame + lcms:lcms2 + libaom + libaribb24:@v3 # reminder: req use on gpl unneeded if >=1.0.4 (not in tree) + +libass + libcaca + libilbc + liblc3 + libplacebo + librtmp:librtmp + libsoxr + lv2 + lzma + modplug:libmodplug + nvenc:cuvid,ffnvcodec,nvdec,nvenc + ocr:libtesseract + openal + opencl + opengl + openh264:libopenh264 + openmpt:libopenmpt + openssl:openssl,!gnutls@v3ifgpl # still LGPL2.1+ if USE=-gpl + opus:libopus + +postproc # exposed as a USE for clarity with the GPL requirement + pulseaudio:libpulse + qrcode:libqrencode + qsv:libvpl + quirc:libquirc + rabbitmq:^librabbitmq # no multilib + rav1e:^librav1e # no multilib + rubberband:librubberband + samba:libsmbclient@v3 # GPL-3+ only + sdl:sdl2 + shaderc:libshaderc + snappy:libsnappy + sndio + speex:libspeex + srt:libsrt + ssh:libssh + svg:librsvg + svt-av1:libsvtav1 + theora:libtheora + +truetype:libfreetype,libharfbuzz + twolame:libtwolame + v4l:libv4l2 + vaapi + vdpau + vidstab:libvidstab + vorbis:libvorbis + vpx:libvpx + vulkan + webp:libwebp + x264:libx264 + x265:libx265 + +xml:libxml2 + xvid:libxvid + zeromq:^libzmq # no multilib + zimg:libzimg + +zlib + zvbi:libzvbi +) +use() { + local f=" $1 " + [[ " ${USE} " == *"${f}"* ]] +} +use_enable() { + local flag="$1" opt="${2:-$1}" + if use "${flag}"; then + printf -- '--enable-%s' "${opt}" + else + printf -- '--disable-%s' "${opt}" + fi +} +multilib_native_use_enable() { + local flag="$1" opt="${2:-$1}" + use_enable "${flag}" "${opt}" +} + +src_prepare() { + tar -xf ${distdir}/${sources[0]} --strip-components=1 + tar -xf ${distdir}/${sources[1]} + for _patch in patches/*; do + patch -p1 -i ${_patch} + done +} + +ffmpeg_build_optmap() { + local -n _map_ref="$1" # nameref: FFMPEG_IUSE_MAP + local -n _out_ref="$2" # nameref: 输出数组 conf_opts + + local v flag_raw flag license opt mod + local -A optmap=() licensemap=() + + for v in "${_map_ref[@]}"; do + # ebuild: [[ ${v} =~ \+?([^:]+):?([^@]*)@?(.*) ]] + # 例: + # "+drm:libdrm" + # "openssl:openssl,!gnutls@v3ifgpl" + # "fdk:libfdk-aac@nonfree" + if [[ ! "${v}" =~ ^\+?([^:]+):?([^@]*)@?(.*)$ ]]; then + echo "bad map entry: ${v}" >&2 + return 1 + fi + + flag_raw="${BASH_REMATCH[1]}" # 不含前导 + + flag="${flag_raw}" + opt="${BASH_REMATCH[2]}" + license="${BASH_REMATCH[3]}" + + # 省略 opt 列表则默认等于 flag + [[ -n "${opt}" ]] || opt="${flag}" + + # 逗号分隔的 opt 列表 + local optlist="${opt//,/ }" + for opt in ${optlist}; do + mod="${opt:0:1}" + # ebuild: v=${v#[\!\^]} + opt="${opt#!}" + opt="${opt#^}" + + if [[ "${mod}" == "!" ]]; then + # override: 若 flag enabled,则强制 disable 该 opt + if use "${flag}"; then + optmap["${opt}"]="--disable-${opt}" + unset 'licensemap["'"${opt}"'"]' || true + fi + else + # 若该 opt 尚未被写入,才生成(避免重复/被前面覆盖) + if [[ -z "${optmap["${opt}"]+x}" ]]; then + if [[ "${mod}" == "^" ]]; then + optmap["${opt}"]="$(multilib_native_use_enable "${flag}" "${opt}")" + else + optmap["${opt}"]="$(use_enable "${flag}" "${opt}")" + fi + if use "${flag}"; then + licensemap["${opt}"]="${license}" + fi + fi + fi + done + done + + # 处理 license 聚合开关(ebuild:for license in "${licensemap[@]}") + local lic + for lic in "${licensemap[@]}"; do + case "${lic}" in + v3ifgpl) + use gpl || continue + ;& # fallthrough(bash >=4) + v3) + optmap["v3"]="--enable-version3" + ;; + nonfree) + use gpl && optmap["nonfree"]="--enable-nonfree" + ;; + esac + done + + # 输出:把 optmap 的值都塞进 _out_ref(顺序不保证;需要稳定顺序可再排序) + local k + for k in "${!optmap[@]}"; do + _out_ref+=( "${optmap[$k]}" ) + done +} + +src_build() { + sed -i '/cflags -fdiagnostics-color/d' configure + + local prefix="/usr" + local conf_args=( + --prefix="${prefix}" + --libdir="${prefix}"/lib + --shlibdir="${prefix}"/lib + --mandir="${prefix}"/share/man + --docdir=/usr/share/doc/${pkgname}-${pkgver}/html + + --disable-stripping + --disable-debug + --disable-optimizations + --optflags=' ' + + # basic defaults that should not really need a USE + --enable-iconv + --enable-pic + --enable-shared + --disable-static + --enable-manpages + --disable-podpages + --disable-txtpages + # disabled primarily due to being unpackaged + --disable-decklink + --disable-libaribcaption + --disable-libdavs2 + --disable-libklvanc + --disable-liblcevc-dec + --disable-libmysofa + --disable-libopenvino + --disable-libshine + --disable-libtls + --disable-libuavs3d + --disable-libvvenc + --disable-libxavs + --disable-libxavs2 + --disable-libxevd + --disable-libxeve + --disable-pocketsphinx + --disable-rkmpp + --disable-vapoursynth + + # disabled for other or additional reasons + --disable-cuda-nvcc # prefer cuda-llvm for less issues + --disable-libcelt # obsolete (bug #664158) + --disable-libglslang # prefer USE=shaderc (bug #918989,#920283,#922333) + --disable-liblensfun # https://trac.ffmpeg.org/ticket/9112 (abandoned?) + --disable-libmfx # prefer libvpl for USE=qsv + --disable-libnpp # deprecated and not supported for cuda 13.0+ + --disable-libopencv # leaving for later due to circular opencv[ffmpeg] + --disable-librist # librist itself needs attention first (bug #822012) + --disable-libtensorflow # causes headaches, and is gone + --disable-libtorch # support may need special attention (bug #936127) + --disable-libvmaf # use ffmpeg-8+ instead, needs old vmaf (bug#968554) + --disable-mbedtls # messy with slots, tests underlinking issues + --disable-mmal # prefer USE=soc + --disable-omx # unsupported (bug #653386) + --disable-omx-rpi # ^ + ) + + ffmpeg_build_optmap FFMPEG_IUSE_MAP conf_args + leaf_info "${conf_args[*]}" + + ./configure "${conf_args[@]}" + make V=1 +} + +src_check() { + local -x LD_LIBRARY_PATH=$(printf %s: "${srcdir}"/lib*)${LD_LIBRARY_PATH} + make V=1 -k fate +} + +src_install() { + make DESTDIR="${pkgdir}" install +} + +# vim:ft=sh syn=sh et sw=2: