Как я конфигурил кастомный ffmpeg из исходников в Ubuntu 24.04

Форум технической поддержки


Моё видео, собрать кастомный ffmpeg из исходников в Ubuntu 24.04

Моё видео, автоматической установки стрим-сервер FFmpeg + NGINX-RTMP с платой захвата DeckLink + GPU Intel Arc + GPU NVidia

Скрипты, автоматической установки и конфигурирования:

0 скрипт пред-установки и конфигурирования ОС

1 скрипт установки репозиториев и драйверов для GPU

2 скрипт установки и конфигурирования FFmpeg

3 скрипт установки и конфигурирования служб samba (SMB v2.0/3.0) и rc.local

4 скрипт установки и конфигурирования NGINX

5 скрипт установки и конфигурирования служб для управления nginx в ОС

все эти скрипты в одном архиве, включая SDK-библиотеки платы Видео захвата Blackmagic DeckLink, для сборки FFmpeg с поддержкой этих плат захвата


Итак, теперь расшифруем это всё, что делают эти скрипты автоматической установки или установим всё пошагово, без них, ручками:

В данном случае рассмотрим сборку кастомного FFmpeg (скрипты установки №№ 0, 1 и 2)

- первым делом подготовимся

1. разрешим суперпользователя root и перейдём на него:

$ sudo passwd root

$ su

обновим ОС

apt update && apt full-upgrade && apt autoremove && apt autoclean

перезагрузимся

reboot

подключим проприетарные репозитории

apt install -y software-properties-common

Обновим базу репозиториев

apt update

установим базовые пакеты в ОС

apt install -y mc net-tools openssh-server inxi wget p7zip-full yasm nasm nmap rtmpdump tclsh tcl git dkms dpkg-dev build-essential make cmake unzip libtool libc6 libc6-dev libnuma1 libnuma-dev g++ gcc gawk gzip curl gnupg2 ca-certificates lsb-release ubuntu-keyring autoconf automake

Установим репозитории vulkan

wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | tee /etc/apt/trusted.gpg.d/lunarg.asc

wget -qO /etc/apt/sources.list.d/lunarg-vulkan-noble.list https://packages.lunarg.com/vulkan/lunarg-vulkan-noble.list

Установим репозитории драйверов GPU Intel

add-apt-repository -y ppa:kobuk-team/intel-graphics

Установим репозитории драйверов GPU NVidia

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb

dpkg -i cuda-keyring_1.1-1_all.deb

Установим репозитории OBS-Studio

add-apt-repository -y ppa:obsproject/obs-studio

Обновим базу репозиториев

apt update

Установим пакеты драйверов и библиотек Vulkan и GPU Intel

apt install -y vulkan-tools vulkan-sdk libze-intel-gpu1 libze1 intel-metrics-discovery intel-opencl-icd clinfo intel-gsc intel-media-va-driver-non-free libmfx-gen1.2 libvpl2 libvpl-tools libva-glx2 va-driver-all vainfo libze-dev intel-ocloc libze-intel-gpu-raytracing libvdpau-va-gl1 libvdpau-dev libva-dev

добавим наших пользователей в группу render

gpasswd -a user render

gpasswd -a root render

Установим общие пакеты праграмм и библиотек для разработки (девелопер/SDK-библиотеки)

apt install -y ffmpeg obs-studio rtmpdump libssl-dev libxslt1-dev libgeoip-dev fcgiwrap libcgi-fast-perl libfcgi-perl libfcgi0ldbl libcgi-pm-perl libdata-dump-perl libdbd-mysql-perl libdbi-perl libdevel-symdump-perl libdpkg-perl perl perl-base perl-openssl-defaults libbsd-resource-perl libgetopt-argvfile-perl libhtml-template-perl libperl-dev libset-scalar-perl libtext-unidecode-perl libxml2 libxml2-dev libxslt1-dev libxslt1.1 libxml-libxml-perl libxml-namespacesupport-perl libxml-sax-base-perl libxml-sax-expat-perl libxml-sax-perl libyaml-syck-perl zlib1g-dev nasm libchromaprint-dev libfrei0r-ocaml-dev frei0r-plugins-dev libgmp-dev libgmp-ocaml-dev libgnutls28-dev libladspa-ocaml-dev libaom-dev liblilv-dev libass-dev libbluray-dev libbs2b-dev libcodec2-dev libdav1d-dev libdc1394-dev libfdk-aac-dev libfdkaac-ocaml-dev libgme-dev libgsm1-dev libvpl-dev libmp3lame-dev libmp3lame-ocaml-dev libmysofa-dev libopenmpt-dev libopus-ocaml-dev libopus-dev libplacebo-dev libpulse-ocaml-dev libpulse-dev librsvg2-dev librubberband-dev libshine-dev libshine-ocaml-dev libsnappy-dev libsoxr-dev libssh-dev libspeex-dev libspeex-ocaml-dev libsrt-gnutls-dev libsvtav1enc-dev libsvtav1-dev libtheora-ocaml-dev libtheora-dev libtwolame-dev libvidstab-dev libvpx-dev libx265-dev libx264-dev libxvidcore-dev libzimg-dev libzmq3-dev libzvbi-dev libopenal-dev ocl-icd-opencl-dev libjack-jackd2-dev libcdio-dev libcdio-paranoia-dev libsdl2-dev libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libopenjp2-7-dev flite1-dev libxcb-cursor0 libavahi-compat-libdnssd1

