diff options
-rw-r--r-- | .SRCINFO | 94 | ||||
-rw-r--r-- | PKGBUILD | 258 | ||||
-rw-r--r-- | vmaf-model-path.patch | 13 |
3 files changed, 365 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..08446e93040d --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,94 @@ +pkgbase = ffmpeg-obs + pkgdesc = Complete solution to record, convert and stream audio and video with modification for OBS Studio + pkgver = 4.4.1 + pkgrel = 1 + url = https://ffmpeg.org/ + arch = i686 + arch = x86_64 + arch = aarch64 + license = GPL3 + makedepends = amf-headers + makedepends = avisynthplus + makedepends = clang + makedepends = ffnvcodec-headers + makedepends = git + makedepends = ladspa + makedepends = nasm + depends = alsa-lib + depends = aom + depends = bzip2 + depends = fontconfig + depends = fribidi + depends = gmp + depends = gnutls + depends = gsm + depends = jack + depends = lame + depends = libass.so + depends = libavc1394 + depends = libbluray.so + depends = libdav1d.so + depends = libdrm + depends = libfreetype.so + depends = libiec61883 + depends = libmodplug + depends = libpulse + depends = librav1e.so + depends = libraw1394 + depends = librsvg-2.so + depends = libsoxr + depends = libssh + depends = libtheora + depends = libva.so + depends = libva-drm.so + depends = libva-x11.so + depends = libvdpau + depends = libvidstab.so + depends = libvorbisenc.so + depends = libvorbis.so + depends = libvpx.so + depends = libwebp + depends = libx11 + depends = libx264.so + depends = libx265.so + depends = libxcb + depends = libxext + depends = libxml2 + depends = libxv + depends = libxvidcore.so + depends = libzimg.so + depends = opencore-amr + depends = openjpeg2 + depends = opus + depends = sdl2 + depends = speex + depends = srt + depends = v4l-utils + depends = xz + depends = zlib + depends = librist + depends = libmfx + depends = svt-av1 + depends = vmaf + optdepends = avisynthplus: AviSynthPlus support + optdepends = ladspa: LADSPA filters + optdepends = nvidia-utils: Nvidia NVDEC/NVENC support + optdepends = intel-media-sdk: Intel QuickSync support + provides = ffmpeg + provides = libavcodec.so + provides = libavdevice.so + provides = libavfilter.so + provides = libavformat.so + provides = libavutil.so + provides = libpostproc.so + provides = libswresample.so + provides = libswscale.so + conflicts = ffmpeg + source = ffmpeg::git+https://git.ffmpeg.org/ffmpeg.git#tag=7e0d640edf6c3eee1816b105c2f7498c4f948e74 + source = obs-deps::git+https://github.com/obsproject/obs-deps.git#tag=2021-11-15 + source = vmaf-model-path.patch + sha256sums = SKIP + sha256sums = SKIP + sha256sums = 8dff51f84a5f7460f8893f0514812f5d2bd668c3276ef7ab7713c99b71d7bd8d + +pkgname = ffmpeg-obs diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..e1e916f6e326 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,258 @@ +# Maintainer: tytan652 <tytan652 at tytanium dot xyz> + +## About ffmpeg-obs + +# OBS Project actually patch FFmpeg to fix some issues and also add RIST support starting from 27.2. +# So I created ffmpeg-obs, a ffmpeg package that ensure that you have those. +# If you really want to use another ffmpeg package with obs-studio-tytan652: +# - Add cherry-pick from ffmpeg-obs except if you are using a git package. +# - Add obs-deps FFmpeg patches. +# - Add librist as an dependency and --enable-librist flag to the configure command except is you are using a full package. +# - Add ffmpeg-obs to the provided packages, so it acts like a drop-in replacement for ffmpeg-obs. + +pkgname=ffmpeg-obs +pkgver=4.4.1 +pkgrel=1 +pkgdesc='Complete solution to record, convert and stream audio and video with modification for OBS Studio' +arch=('i686' 'x86_64' 'aarch64') +url=https://ffmpeg.org/ +license=(GPL3) +depends=( + alsa-lib + aom + bzip2 + fontconfig + fribidi + gmp + gnutls + gsm + jack + lame + libass.so + libavc1394 + libbluray.so + libdav1d.so + libdrm + libfreetype.so + libiec61883 + libmodplug + libpulse + librav1e.so + libraw1394 + librsvg-2.so + libsoxr + libssh + libtheora + libva.so + libva-drm.so + libva-x11.so + libvdpau + libvidstab.so + libvorbisenc.so + libvorbis.so + libvpx.so + libwebp + libx11 + libx264.so + libx265.so + libxcb + libxext + libxml2 + libxv + libxvidcore.so + libzimg.so + opencore-amr + openjpeg2 + opus + sdl2 + speex + srt + v4l-utils + xz + zlib + + # AUR packages + librist +) +makedepends=( + amf-headers + avisynthplus + clang + ffnvcodec-headers + git + ladspa + nasm +) +optdepends=( + 'avisynthplus: AviSynthPlus support' + 'ladspa: LADSPA filters' + 'nvidia-utils: Nvidia NVDEC/NVENC support' +) +provides=( + ffmpeg + libavcodec.so + libavdevice.so + libavfilter.so + libavformat.so + libavutil.so + libpostproc.so + libswresample.so + libswscale.so +) +conflicts=(ffmpeg) +_tag=7e0d640edf6c3eee1816b105c2f7498c4f948e74 +_deps_tag=2021-11-15 # Yes, they made the tag wrong, it was made on 2021-12-15 +source=( + "ffmpeg::git+https://git.ffmpeg.org/ffmpeg.git#tag=${_tag}" + "obs-deps::git+https://github.com/obsproject/obs-deps.git#tag=${_deps_tag}" + "vmaf-model-path.patch" +) +sha256sums=( + "SKIP" + "SKIP" + "8dff51f84a5f7460f8893f0514812f5d2bd668c3276ef7ab7713c99b71d7bd8d" +) + +if [[ $CARCH == 'x86_64' ]]; then + CONFIG="--enable-lto" + + depends+=('libmfx') + CONFIG="$CONFIG --enable-libmfx" + depends+=('svt-av1') + CONFIG="$CONFIG --enable-libsvtav1" + + optdepends+=('intel-media-sdk: Intel QuickSync support') +else + CONFIG="--disable-lto" +fi + +if [[ $CARCH == "i686" || $CARCH == "x86_64" ]]; then + depends+=('vmaf') + CONFIG="$CONFIG --enable-libvmaf" +fi + +if [[ $CARCH == 'aarch64' ]]; then + CONFIG="$CONFIG --host-cflags=\"-fPIC\"" +fi + +pkgver() { + cd ffmpeg + + git describe --tags | sed 's/^n//' +} + +prepare() { + cd ffmpeg + + ### Arch Linux changes + + ## To fix nvenc on older gpus + # avcodec/nvenc: fix lossless tuning logic + # https://github.com/FFmpeg/FFmpeg/commit/988f2e9eb063db7c1a678729f58aab6eba59a55b + git cherry-pick -n 988f2e9eb063db7c1a678729f58aab6eba59a55b + + ## Change default vmaf model path to Arch defaults + patch -Np1 -i "${srcdir}"/vmaf-model-path.patch + + ### OBS changes + + ## To fix crashes when VAAPI settings are wrong + # avcodec/vaapi_encode: Fix segfault upon closing uninitialized encoder + # https://github.com/FFmpeg/FFmpeg/commit/d1b47f3bfcc625ca1cae210fc198dcbd54381a88 + git cherry-pick -n d1b47f3bfcc625ca1cae210fc198dcbd54381a88 + + ## Patch for FFmpeg from obs-deps repository + + # This patch applies: + # - Fix decoding of certain malformed FLV files + # - Add additional CPU levels for libaom + patch -Np1 -i "${srcdir}"/obs-deps/CI/patches/FFmpeg-4.4.1-OBS.patch + + # avformat/hlsenc: remove unnecessary http/https shutdown status operate + # https://patchwork.ffmpeg.org/project/ffmpeg/patch/20210913021204.22138-1-lq@chinaffmpeg.org/ + patch -Np1 -i "${srcdir}"/obs-deps/CI/patches/FFmpeg-9010.patch + + ## This patch applies: + # - avformat/librist: replace deprecated functions + # https://github.com/FFmpeg/FFmpeg/commit/5274f2f7f8c5e40d18b84055fbb232752bd24f2f + # - avformat/librist: correctly initialize logging_settings + # https://github.com/FFmpeg/FFmpeg/commit/9b15f43cf8c7976fba115da686a990377f7b5ab9 + # - libRIST: allow setting fifo size and fail on overflow + # https://patchwork.ffmpeg.org/project/ffmpeg/patch/20211117141929.1164334-2-gijs@peskens.net/ + patch -Np1 -i "${srcdir}"/obs-deps/CI/patches/FFmpeg-4.4.1-librist.patch + + # Fix "error: unknown type name ‘bool’" made by the patch because stdbool.h is only added through librist from version 0.2.7 + sed -i '49 a #if FF_LIBRIST_VERSION < FF_LIBRIST_VERSION_42\n#include <stdbool.h>\n#endif' libavformat/librist.c + + # Fix some typo made in the patch if built against librist 0.2.6 + sed -i 's/FF_LIBRIST_FIFO_DEFAULT)/FF_LIBRIST_FIFO_DEFAULT_SHIFT)/g' libavformat/librist.c + sed -i 's/fifo_buffer_size/fifo_shift/g' libavformat/librist.c +} + +build() { + cd ffmpeg + + ./configure \ + --prefix=/usr \ + --disable-debug \ + --disable-static \ + --disable-stripping \ + --enable-amf \ + --enable-avisynth \ + --enable-cuda-llvm \ + --enable-fontconfig \ + --enable-gmp \ + --enable-gnutls \ + --enable-gpl \ + --enable-ladspa \ + --enable-libaom \ + --enable-libass \ + --enable-libbluray \ + --enable-libdav1d \ + --enable-libdrm \ + --enable-libfreetype \ + --enable-libfribidi \ + --enable-libgsm \ + --enable-libiec61883 \ + --enable-libjack \ + --enable-libmodplug \ + --enable-libmp3lame \ + --enable-libopencore_amrnb \ + --enable-libopencore_amrwb \ + --enable-libopenjpeg \ + --enable-libopus \ + --enable-libpulse \ + --enable-librav1e \ + --enable-librsvg \ + --enable-libsoxr \ + --enable-libspeex \ + --enable-libsrt \ + --enable-libssh \ + --enable-libtheora \ + --enable-libv4l2 \ + --enable-libvidstab \ + --enable-libvorbis \ + --enable-libvpx \ + --enable-libwebp \ + --enable-libx264 \ + --enable-libx265 \ + --enable-libxcb \ + --enable-libxml2 \ + --enable-libxvid \ + --enable-libzimg \ + --enable-nvdec \ + --enable-nvenc \ + --enable-shared \ + --enable-version3 \ + --enable-librist \ + $CONFIG + + make + make tools/qt-faststart + make doc/ff{mpeg,play}.1 +} + +package() { + make DESTDIR="${pkgdir}" -C ffmpeg install install-man + install -Dm 755 ffmpeg/tools/qt-faststart "${pkgdir}"/usr/bin/ +} diff --git a/vmaf-model-path.patch b/vmaf-model-path.patch new file mode 100644 index 000000000000..abd65cdf730a --- /dev/null +++ b/vmaf-model-path.patch @@ -0,0 +1,13 @@ +diff --git a/libavfilter/vf_libvmaf.c b/libavfilter/vf_libvmaf.c +index 249e50c720..9b791e19b1 100644 +--- a/libavfilter/vf_libvmaf.c ++++ b/libavfilter/vf_libvmaf.c +@@ -72,7 +72,7 @@ typedef struct LIBVMAFContext { + #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM + + static const AVOption libvmaf_options[] = { +- {"model_path", "Set the model to be used for computing vmaf.", OFFSET(model_path), AV_OPT_TYPE_STRING, {.str="/usr/local/share/model/vmaf_v0.6.1.pkl"}, 0, 1, FLAGS}, ++ {"model_path", "Set the model to be used for computing vmaf.", OFFSET(model_path), AV_OPT_TYPE_STRING, {.str="/usr/share/model/vmaf_v0.6.1.pkl"}, 0, 1, FLAGS}, + {"log_path", "Set the file path to be used to store logs.", OFFSET(log_path), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, + {"log_fmt", "Set the format of the log (xml or json).", OFFSET(log_fmt), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, + {"enable_transform", "Enables transform for computing vmaf.", OFFSET(enable_transform), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, |