- Эффективное кодирование видео в Linux c Nvidia NVENC: часть 1, общая
- Об NVENC
- Реализация
- Быстрое кодирование видео в Linux c Nvidia NVENC с SDK 7.5 и ffmpeg 3.0.2 на Nvidia GTX 960/970/980
- Технология
- Реализация (FFmpeg)
- Аппаратное обеспечение
- Devilz Linux
- Search This Blog
- How to Enable Nvidia NVENC for OBS in Linux
- Using Nvidia’s NVENC with OBS Studio makes Linux game recording really great
- Блог начинающего линуксоида.
- Страницы
- четверг, 19 января 2017 г.
- Сборка OBS Studio и FFmpeg с поддержкой кодека Nvidia NVENC
Эффективное кодирование видео в Linux c Nvidia NVENC: часть 1, общая
Об NVENC
Nvidia NVENC это технология, позволяющая кодировать видео в H.264 (и H.265 для последних процессоров Maxwell) силами GPU со скоростями несколько сот кадров в секунду (в зависимости от профиля и разрешения). Вендор предоставляет возможность использования этой технологии в виде набора разработчика NVENC SDK.
Реализация
Имеется множество утилит для различных платформ, которые в каком-то виде дают доступ к функционалу SDK. В марте 2015 года вышел релиз ffmpeg, который включил в себя поддержку NVENC. ffmpeg занимает центральное положение среди всего множества свободного и не очень ПО для работы с видео, поэтому с практической точки зрения он наиболее интересен. Этим инструментом можно и обрабатывать видеофайлы (1, 2), и вести потоковое вещание (1, 2). С момента мартовского релиза вышел ещё один, который включил в себя ещё больше опций для кодека nvenc и поддержку H.265 (HEVC).
Сборкой FFmpeg с поддержкой NVENC мы и займёмся.
Развёртывание
Для создания рабочей конфигурации нам потребуется:
- Одна видеокарта Nvidia на ядре Kepler или Maxwell. На мой взгляд самый интересный выбор это GTX 970 — процессор Maxwell второго поколения (GM204) за 300$.
- Один линукс типовой (ubuntu 14.04) на компьютере с видеокартой.
Драйверы и рантайм CUDA
Драйверы и библиотеки установить за раз одним пакетом. Из репозитория лучше ничего не использовать.
На все вопросы уважаемого компьютера следует ответить утвердительно. После установки — перезагрузить.
Заголовочные файлы nvenc
Для сборки приложений с nvenc sdk неободимы некоторые заголовочные файлы. Раньше их необходимо было стягивать из виндовой версии SDK. Но прогресс идёт семимильными шагами и теперь этот файл можно стянуть из примеров в линуксовом SDK. Найдите в примерах (были установлены вместе с рантаймом и драйверами на предыдущем шаге) файлы
nvCPUOPSys.h
nvEncodeAPI.h
nvFileIO.h
NvHWEncoder.h
nvUtils.h
и положите их в /usr/include. Они потребуются только один раз, при сборке ffmpeg. На всех машинах они не нужны.
FFMPEG
Начать его сборку лучше с установки всех сборочных зависимостей.
Я мог что-то забыть, что-то может измениться. Чтобы найти недостающий для сборки файл, не стесняйтесь пользоваться apt-file:
Скачиваем с сайта последнюю версию ffmpeg, распаковываем, конфигурируем, собираем и устанавливаем:
Собираем с libfdk-aac, он точно предпочтительнее имеющегося кодека aac. Кроме прочего, можно заметить опцию —enable-nvenc. В остальном параметры выбраны по мотивам билдспеки пакета libav в самом дистрибутиве ubuntu. После всех манипуляций должен появиться рабочий ffmpeg в /usr/local/bin/ffmpeg.
Применение
Запуск
Опции запуска все точно такие же, как при софтверном кодировании, но только вместо libx264 видеокодек будет называться nvenc (он же nvenc_h264) для h.264 и nvenc_hevc для h.265.
Производительность и качество
Чтобы произвести 1 час видео в 4х качествах с хорошей точностью транскодинга, нужно или потратить примерно 1 час машинного времени двух шестиядерных ксеонов, или чуть более получаса времени десктопа с такой видеокартой. Качество результатов получается неотличимое от программного кодека x264 с аналогичными установками.
Источник
Быстрое кодирование видео в Linux c Nvidia NVENC с SDK 7.5 и ffmpeg 3.0.2 на Nvidia GTX 960/970/980
Данная статья была написана по мотивам статьи Эффективное кодирование видео в Linux c Nvidia NVENC: часть 1, общая, однако имеет свои особенности и в отличие от оригинальной статьи, на момент написания которой не было выпущено патча, о котором пойдет речь дальше, я применил переработанный патч Nvidia Acceleration к FFmpeg 3.0.2, получив помимо энкодера nvenc еще и быстрый фильтр ресайза — nvresize.
В итого я получил возможность аппаратно кодировать видео в H.264 и HEVC при помощи видеокарты Nvidia GTX 960 на достаточно слабом компьютере (Xeon L5420) со скоростью (для H.264), превышающей возможности данного процессора до 10 раз (и в 3 раза относительно Core i7)! Причем на моем любимом Debian 8 Jessie.
Технология
Nvidia NVENC это технология, обеспечивающая кодирование видео в H.264 и HEVC на вычислительных мощностях GPU. Важное замечание: сколь-нибудь качественное и быстрое кодирование на момент написания статьи (май 2016) могут обеспечить только карты второго поколения Maxwell, и для десктопных это: GM206 (GTX 950, GTX 960), GM204 (GTX 970 и GTX 980) (для справки: есть еще дорогие проф.линейки Nvidia Tesla/Quadro/GRID, полный перечень можно найти здесь). Причем NVENC модуль работает с одинаковой скоростью на всех картах и количество CUDA ядер не влияет на производительность, как бы странно это не звучало, поэтому брать старшие версии имеет смысл только если платформа используется (помимо кодирования) для игр, даже более того, карты на GM206 целесообразнее т.к. помимо энкодера, получили еще и аппаратный HEVC декодер. Важное примечание: вся линейка GeForce имеет лицензионное ограничение в 2 одновременных потока. Его можно попробовать обойти методом, указанным во второй части статьи YourChief
Реализация (FFmpeg)
Все многообразие реализаций Nvidia CUDA можно посмотреть по ссылке. От себя хочу сказать что для видео наиболее распространенным является популярный инструмент — FFmpeg. Его мы и будем использовать.
Аппаратное обеспечение
0.7 Гб.
Источник
Devilz Linux
Search This Blog
How to Enable Nvidia NVENC for OBS in Linux
OBS on Linux supports using the Nvidia NVENC for H.264 encoding. To get this working, one must compile ffmpeg wtih nvenc support. Check it out!
– nvidia proprietary driver installed
– kepler or maxwell (or later) nvidia GPU
– OBS Studio 0.14 or later
Step 1:
Grab the nvEncoder header
FFmpeg 3.1.3 and later includes this header so one does not need to download any nvenc sdk from nvidia if building FFmpeg 3.1.3+.
Otherwise:
Download and extract Nvidia nvenc sdk from: https://developer.nvidia.com/nvidia-video-codec-sdk
From that download, copy the file
/Video_Codec_SDK_7.0.1/Samples/nvEncoder/NvEncoder.h
to
/usr/local/include
Step 2:
Download and extract the Nvidia cuda sdk from: https://developer.nvidia.com/cuda-downloads
Step 3:
Configure and the install ffmpeg with:
This may vary wildly by distro, or you may have your own preferred way to compile and build ffmpeg.
Below are debian specific steps using the latest nvidia driver from nvidia.com which will result in a .deb file installed and ffmpeg executable at /usr/local/bin/ffmpeg
Step 4: OBS Setup
In OBS, there will now be an encoder option NVENC H.264. Now the bitrate can be cranked up to blu-ray or better quality for local recording if you have a recent video card. I’ve got mine set at 50000.
Note that NVENC encoding can be used in other apps as well. For instance in openshot, one can use nvenc for encoding videos.
Источник
Using Nvidia’s NVENC with OBS Studio makes Linux game recording really great
I had been meaning to try out Nvidia’s NVENC for a while, but I never really bothered as I didn’t think it would make such a drastic difference in recording gaming videos, but wow does it ever!
I was trying to record a game recently and all other methods I tried made the game performance utterly dive, making it impossible to record it. So I asked for advice and eventually came to this way.
What is NVENC?
It essentially takes away video encoding from the CPU and does it on the GPU instead, and it’s supported on Nvidia Kepler (600) and above.
Pairing up the awesome open source OBS Studio [Official Site] and compiling FFMPEG with support for Nvidia’s NVENC is actually pretty amazing.
Note: While I have fully tested it myself, I am not responsible if you manage to break anything doing it.
After following this guide (copied below in case it vanishes, thanks Dan).
I’ve done a minor edit to the start, as the filename wget downloads is different to what the guide said.
# Download and unzip the NVIDIA Video Codec SDK from https://developer.nvidia.com/nvidia-video-codec-sdk
wget https://developer.nvidia.com/video-sdk-601
unzip unzip video-sdk-601
# Copy the headers files from the SDK so FFmpeg can find them
sudo cp nvidia_video_sdk_6.0.1/Samples/common/inc/*.h /usr/local/include/
# Make sure «Source code» is enabled in System Settings. -> Software & Updates
# Download the build dependencies for FFmpeg
sudo apt-get build-dep ffmpeg
# Install libfdk_aac
sudo apt-get install libfdk-aac-dev
# Download the source for the exact version of FFmpeg you already have installed (not as root)
apt-get source ffmpeg
# Go into the ffmpeg source you just downloaded
cd ffmpeg-2.8.6
# Find out the exact command the ffmpeg was originally built with
ffmpeg -buildconf
# Copy the single line «configuration:» and pass it to «.configure» but add «—enable-nonfree —enable-nvenc —enable-libfdk-aac» on the end
# Mine looks like this:
./configure —prefix=/usr —extra-version=1ubuntu2 —build-suffix=-ffmpeg —toolchain=hardened —libdir=/usr/lib/x86_64-linux-gnu —incdir=/usr/include/x86_64-linux-gnu —cc=cc —cxx=g++ —enable-gpl —enable-shared —disable-stripping —disable-decoder=libopenjpeg —disable-decoder=libschroedinger —enable-avresample —enable-avisynth —enable-gnutls —enable-ladspa —enable-libass —enable-libbluray —enable-libbs2b —enable-libcaca —enable-libcdio —enable-libflite —enable-libfontconfig —enable-libfreetype —enable-libfribidi —enable-libgme —enable-libgsm —enable-libmodplug —enable-libmp3lame —enable-libopenjpeg —enable-libopus —enable-libpulse —enable-librtmp —enable-libschroedinger —enable-libshine —enable-libsnappy —enable-libsoxr —enable-libspeex —enable-libssh —enable-libtheora —enable-libtwolame —enable-libvorbis —enable-libvpx —enable-libwavpack —enable-libwebp —enable-libx265 —enable-libxvid —enable-libzvbi —enable-openal —enable-opengl —enable-x11grab —enable-libdc1394 —enable-libiec61883 —enable-libzmq —enable-frei0r —enable-libx264 —enable-libopencv —enable-nonfree —enable-nvenc —enable-libfdk-aac
# Now build it
make
# And finally install it over the original
sudo make install
It will take a few minutes to compile, but once that’s done, you’re pretty much set.
I was able to quite easily get FFMPEG sorted with NVENC and hook it into OBS Studio. I’m sure there’s probably better guides (share them in the comments!), but I have yet to find one that makes it so damn simple to do. You don’t even need to do much with OBS Studio, other than change the «Encoder» dropdown once this is sorted:
Note: You shouldn’t need to re-compile OBS Studio, as the guide above uses the same version of FFMPEG as you have already.
What I love about OBS Studio, is it also has custom hotkeys you can set yourself like so:
I have it set so pressing «=» will start or stop recording, which is damn handy as practically no games use that button, if they do, i can simply go back and quickly change the key again.
OBS Studio also has profile support, so you can have one profile for recording and one for livestreaming, which is really useful. They ideally need to roll more of the settings into profiles, as currently the amount that’s stored per-profile is limited.
Источник
Блог начинающего линуксоида.
советы, руководства, инструкции.
Страницы
четверг, 19 января 2017 г.
Сборка OBS Studio и FFmpeg с поддержкой кодека Nvidia NVENC
Приветствую! Если вы любите делать игровые стримы или просто снимать хорошие летсплеи в Windows, то наверняка знаете о таком потрясающем кодеке, как Nvidia NVENC. На базе этого кодека создана целая утилита для высококачественной записи игрового процесса на видеокартах Nvidia — Shadow Play. Плюс этот кодек может применяться и в других программах для записи происходящего на экране (к примеру Bandicam). К сожалению, ни Shadow Play, ни Bandicam не доступны (пока?) в Linux, но возможность использовать кодек NVENC существует. К примеру в не менее известной программе для создания стримов и записи игр OBS Studio, или в Simple Screen Recorder — лучшей утилите для записи происходящего на экране в Linux. Однако для этого необходим мультимедиа пакет FFmpeg, в котором включена возможность использования NVENC. Но так как кодек проприетарный — в большинстве дистрибутивов Linux FFmpeg собран без поддержки NVENC. Поэтому сейчас мы будем это исправлять в своей любимой системе. Внимание: данное руководство актуально только для Ubuntu 16.04 и основанных на ней дистрибутивов. В системах с FFmpeg 3.1.1 и новее, кодек NVENC доступен по умолчанию.
Кодек NVENC используется специальным аппаратным блоком в новых видеокартах Nvidia, в результате ни процессор, ни видеокарта, никак не нагружаются и не садят FPS в играх. Это также позволяет кодировать видео в невероятно высоких битрейтах.
Итак, что нам для этого потребуется:
- Любой дистрибутив Linux (я буду использовать Debian 8);
- Компьютер с видеокартой Nvidia архитектуры Kepler, Maxwell или Pascal (600, 700, 900 и 1000 серии видеокарт);
- Свежие проприетарные драйверы на видеокарту (для Debian можно взять в бэкпортах, для Ubuntu/Mint есть PPA).
Также для сборки с NVENC необходимы заголовчные файлы из официального Nvidia Video SDK. Разумеется — они несвободны, более того, для 7 версии SDK необходима регистрация на сайте Nvidia и принятие лицензионного соглашения. Однако эти файлы нужны только для сборки. Они не нужны на каждом компьютере.
Изначально я хотел писать длинный и нудный гайд по статической сборке FFmpeg и его зависимостей, описания ключей и прочего, пока не наткнулся на один потрясающий скрипт, который позволяет в полностью автоматическом режиме собрать FFmpeg с NVENC, а также — OBS Studio, с его поддержкой. Поэтому мы пойдём более лёгким способом. Такая сборка будет храниться в отдельном каталоге и не принесёт никаких проблем работающей системе, не заменит системный FFmpeg и не сломает никаких зависимостей. Плюс (если вы будете собирать и OBS) — у вас автоматически появится ярлык в меню приложений. Итак, первым делом нам нужно установить Git:
sudo apt install git
Далее клонируем репозиторий со скриптом, переходим в его директорию и выполняем. По умолчанию сборка будет производиться в каталоге ./ffmpeg-nvenc, с помощью ключа -d вы можете указать путь к другому каталогу. Ключ -o позволит собрать OBS Studio:
git clone https://github.com/Sunderland93/ffmpeg-nvenc.git
cd ffmpeg-nvenc
./build.sh -d /home/username/ffmpeg-nvenc-obs -o
Замените «username» на имя своего пользователя. Далее скрипт всё сделает за вас 🙂 Сборка займёт некоторое время, в зависимости от мощности вашего процессора. После сборки в меню приложений появится ярлык OBS. В работоспособности всей операции можно убедиться зайдя в настройки вывода:
Альтернативный вариант для Debian 8: в моём репозитории есть FFmpeg собранный с NVENC. При установке он заменит собой обычный. А так как в репозитории есть и OBS, и Simple Screen Recorder — после установки они буду сразу иметь поддержку кодека Nvenc. Пользователи Arch Linux могут установить FFmpeg собранный с NVENC из AUR. В будущем планируется добавить всё это в репозиторий для Ubuntu.
Источник