Приветствую! Если вы любите делать игровые стримы или просто снимать хорошие летсплеи в 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 в играх. Это также позволяет кодировать видео в невероятно высоких битрейтах.
Итак, что нам для этого потребуется:
Также для сборки с 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.
Кодек 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.
./obs: error while loading shared libraries: libobs-frontend-api.so.0: cannot open shared object file: No such file or directory
ОтветитьУдалитьЭтот комментарий был удален автором.
Удалитьи где же этот репозитарий с NVENC в FFMPEG? нашёл какой то реп, sudo add-apt-repository ppa:jonathonf/ffmpeg-3
ОтветитьУдалитьно там нифига нет nvenc!
для компилирования надо ли удалять уже установленный ffmpeg? или не стоит?
попробую не удалять.
Репозиторий для Debian 8 указан наверху. Но я не даром написал предупреждение, что статья актуальна только для Ubuntu 16.04 и производных, так как в даже в Debian 8 сейчас доступен FFmpeg 3.2 с нативной поддержкой FFmpeg
Удалитьможет нативной поддержкой nvenc?
УдалитьДебиановский глянул репозиторий, почему то файлы не в формате .deb а .tar.xz.
никогда бы не догадался найти его в Меню.
искал в тексте статьи и не находил. перечитав раз 20
я думаю что меню с ошибкой. если меню с надписью дебиан ведет на файлы для Opensuse
УдалитьРепозиторий для Debian хостится на сборочной ферме от проекта OpenSUSE. Я уже тысячу раз об этом писал. Нет там никаких ошибок
Удалитьну блин поставил млин NVENC, спасибо автор, теперь у меня исчез obs-studio и запустить его нельзя. user@PC1 ~/ffmpeg3 $ obs-studio
ОтветитьУдалитьobs-studio: команда не найдена
user@PC1 ~/ffmpeg3 $ obs-studio
obs-studio: команда не найдена
Как по мне так лучше пускай 15FPS в OBS будет чем его вообще не будет.
Я никакой ответственности не несу. Скрипт не мой. Если есть проблемы - пишите его разработчику. Хотя я перед написанием статьи всё перепроверил, и у меня работало. Завтра проверю ещё раз. Если выяснится что скрипт поломан - заменю на свой вариант
Удалитьвообще странно что все дистры не взяли этот NVENC себе сразуже . наверное они просто обожают когда про их дистрибутив пишут видео с тормозами и лагами.
Удалитьну что лучше тормозящего видео сможет отрекламировать дистр )
При чём здесь дистры? NVENC это проприетарный кодек от Nvidia. Только недавно они перелицензировали API под свободной лицензией, потому FFmpeg принял его в свой состав. Раньше нужно было ставить заголовки из Nvidia Video SDK
Удалитьну вот у меня стоит фирменный FFmpeg 3.2.4 а толку NVENC как не было так и нет
УдалитьСейчас вот ставлю Cuda 8.0 нашёл что его можно тут стянуть
https://developer.nvidia.com/cuda-downloads
вдруг если вашим скриптом не ставится, то может захочет так поставитcz NVENC
к сожалению о какой либо экономии места после 2гб файла говорить вообще нельзя.
Нафига так ломать свою систему? Из репов поставьте nvidia-cuda-toolkit и всё. Не знаю что вы наворотили у себя, я на двух разных дистрибутивах проверил - всё работает. Компилируется и запускается. Проблема у вас.
Удалитьмне сказали на другом форуме что для его работы NVENC нужна Cuda 8 и сказали где её взять.
Удалитья бы никогда в жизни не догадался что nvidia-cuda-toolkit нужен.
эх ещё -450мб на файлы Cuda 7.5.
поставил НИФИГА ! нет никакого nvenc в OBS
на другом форуме мне вот посоветовали поставить nvidia-uvm
но uvm есть только для 340 драйвера в виде пакета
для 378.13 uvm видимо идёт в комлпекте.
/dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm
Ставил только драйвер из ppa.
наверное уже слишком много попыток поставить этот NVENC
уже никаких сил нет его ставить замаялся.
буду внешней камерой снимать она достаточно качественная.
а может через годика 2 наконец во все PPA его нормально завезут
ну и может новую OBS 18 тоже наконец в PPA кто нибудь выложит
с меня хватит я пас. надоело.
лучше бы я 3 дня сериалы посмотрел толку бы больше было.
или переводом статей занялся которые я постоянно откладываю.
и перевёл лишь наполовину. работа вся стоит.
когда нибудь это же сделают чтобы работало из коробки.
надо просто подождать несколько лет.
Не нужен NVENC'у никакой CUDA. Это вам он за каким-то хреном понадобился, я лишь подсказал как его правильно поставить. Последний раз повторяю - проблема только у вас. У меня всё работает согласно статье, в Debian 9 сразу из коробки есть NVENC. OBS его поддерживает с 15 версии, которая как раз штатно в Debian 9. То есть она старая, и даже там всё работает. На нескольких разных конфигурация. Карта Nvidia GeForce GTX 760 и 375 драйвер. Так что не надо тут ныть как всё плохо. Всё отлично. И работает прекрасно. В PPA никто не будет этого делать, потому что если поставить свежий FFmpeg в систему - это сломает кучу приложений. Именно поэтому я не сделал этого. В Ubuntu 16.04 старый FFmpeg, версии 2.8. Его даже патчить нет смысла. А жаловаться будете тогда, когда начнёте платить кому-то за результат. И этот результат не оправдает надежд. А за бесплатно для вас никто ничего делать не будет.
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьeg3/ffmpeg-nvenc $ obs
ОтветитьУдалитьbash: /usr/bin/obs: Нет такого файла или каталога
user@PC1 ~/ffmpeg3/ffmpeg-nvenc $ obs
bash: /usr/bin/obs: Нет такого файла или каталога
user@PC1 ~/ffmpeg3/ffmpeg-nvenc $ obs
bash: /usr/bin/obs: Нет такого файла или каталога
блин.
опять заново компилировал зря.
лучше бы PPA сделали вместо этого бесполезного руководства!!
Лучше бы на кабы. Вам никто ничего не должен. Хотите PPA - вперёд. Делайте. Руководств в сети полно. Есть учебник от Debian по сборке пакетов.
УдалитьДа, действительно, проблема есть. И связана она с OBS. Я доработаю скрипт и обновлю статью. Репозиторий я не могу сделать по одной причине - чтобы не ломать работу системы. Если удастся найти способ сделать всё аккуратно - сделаю.
УдалитьСкрипт исправлен и проверен. Теперь всё работает.
Удалитьспасибо !! будем тестировать!
Удалитьне с меня хватит как я как то раз опакечивал Wine и накладывал на него патч)))
чтобы один пакет сделат нормально пришлось отформатировать хард т.к. при формировании пакета что то ломалось на ноуте и после компиляции если его перезагрузить он больше уже никогда не загружался. с тех пор желание что то опакетить понизилось. ну может годиков на 5. пока это не исправят. может уже исправили
peg-nvenc-obs
Удалить./build.sh: строка 263: ошибка синтаксиса: неожиданный конец файла
PC1 ffmpeg-nvenc # sudo ./build.sh -d /home/user/ffmpeg-nvenc-obs -o
Building FFmpeg in /home/user/ffmpeg-nvenc-obs
./build.sh: строка 263: ошибка синтаксиса: неожиданный конец файла
PC1 ffmpeg-nvenc #
скрипт не редактировал, т.к. забыл куда все файлы сохранил
где то поспешили может быть?
Нет смысла добавлять проверку на наличие архивов с исходниками, так как после сборки каталог будет очищаться. Их в любому случае нужно будет выкачивать при новой сборке. Или вам понравится если будет тонна сборочного мусора в каталоге с программой?. Скрипт полностью рабочий, проверено на двух системах. Не надо его запускать через sudo, он сам запросит нужные права. То что вы его запускаете от sudo - нарушает правильную работу всего скрипта
Удалитьзапускал без судо - неработает.
Удалитья кажется уже даже постил лог , тупо просто ничего не происходит только 1 надпись пишет но ничего не делается
ничего не качается ничего не компилируется
вообще ничего не происходит
предыдущий скрипт хотя бы пытался работать
Я в инструкции никакого sudo не указывал. Поэтому понятия не имею что и где у вас сломалось. У меня всё работает сейчас, ни одну вашу проблему подтвердить не могу.
УдалитьNVENC это конечно круто, но как на счёт iQSV?
ОтветитьУдалитьПатч есть, проходит ревью. Возможно в следующем выпуске OBS добавят поддержку
УдалитьЗачем выкладывать заведомо не рабочее?
ОтветитьУдалитьvova@lm-pc ~/ffmpeg-nvenc $ ./build.sh -d /home/vova/ffmpeg-nvenc-obs -o
Building FFmpeg in /home/vova/ffmpeg-nvenc-obs
./build.sh: строка 263: ошибка синтаксиса: неожиданный конец файла