Установим пакеты драйверов и библиотек Nvidia/CUDA Toolkit

apt install -y cuda-toolkit-12-9

apt install -y cuda-drivers

добавим их в индексацию наших пользователей

echo 'export CUDA_HOME=/usr/local/cuda' >> /home/user/.bashrc

echo 'export PATH=${CUDA_HOME}/bin:${PATH}' >> /home/user/.bashrc

echo 'export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:$LD_LIBRARY_PATH' >> /home/user/.bashrc

echo 'export CUDA_HOME=/usr/local/cuda' >> /root/.bashrc

echo 'export PATH=${CUDA_HOME}/bin:${PATH}' >> /root/.bashrc

echo 'export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:$LD_LIBRARY_PATH' >> /root/.bashrc

Установим драйвер платы захвата Decklink, и их сайта: https://www.blackmagicdesign.com/support/family/capture-and-playback

скачать нужно ПО "Desktop Video 16.2" для Linux. Распаковываем, От туда нам нужно только три файла: desktopvideo_16.2a1_amd64.deb, desktopvideo-gui_16.2a1_amd64.deb, mediaexpress_3.8.3a1_amd64.deb

копируем их по пути: /usr/local/src/Blackmagic/16_2/*

переходим туда и устанавливаем

cd /usr/local/src/Blackmagic/16_2/

dpkg -i *.deb

далее, от туда-же, с их сайта: https://www.blackmagicdesign.com/support/family/capture-and-playback/ , скачиваем SDK-библиотеки/исходники - "Desktop Video 16.0 SDK" для линукс и "Desktop Video 14.2 SDK" для линукс,

от туда распаковываем каталог -> \Linux\include\* и сохраняем по пути /usr/local/src/Blackmagic/16_0/include и /usr/local/src/Blackmagic/14_2/include, соответственно.

далее создаём каталог

mkdir /usr/local/src/ffmpeg

перегодим в него

cd /usr/local/src/ffmpeg

скачиваем и устанавливаем библиотеку nv-codec-headers

git clone https://git.ffmpeg.org/nv-codec-headers.git

cd /usr/local/src/ffmpeg/nv-codec-headers/

make install

копируем скомпилированную библиотеку ffnvcodec.pc по правильному пути, к библиотекам NVidia

cp /usr/local/lib/pkgconfig/ffnvcodec.pc /usr/lib/pkgconfig/ffnvcodec.pc

далее из пути /usr/local/src/Blackmagic/16_0/include копирум файлы в /usr/local/include

далее из пути /usr/local/src/Blackmagic/14_2/include копирум файлы в /usr/local/include с заменой.

перегружаемся

reboot

далее переходим в каталог

cd /usr/local/src/ffmpeg/

скачиваем исходник FFmpeg

wget https://ffmpeg.org/releases/ffmpeg-7.1.4.tar.gz

распаковываем

tar -xvf ffmpeg-7.1.4.tar.gz

бэкапим исходники

tar -czf /usr/local/src/ffmpeg/ffmpeg-7.1.4_file-orig.tar.gz /usr/local/src/ffmpeg/ffmpeg-7.1.4 /usr/local/include

переходим в каталог FFmpeg

cd /usr/local/src/ffmpeg/ffmpeg-7.1.4/

конфигурируем

./configure --enable-decklink --enable-vaapi --enable-nonfree --extra-cflags=-I/usr/local/include/ffnvcodec --extra-ldflags=-L/usr/local/include/ffnvcodec --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --extra-version=romtorwator --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --enable-gnutls --enable-libaom --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libssh --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lv2 --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-frei0r --enable-libx264 --enable-libsrt --enable-libtheora --enable-libbs2b --enable-libwebp --enable-libtwolame --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libbluray --enable-libgsm --enable-ladspa --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfribidi --enable-libgme --enable-libjack --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libvidstab --enable-libzmq --enable-libzvbi --enable-openal --enable-opencl --enable-libvpl --enable-lto=auto --enable-chromaprint --enable-libharfbuzz --enable-libdav1d --enable-libsvtav1 --enable-libzimg --enable-libshaderc --enable-gmp --enable-libplacebo --enable-version3 --enable-cuda --enable-cuvid --enable-nvenc --enable-nvdec --enable-filter=scale_cuda --enable-ffnvcodec --enable-cuda-llvm --enable-cuda-nvcc --enable-vulkan > /usr/local/src/ffmpeg/configure_ffmpeg-7_1_4_file.list

компилируем

make -j 10

Всё, готово !

теперь переходим на сборку установку стрим-сервера NGINX+RTMP (скрипты установки №№ 4 и 5)

если NGINX уже готов, то всё, начинаем работать :) Мы закончили.

Перейти в раздел Линукс

Перейти в раздел Домой