LINUX.ORG.RU

VAAPI На Radeon WX 4100

 , ,


0

1

День добрый, комрады!
Собрал на убунту ffmpeg с поддержкой VAAPI на драйвере amdgpu-pro (с офф. сайта самый последний). Так вот, перекодирование видео на карточке Radeon WX 4100 получается в 2 раза медленнее, чем на встроенном в процессор видеоядре Intel HD 630. Разница одинакова, что на h264_vaapi, что на hevc_vaapi. Утилизация GPU на радике минимальна.
В чем может быть дело? Неужто такой слабый енкодер? Сама карточка-то в разы мощнее интеловской встройки.
Может кто имел дело с кодированием\декодированием видео на радиках? Может есть какие тонкости?
Буду рад любому совету.

Но наверняка кадры туда-сюда между видеопамятью и системной гоняются, и от этого процесс перекодирования тормозится. А у встройки отдельной своей памяти нет

Harald ★★★★★
()

Попробуй временно удалить /dev/dri/renderD128 или /dev/dri/renderD129. Суть в том, чтобы оставить только один экземпляр renderDNNN. Желательно, тот, который относится к AMD видеоадаптеру.

i-rinat ★★★★★
()

Сама карточка-то в разы мощнее интеловской встройки.

Шейдерные ядра да, мощнее. Но тебе же интересны специализированные блоки для работы с видео. Их и надо сравнивать.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Так было бы где-то опубликовано сравнительное тестирование. По АМД вообще документации почти нет.

lasthappy
() автор топика
Ответ на: комментарий от Harald

Просто пережимаю файл, обрезая звук:
ffmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD128 -i test.mp4 -vf 'format=nv12|vaapi,hwupload' -y -c:v h264_vaapi -an output.avi

lasthappy
() автор топика
Ответ на: комментарий от i-rinat

а при кодировании можно как-то использовать вычислительные мощности карты, типа OpenCL? Есть у ffmpeg нормальные инструменты для этого?

lasthappy
() автор топика
Ответ на: комментарий от lasthappy

По идее ты и так их используешь, если все дрова на месте, конечно. Енкодинг же посредством OpenCL будет по сути своей софтварным, а не аппаратным (железным). Да и, как уже тут верно заметили, не в мощностях тут узкое место

yoghurt ★★★★★
()
Ответ на: комментарий от lasthappy

Ты распаковываешь на CPU, потом гонишь сырые данные на карту, где кодируешь. Пробовал варианты перекодирования целиком на видеоадаптере, как тут в примерах: https://trac.ffmpeg.org/wiki/Hardware/VAAPI ?

обрезая звук

Ты ведь в курсе, что ты можешь использовать -c:v copy -an для удаления звука? :-D

i-rinat ★★★★★
()
Ответ на: комментарий от lasthappy

а при кодировании можно как-то использовать вычислительные мощности карты, типа OpenCL?

Я как-то такое искал ради интереса. Гуглится коммерческий софт. Если очень надо, стоит с ними связаться и обговорить цены.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

«Ты ведь в курсе, что ты можешь использовать -c:v copy -an для удаления звука? :-D» Это не принципиально. Условия для обоих адаптеров одинаковые. Да и в итоге мне не надо перекодировать видео - это я использовал лишь для теста и наглядности.
Изначальная задача собирать видео из картинок jpeg через concat

lasthappy
() автор топика
Ответ на: комментарий от i-rinat

Почитаешь, лор полон ъ-кампутер сайнтистов

В каждой программе один и тот же наивный говнокод

anonymous
()
Ответ на: комментарий от anonymous

кода нужно много, а Ъ-кампутер сайнтистов мало, шоподелать

Harald ★★★★★
()

в качестве эксперемента можешь попробывать заюзать gstreamer(openmax) и открытые драйвера. На форточках можешь попробывать воспользоваться AMD AMF в ffmpeg.

и да, как уже сказали, кодированием видео занимается отдельный чип, а не сам GPU - AMD/VCE и Intel/QSV. И далеко не факт, что VCE мощнее QSV.

В частности, насколько мне известно, QSV кодирует потоковое видео быстрее и качественнее, чем Nvidia NVENC. Про «VCE vs QSV» ничего не слышал.

А еще у nVidia есть(был?) прикол, что младшие видеокарты получали SiP мощнее, что старшие - это к вопросу об отношении мощности GPU к (де)кодированию видео

Ford_Focus ★★★★★
()
Последнее исправление: Ford_Focus (всего исправлений: 2)
Ответ на: комментарий от Ford_Focus

мощнее, что старшие

Новее. Остальное «подтягивается по зависимостям».

anonymous
()

По wiki WX 4100 => polaris11 => rx460

https://github.com/obsproject/obs-amd-encoder/wiki/Hardware-VCE3.4

Можно обратить внимание, что производительность кодирования одинаковая для rx460 и rx480, видно там один и тот же ASIC на кремнии и никакие другие вычислительные блоки GPU при кодировании видео не используются.

Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 3)
Ответ на: комментарий от lasthappy

А каковы fps для WX 4100 и Intel HD 630? Там ведь еще разница в качестве есть. То что быстрее еще не значит что качество то-же самое.

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

Разница в скорости двукратна, а вот разницы в качестве не увидел.

lasthappy
() автор топика

Добавлю, что на Ubuntu 18.04.2 с драйвером amdgpu-pro ffmpeg не кодирует на ней нормально в hevc_vaapi, только h264_vaapi. На Hevc дикие артефакты, больше половины плееров выходной файл вообще отказываются читать. Иногда ffmpeg при кодировании в hevc виснет намертво и этот процесс никак не снять. Только жесткой перезагрузкой...
Это так, на заметку, может кому пригодится.

lasthappy
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.