The OpenNET Project / Index page

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



"Раздел полезных советов: Кодирование видео при помощи GPU из..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Кодирование видео при помощи GPU из..."  +/
Сообщение от auto_tips on 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.dev/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.dev/tips/info/3063.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Кодирование видео при помощи GPU из файла, запись с экрана и..."  +/
Сообщение от J.L. on 24-Апр-18, 13:07 
благодарность автору

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Кодирование видео при помощи GPU из файла, запись с экрана и..."  +1 +/
Сообщение от Аноним (??) on 24-Апр-18, 19:14 
Я все грабаю ffmpeg'ом с софтварной кодировкой в легкий быстрый lossless кодек. Да, места занимает, конечно.

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Кодирование видео при помощи GPU из файла, запись с экрана и..."  +/
Сообщение от Emma Charlotte Duerre Watson on 24-Апр-18, 20:50 
> 2. Стриминг в Twitch
> -acodec libmp3lame

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Кодирование видео при помощи GPU из файла, запись с экрана и..."  +/
Сообщение от Имя on 25-Апр-18, 21:29 
в последних версиях патч всосали в виде scale_cuda и более качественная версия из библиотеки npp scale_npp

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Кодирование видео при помощи GPU из файла, запись с экрана и..."  +/
Сообщение от Аноне on 27-Апр-18, 13:30 
По слуху этот aac звучит даже хуже, чем lame, видимо из-за некачественной реализации. Если только оригинальный libfdk-aac использовать, который не везде собран.
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Кодирование видео при помощи GPU из файла, запись с экрана и..."  +/
Сообщение от Emma Charlotte Duerre Watson on 27-Апр-18, 20:40 
лет пять назад в 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.
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Кодирование видео при помощи GPU из файла, запись с экрана и..."  +/
Сообщение от Аноним (??) on 28-Апр-18, 03:00 
Можеш дать свой screengrabber.sh ?
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

8. "Кодирование видео при помощи GPU из файла, запись с экрана и..."  +/
Сообщение от IY email on 02-Май-18, 11:32 
Портанули бы они свой кодер с куды на опенкл...
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "Кодирование видео при помощи GPU из файла, запись с экрана и..."  +/
Сообщение от pavlinux (ok) on 17-Май-18, 13:55 
>  Кодировать на 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.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

10. "Кодирование видео при помощи GPU из файла, запись с экрана и..."  +/
Сообщение от Аноним (??) on 21-Май-18, 21:24 
$ ffmpeg -h encoder=nvenc
ffmpeg version 2.6.3 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.7 (SUSE Linux)
  configuration: --shlibdir=/usr/lib64 --prefix=/usr --mandir=/usr/share/man --libdir=/usr/lib64 --enable-shared --disable-static --enable-debug --disable-stripping --extra-cflags='-O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -I./cudautils_and_nvenc_include_files' --extra-ldflags=-L./cudautils_and_nvenc_include_files --enable-pic --optflags='-O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables' --enable-gpl --enable-x11grab --enable-version3 --enable-pthreads --datadir=/usr/share/ffmpeg --enable-libfaac --enable-libaacplus --enable-nonfree --enable-nvenc --enable-libopenjpeg --enable-avfilter --enable-libpulse --enable-libwebp --enable-libvpx --enable-libopus --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libxvid --enable-libx264 --enable-libx265 --enable-libschroedinger --enable-libgsm --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-postproc --enable-libdc1394 --enable-librtmp --enable-libfreetype --enable-avresample --enable-libtwolame --enable-libvo-aacenc --enable-gnutls --enable-libass --disable-libwebp --enable-frei0r --enable-libcelt --enable-libcdio --enable-ladspa
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Encoder nvenc [Nvidia NVENC h264 encoder]:
    Threading capabilities: no
    Supported pixel formats: nv12
nvenc AVOptions:
  -preset            <string>     E..V.... Set the encoding preset (one of hq, hp, bd, ll, llhq, llhp, default) (default "hq")
  -cbr               <int>        E..V.... Use cbr encoding mode (from 0 to 1) (default 0)
  -2pass             <int>        E..V.... Use 2pass cbr encoding mode (low latency mode only) (from -1 to 1) (default -1)
  -gpu               <int>        E..V.... Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on. (from 0 to INT_MAX) (default 0)
Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Кодирование видео при помощи GPU из файла, запись с экрана и..."  +/
Сообщение от Аноним (??) on 17-Июн-18, 11:52 
> Также на AMD и Intel можно кодировать при помощи mpv - вот сравнение

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Кодирование видео при помощи GPU из файла, запись с экрана и..."  +/
Сообщение от Аноним (??) on 17-Июн-18, 11:57 
Ещё резануло глаза:

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

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

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Кодирование видео при помощи GPU из файла, запись с экрана и..."  +/
Сообщение от Имя on 19-Июн-18, 20:21 
А про драйвер radeon ничего не сказали.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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