четверг, 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.