summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO4
-rw-r--r--PKGBUILD373
2 files changed, 293 insertions, 84 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 08446e93040d..2755210d45ca 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = ffmpeg-obs
- pkgdesc = Complete solution to record, convert and stream audio and video with modification for OBS Studio
+ pkgdesc = Complete solution to record, convert and stream audio and video with fixes for OBS Studio. And various options in the PKGBUILD
pkgver = 4.4.1
- pkgrel = 1
+ pkgrel = 2
url = https://ffmpeg.org/
arch = i686
arch = x86_64
diff --git a/PKGBUILD b/PKGBUILD
index e1e916f6e326..7b4a9dbed2cc 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,19 +1,64 @@
# 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.
+# I really wanted to not do this but some fixes are needed, so I did my best to add those "feature-set options".
+# They allow you to build ffmpeg with feature-set based on other ffmpeg packages from AUR.
+
+### Feature-set options
+### WARNING: There is no arch check so don't enable one without knowing if the feature-set is compatible with your arch.
+### The license could change to nonfree for some options.
+### NOTE: Some AUR helper may not like to change it just before building, so you can set those variables in your makepkg config.
+### Related wiki page: https://wiki.archlinux.org/title/Makepkg#Configuration
+
+## Add changes from ffmpeg-full
+## Enable everything except NDI and CUDA changes (enable them manually if you want them)
+if [[ -z "$FFMPEG_OBS_FULL" ]]; then
+ FFMPEG_OBS_FULL=OFF
+fi
+
+## Based on changes from ffmpeg-cuda
+## If 'ON', CUDA compilation is made with Nvidia CUDA Compiler, this is what ffmpeg-cuda provides. (nonfree option)
+## If 'OFF', CUDA compilation is made with clang (without cuda package), this is what upstream package provides.
+if [[ -z "$FFMPEG_OBS_CUDA" ]]; then
+ FFMPEG_OBS_CUDA=OFF
+fi
+
+## Enable debugging symbols
+if [[ -z "$FFMPEG_OBS_DEBUG" ]]; then
+ FFMPEG_OBS_DEBUG=OFF
+fi
+
+## Add changes from ffmpeg-decklink (nonfree option)
+if [[ -z "$FFMPEG_OBS_DECKLINK" ]]; then
+ FFMPEG_OBS_DECKLINK=OFF
+fi
+
+## Add changes from ffmpeg-libfdk_aac (nonfree option)
+if [[ -z "$FFMPEG_OBS_LIBFDK_AAC" ]]; then
+ FFMPEG_OBS_LIBFDK_AAC=OFF
+fi
+
+## Add changes from ffmpeg-ndi (nonfree option)
+if [[ -z "$FFMPEG_OBS_NDI" ]]; then
+ FFMPEG_OBS_NDI=OFF
+fi
+
+## Add SVT related changes from ffmpeg-full because ffmpeg-svt is out of date
+if [[ -z "$FFMPEG_OBS_SVT" ]]; then
+ FFMPEG_OBS_SVT=OFF
+fi
+
+## Add changes from ffmpeg-vulkan
+if [[ -z "$FFMPEG_OBS_VULKAN" ]]; then
+ FFMPEG_OBS_VULKAN=OFF
+fi
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'
+pkgrel=2
+pkgdesc='Complete solution to record, convert and stream audio and video with fixes for OBS Studio. And various options in the PKGBUILD'
arch=('i686' 'x86_64' 'aarch64')
url=https://ffmpeg.org/
license=(GPL3)
@@ -70,9 +115,6 @@ depends=(
v4l-utils
xz
zlib
-
- # AUR packages
- librist
)
makedepends=(
amf-headers
@@ -108,38 +150,238 @@ source=(
"vmaf-model-path.patch"
)
sha256sums=(
- "SKIP"
- "SKIP"
- "8dff51f84a5f7460f8893f0514812f5d2bd668c3276ef7ab7713c99b71d7bd8d"
+ 'SKIP'
+ 'SKIP'
+ '8dff51f84a5f7460f8893f0514812f5d2bd668c3276ef7ab7713c99b71d7bd8d'
)
-if [[ $CARCH == 'x86_64' ]]; then
- CONFIG="--enable-lto"
+if [[ $FFMPEG_OBS_FULL == 'ON' ]]; then
+ FFMPEG_OBS_DEBUG=ON
+ FFMPEG_OBS_DECKLINK=ON
+ FFMPEG_OBS_LIBFDK_AAC=ON
+ FFMPEG_OBS_SVT=ON
+ FFMPEG_OBS_VULKAN=ON
+fi
- depends+=('libmfx')
- CONFIG="$CONFIG --enable-libmfx"
- depends+=('svt-av1')
- CONFIG="$CONFIG --enable-libsvtav1"
+### Prepare configure and dependencies
+## Add upstream common args and feature
+_args=(
+ --prefix=/usr
+ --disable-static
+ --disable-stripping
+ --enable-amf
+ --enable-avisynth
+ --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
+)
+
+## Force enable autodetect feature built with upstream
+_args+=(
+ --enable-alsa
+ --enable-bzlib
+ --enable-iconv
+ --enable-libxcb-shm
+ --enable-libxcb-xfixes
+ --enable-libxcb-shape
+ --enable-lzma
+ --enable-sdl2
+ --enable-xlib
+ --enable-zlib
+ --enable-ffnvcodec
+ --enable-nvdec
+ --enable-nvenc
+ --enable-v4l2-m2m
+ --enable-vaapi
+ --enable-vdpau
+)
+## Add OBS Studio needed feature
+_args+=(--enable-librist)
+depends+=('librist')
+
+## Add upstream feature for x86_64 build
+if [[ $CARCH == 'x86_64' ]]; then
+ _args+=(--enable-lto --enable-libmfx --enable-libsvtav1)
+ depends+=('libmfx' 'svt-av1')
optdepends+=('intel-media-sdk: Intel QuickSync support')
else
- CONFIG="--disable-lto"
+ _args+=(--disable-lto)
fi
+## Add upstream feature for i686 and x86_64 build
if [[ $CARCH == "i686" || $CARCH == "x86_64" ]]; then
- depends+=('vmaf')
- CONFIG="$CONFIG --enable-libvmaf"
+ _args+=(--enable-libvmaf)
+ depends+=(vmaf)
fi
+## Add args for aarch64 build
if [[ $CARCH == 'aarch64' ]]; then
- CONFIG="$CONFIG --host-cflags=\"-fPIC\""
+ _args+=(--host-cflags=-fPIC)
fi
-pkgver() {
- cd ffmpeg
+## Check feature-set options
+_nonfree_enabled=OFF
- git describe --tags | sed 's/^n//'
-}
+if [[ $FFMPEG_OBS_CUDA == 'ON' ]]; then
+ _nonfree_enabled=ON
+ depends+=(cuda)
+ _args+=(
+ --enable-cuda-nvcc --enable-libnpp --enable-cuvid --disable-cuda-llvm
+ --nvccflags='-gencode arch=compute_52,code=sm_52 -O2'
+ )
+else
+ _args+=(--enable-cuda-llvm --disable-cuvid)
+fi
+
+if [[ $FFMPEG_OBS_DEBUG == 'ON' ]]; then
+ _args+=(--enable-debug)
+else
+ _args+=(--disable-debug)
+fi
+
+if [[ $FFMPEG_OBS_DECKLINK == 'ON' ]]; then
+ _nonfree_enabled=ON
+ makedepends+=('decklink-sdk')
+ _args+=(--enable-decklink)
+fi
+
+if [[ $FFMPEG_OBS_LIBFDK_AAC == 'ON' ]]; then
+ _nonfree_enabled=ON
+ depends+=(libfdk-aac)
+ _args+=(--enable-libfdk-aac)
+fi
+
+if [[ $FFMPEG_OBS_NDI == 'ON' ]]; then
+ _nonfree_enabled=ON
+ depends+=('ndi-sdk')
+ source+=(
+ "Revert-lavd-Remove-libndi_newtek.patch::https://framagit.org/tytan652/ffmpeg-ndi-patch/-/raw/master/Revert-lavd-Remove-libndi_newtek.patch?inline=false"
+ "libndi_newtek_common.h::https://framagit.org/tytan652/ffmpeg-ndi-patch/-/raw/master/libavdevice/libndi_newtek_common.h?inline=false"
+ "libndi_newtek_dec.c::https://framagit.org/tytan652/ffmpeg-ndi-patch/-/raw/master/libavdevice/libndi_newtek_dec.c?inline=false"
+ "libndi_newtek_enc.c::https://framagit.org/tytan652/ffmpeg-ndi-patch/-/raw/master/libavdevice/libndi_newtek_enc.c?inline=false"
+ )
+ sha256sums+=(
+ '5a37c295d01ae02f02b366c3ba4867d27bc3ac29c1420472fbe8e4d7bca3bd4c'
+ '462e984a7cb3d0af17b0ea0eb2a010aee2f79a3e77c2055fdfd760163dd75fa4'
+ '3c6dea7583d79911e9ea198c35b1b56830b85eea84e49d63c2d5c03af5210eca'
+ '83cc714edc8d1c37ffabd2ee17960d6ed91a1d019bd43d01383f84eea28e4fbb'
+ )
+ _args+=(--enable-libndi_newtek)
+fi
+
+if [[ $FFMPEG_OBS_SVT == 'ON' ]]; then
+ depends+=(svt-vp9 svt-hevc)
+ _svt_hevc_ver='33ca9aa8a2a2d28022d3fc03704e99ce01828376'
+ _svt_vp9_ver='abd5c59c06d686eae57ef4e6f899c601f791d055'
+ source+=(
+ "020-ffmpeg-add-svt-hevc-g${_svt_hevc_ver:0:7}.patch"::"https://raw.githubusercontent.com/OpenVisualCloud/SVT-HEVC/${_svt_hevc_ver}/ffmpeg_plugin/0001-lavc-svt_hevc-add-libsvt-hevc-encoder-wrapper.patch"
+ "030-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"
+ "040-ffmpeg-add-svt-vp9-g${_svt_vp9_ver:0:7}.patch"::"https://raw.githubusercontent.com/OpenVisualCloud/SVT-VP9/${_svt_vp9_ver}/ffmpeg_plugin/master-0001-Add-ability-for-ffmpeg-to-run-svt-vp9.patch"
+ )
+ sha256sums+=(
+ '740dc9838aa47daa9f9b107178e53e384344f4c6f90865bd7e3af189257da544'
+ '1499e419dda72b1604dc5e3959668f3843292ff56bfba78734e31510ba576de0'
+ 'b7d722dfce20b73e9d5c73d55ffe041bbdc92a3c4a5c5d766b6b3040671b4052'
+ )
+ _args+=(--enable-libsvtvp9 --enable-libsvthevc)
+fi
+
+if [[ $FFMPEG_OBS_VULKAN == 'ON' ]]; then
+ depends+=(vulkan-icd-loader glslang spirv-tools)
+ makedepends+=(vulkan-headers)
+ _args+=(--enable-vulkan --enable-libglslang)
+fi
+
+if [[ $FFMPEG_OBS_FULL == 'ON' ]]; then
+ _nonfree_enabled=ON
+ # uavs3d >= 1.1.41 is required by ffmpeg so switch to uavs3d-git
+ # lensfun >= 0.3.95 seems to needed with ffmpeg so switch to lensfun-git
+ depends+=(
+ sndio 'chromaprint-fftw' frei0r-plugins libgcrypt
+ aribb24 libbs2b libcaca celt libcdio-paranoia codec2
+ 'davs2' libdc1394 'flite1-patched' libgme libilbc 'libklvanc-git'
+ kvazaar 'lensfun-git' 'openh264' libopenmpt librabbitmq-c rubberband
+ rtmpdump 'shine' smbclient snappy tensorflow tesseract
+ twolame 'uavs3d-git' 'vo-amrwbenc' 'xavs' 'xavs2' zeromq
+ zvbi lv2 lilv libmysofa openal ocl-icd libgl
+ 'pocketsphinx' vapoursynth libomxil-bellagio 'rockchip-mpp'
+ )
+ makedepends+=(opencl-headers)
+ _args+=(
+ --enable-sndio --disable-rpath --enable-gray --enable-chromaprint --enable-frei0r --enable-gcrypt
+ --enable-libaribb24 --enable-libbs2b --enable-libcaca --enable-libcelt --enable-libcdio --enable-libcodec2
+ --enable-libdavs2 --enable-libdc1394 --enable-libflite --enable-libgme --enable-libilbc --enable-libklvanc
+ --enable-libkvazaar --enable-liblensfun --enable-libopenh264 --enable-libopenmpt --enable-librabbitmq --enable-librubberband
+ --enable-librtmp --enable-libshine --enable-libsmbclient --enable-libsnappy --enable-libtensorflow --enable-libtesseract
+ --enable-libtwolame --enable-libuavs3d --enable-libvo-amrwbenc --enable-libxavs --enable-libxavs2 --enable-libzmq
+ --enable-libzvbi --enable-lv2 --enable-libmysofa --enable-openal --enable-opencl --enable-opengl
+ --enable-pocketsphinx --enable-vapoursynth --enable-omx --enable-rkmpp
+ )
+ _args+=(--enable-avresample)
+else
+ _args+=(--disable-sndio) # sndio is not present when upstream package is built
+fi
+
+## Manage extra flags
+if [[ $FFMPEG_OBS_FULL == 'ON' ]] && [[ $FFMPEG_OBS_CUDA == 'ON' ]]; then
+ _args+=(--extra-cflags='-I/opt/cuda/include -I/usr/include/tensorflow')
+ _args+=(--extra-ldflags='-L/opt/cuda/lib64')
+elif [[ $FFMPEG_OBS_FULL == 'ON' ]]; then
+ _args+=(--extra-cflags='-I/usr/include/tensorflow')
+elif [[ $FFMPEG_OBS_CUDA == 'ON' ]]; then
+ _args+=(--extra-cflags='-I/opt/cuda/include')
+ _args+=(--extra-ldflags='-L/opt/cuda/lib64')
+fi
+
+## Check if nonfree licence is enabled
+if [[ $_nonfree_enabled == 'ON' ]]; then
+ license=('custom: nonfree and unredistributable')
+ source+=("license_if_nonfree_enabled.txt")
+ sha256sums+=("04a7176400907fd7db0d69116b99de49e582a6e176b3bfb36a03e50a4cb26a36")
+ _args+=(--enable-nonfree)
+fi
prepare() {
cd ffmpeg
@@ -187,65 +429,28 @@ prepare() {
# 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
+
+ ## NDI changes if enabled
+ if [[ $FFMPEG_OBS_NDI == 'ON' ]]; then
+ patch -Np1 -i "${srcdir}"/Revert-lavd-Remove-libndi_newtek.patch
+ printf 'Copying libndi missing file\n'
+ cp "${srcdir}"/libndi_newtek_* libavdevice/
+ fi
+
+ ## SVT changes if enabled
+ if [[ $FFMPEG_OBS_SVT == 'ON' ]]; then
+ rm -f "libavcodec/"libsvt_{hevc,vp9}.c
+ sed -E -n 's/general.texi/general_contents.texi/g' "${srcdir}/030-ffmpeg-add-svt-hevc-docs-g${_svt_hevc_ver:0:7}.patch" > "030-ffmpeg-add-svt-hevc-docs-g${_svt_hevc_ver:0:7}.patch"
+ patch -Np1 -i "${srcdir}/020-ffmpeg-add-svt-hevc-g${_svt_hevc_ver:0:7}.patch"
+ patch -Np1 -i "030-ffmpeg-add-svt-hevc-docs-g${_svt_hevc_ver:0:7}.patch"
+ patch -Np1 -i "${srcdir}/040-ffmpeg-add-svt-vp9-g${_svt_vp9_ver:0:7}.patch"
+ fi
}
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
+ ./configure "${_args[@]}"
make
make tools/qt-faststart
@@ -255,4 +460,8 @@ build() {
package() {
make DESTDIR="${pkgdir}" -C ffmpeg install install-man
install -Dm 755 ffmpeg/tools/qt-faststart "${pkgdir}"/usr/bin/
+
+if [[ $_nonfree_enabled == 'ON' ]]; then
+ install -D -m644 license_if_nonfree_enabled.txt "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
+fi
}