The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Раздел полезных советов: Кодирование видео при помощи GPU из..."
Отправлено auto_tips, 24-Апр-18 13:07 
Драйвер Intel использует API под названием VA-API, драйвер Amdgpu - OpenMAX, NVIDIA - Nvenc. А драйверы fglrx и nouveau не имеют поддержки аппаратного энкодера.

1. Кодирование при помощи GPU (из файла или запись с экрана)

Несколько лет назад существовал проект Gears on Gallium, который проводил бенчмарки драйверов и игр (преимущественно опенсорсных, но бывали и исключения - например эти ребята были первыми, кто опубликовал результаты тестов Doom 2016 под Wine Staging + AMDGPU-PRO + Vulkan), формировал дистрибутив Linux в форме Docker-контейнера с последним графическим стеком (из GIT), и много чего ещё... К сожалению, [[https://www.linux.org.ru/forum/talks/13220491 проект закрыт]]. Сайт проекта - оффлайн, но остался [[https://www.youtube.com/channel/UCh1UanySk_Ht0WRfo4O9STw/videos YouTube-канал]].

[[https://www.linux.org.ru/forum/development/10496233 Одним из их проектов]] было создание патча для GStreamer, оптимизирующего "узкие места" при кодировании видео, значительно снижая нагрузку на CPU. Патч доступен [[https://github.com/pontostroy/gstreamer-screenrecording на GitHub]].

Также по ссылке доступен скрипт rec.sh, являющейся простой графической оболочкой на KDialog/zenity. При помощи неё можно начать [[https://ru.wikipedia.org/wiki/%D0%A1%D0%... скринкаст]], задав следующие настройки: а). Через что кодировать (Software, VA-API (Intel), OpenMAX (AMD open source)) б). Полный экран или окно? в). Куда сохранять? В итоге формируется команда наподобие такой:

   gst-launch-1.0 -e ximagesrc use-damage=0 ! queue ! video/x-raw,format=BGRx ! videoconvert ! video/x-raw,format=I420,framerate=30/1 ! queue ! vaapiencode_h264 ! h264parse ! queue ! matroskamux ! progressreport ! filesink location=/home/username/Videos/screencast_current_date.mkv

Хотя написано "1.0", на самом деле это приложение называется так же и в Gstreamer 1.2, и в 1.4, и т.д. Чтобы команда работала, в вашей системе должен быть установлен пакет gstreamer-plugins-vaapi.

Также на AMD и Intel можно кодировать при помощи mpv - вот [[https://www.linux.org.ru/forum/talks/11143338 сравнение]] производительности gst и mpv.

Кодировать на GPU от NVIDIA можно при помощи ffmpeg [[https://www.opennet.ru/opennews/art.shtml?num=41805 начиная]] с версии 2.6. Вот пример команды:

   ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0 -f alsa -i pulse -ac 2 -ar 48000 -acodec libfdk-aac -vcodec nvenc -preset hq -tune film -threads 0 output.mkv

Я использую параметры "-preset hq -tune film", узнать остальные можно, выполнив "ffmpeg -h encoder=nvenc"

2. Стриминг в Twitch

rec.sh не знает как это делать, поэтому вручную:

   gst-launch-1.0 ximagesrc use-damage=0 ! video/x-raw,format=BGRx ! videoconvert ! video/x-raw,format=I420,framerate=30/1 ! queue leaky=downstream ! x264enc  speed-preset=faster qp-min=30 tune=zerolatency ! queue ! flvmux name=muxer pulsesrc device=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor ! queue ! voaacenc bitrate=128000 ! aacparse ! queue ! muxer. muxer. ! rtmpsink location="rtmp://live.justin.tv/app/live_ВАШ_ID"

Если не работает кодирование аудио, убедитесь что установлен

   ffmpeg -f x11grab -s "1920x1080" -r "30" -i :0.0 -f alsa -i pulse -f flv -ac 2 -ar 44100 -vcodec nvenc -s 1280x720 -preset hq -tune film -acodec libmp3lame -threads 0 -strict normal "rtmp://live.justin.tv/app/live_ВАШ_ID"

Также можно просто воспользоваться программным обеспечением  под названием [[https://obsproject.com/ru OBS]]

3. Как задействовать аппаратное кодирование в OpenShot, PiTiVi и других редакторах видео

Первый использует ffmpeg, второй - Gstreamer. Важно чтобы ваш системный ffmpeg был скомпилирован с флагами "--enable-nonfree --enable-nvenc". И тогда в списке доступных энкодеров появится nvenc. Если и в этом случае он не появляется - попробуйте пересобрать libmlt - посредника между OpenShot и ffmpeg.

4. Возможные проблемы

У меня было так, что выбран не тот VA-API backend, и поэтому при запуске команды из консоли была ошибка "не удаётся кодировать при помощи fglrx_drv_video.so". Возможно что причина в том, что раньше у меня была видеокарточка от AMD. Решается так: export LIBVA_DRIVER_NAME=i965. Можно также добавить это в /etc/environment.

А вообще, если что-то работает не так то для отладки полезен параметр "export GST_DEBUG=4".

Если не работает стриминг при помощи GStreamer, убедитесь что установлен плагин gstreamer-plugins-bad. В openSUSE мне помогла установка пакета gstreamer-plugins-bad-orig-addon.

Для ffmpeg существует [[http://developer.download.nvidia.com/compute/redist/ffmpeg/1... патч nvresize]], позволяющий кодировать один видеопоток сразу в несколько файлов: 240p, 360p, 480p, 720p и 1080p. Патч использует CUDA, тогда как основной функционал nvenc использует только аппаратный энкодер.
[[https://build.opensuse.org/package/view_file/home:linux4huma... Патч]] применим только к FFmpeg 3.0 и 3.1, а в версии 3.2 он был [[https://developer.nvidia.com/ffmpeg заменён]]  на новую технологию CUVID, умеющую гораздо больше возможностей, и также задействующую CUDA.


URL:
Обсуждается: http://www.opennet.ru/tips/info/3063.shtml

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру