The OpenNET Project / Index page

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

Кодирование видео при помощи GPU из файла, запись с экрана и стриминг
Драйвер 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), и много чего ещё...
К сожалению, проект закрыт. Сайт проекта - оффлайн, но остался YouTube-канал.

Одним из их проектов было создание патча для GStreamer, оптимизирующего
"узкие места" при кодировании видео, значительно снижая нагрузку на CPU. Патч доступен
на GitHub.

Также по ссылке доступен скрипт rec.sh, являющейся простой графической
оболочкой на KDialog/zenity. При помощи неё можно начать скринкаст, задав
следующие настройки: а). Через что кодировать (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 - вот сравнение
производительности gst и mpv.

Кодировать на GPU от NVIDIA можно при помощи ffmpeg начиная с версии 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"

Также можно просто воспользоваться программным обеспечением  под названием 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 существует патч nvresize, позволяющий кодировать один видеопоток
сразу в несколько файлов: 240p, 360p, 480p, 720p и 1080p. Патч использует CUDA,
тогда как основной функционал nvenc использует только аппаратный энкодер.
Патч применим только к FFmpeg 3.0 и 3.1, а в версии 3.2 он был заменён
на новую технологию CUVID, умеющую гораздо больше возможностей, и также
задействующую CUDA.
 
22.04.2018 , Автор: Zenitur
Ключи: video, ffmpeg, gstreamer / Лицензия: CC-BY
Раздел:    Корень / Пользователю / Обработка изображений и видео

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, J.L. (?), 13:07, 24/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    благодарность автору

    команда ffmpeg -f x11grab.... при замене -vcodec nvenc на константа_для_OpenMAX работает для Amdgpu и radeonsi ?

     
  • 1.2, Аноним (-), 19:14, 24/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Я все грабаю ffmpeg'ом с софтварной кодировкой в легкий быстрый lossless кодек. Да, места занимает, конечно.

    Зато качество - идеальное, а потом можно нормально перекодировать с 2 проходами и отличным качеством. И пофиг есть ли хардварная акселерация и проч.

     
     
  • 2.7, Аноним (-), 03:00, 28/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Можеш дать свой screengrabber.sh ?
     

  • 1.3, Emma Charlotte Duerre Watson (?), 20:50, 24/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > 2. Стриминг в Twitch
    > -acodec libmp3lame

    в 2018 есть смысл aac использовать:
    -acodec aac

     
     
  • 2.5, Аноне (?), 13:30, 27/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    По слуху этот aac звучит даже хуже, чем lame, видимо из-за некачественной реализации. Если только оригинальный libfdk-aac использовать, который не везде собран.
     
     
  • 3.6, Emma Charlotte Duerre Watson (?), 20:40, 27/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    лет пять назад в trac.ffmpeg.org именно так и писали
    но сейчас написано:
    libfdk_aac > aac
    NOTE: as of 2017 this is no longer necessarily the case. The built in aac encoder is quite good.
     

  • 1.4, Имя (?), 21:29, 25/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    в последних версиях патч всосали в виде scale_cuda и более качественная версия из библиотеки npp scale_npp

    cuvid это старое название nvdecode, там есть resize\crop\deinterlace но какая часть там cuda, а какая нет сама nvidia уже не помнит

     
  • 1.8, IY (?), 11:32, 02/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Портанули бы они свой кодер с куды на опенкл...
     
  • 1.9, pavlinux (ok), 13:55, 17/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >  Кодировать на GPU от NVIDIA можно при помощи ffmpeg начиная с версии 2.6.
    > узнать остальные можно, выполнив "ffmpeg -h encoder=nvenc"

    ~$ ffmpeg -h encoder=nvenc
    ffmpeg version 2.6.9 Copyright (c) 2000-2016 the FFmpeg developers
    ...
    Codec 'nvenc' is not recognized by FFmpeg.

     
     
  • 2.10, Аноним (-), 21:24, 21/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    ffmpeg -h encoder nvenc ffmpeg version 2 6 3 Copyright c 2000-2015 the FFmpe... большой текст свёрнут, показать
     

  • 1.11, Аноним (-), 11:52, 17/06/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Также на AMD и Intel можно кодировать при помощи mpv - вот сравнение

    производительности gst и mpv.

    Автор, ты перепутал с mencoder. По ссылке - тест производительности декодирования

     
     
  • 2.12, Аноним (-), 11:57, 17/06/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ещё резануло глаза:

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

    После этого предложения идёт команда для NVIDIA. Вероятно, вместо этого предложения должно было быть "А для NVIDIA команда такая". А про "Возможные проблемы" автор перенёс вниз. Судя по всему, проблемы со звуком решаются установкой gstreamer-plugins-bad-orig-addon - вероятно, там aac-энкодер

     

  • 1.13, Имя (?), 20:21, 19/06/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А про драйвер radeon ничего не сказали.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




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

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