LINUX.ORG.RU

Не получается задействовать аппаратное ускорение средствами видеокарты

 , ,


0

1

Нужно перекодировать много видеофайлов из avi в mkv или mp4 (h264 или h265). Пробовал программы vlc media player,handbrake,avidemux,ciano, выбирал vaapi,vdpau,libva / установлен ffmpeg, mesa-libva, но во всех программах грузятся все 16 потоков процессора и кодирование проходит медленно. Видеокарта 7800xt загружена на 0%. Читал что нужен проприетарный драйвер, можно ли как-то задействовать ресурсы видеокарты с открытым драйвером mesa?


Читал что нужен проприетарный драйвер, можно ли как-то задействовать ресурсы видеокарты с открытым драйвером mesa?

Не нужен проприетарный, на открытых кодирование работает. Но не все кодеки и форматы кадра доступны. Нужно будет разобраться с ffmpeg в целом и c hwupload в частности, примерно так:

ffmpeg -y \
    -i input.mkv \
    -c:V:0 hevc_vaapi \
    -vaapi_device /dev/dri/renderD128 \
    -vf 'hwupload' \
    -profile:v main \
    -rc_mode CQP \
    -global_quality 20 \
    -f hevc \
    output.hevc

После кодирования микшировать потоки надо mkvmerge’ем - ffmpeg как-то очень криво микширует mkv по дефолту.

anonymous
()

ну судя по описанию, аффтыру плевать на детали, поэтому нужно выбирать mp4 и h264. Остальное ненужное усложнение жизни.

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

openSUSE Tumbleweed

vainfo Trying display: wayland libva info: VA-API version 1.23.0 libva info: Trying to open /usr/lib64/dri/radeonsi_drv_video.so libva info: Found init function __vaDriverInit_1_23 libva info: va_openDriver() returns 0 vainfo: VA-API version: 1.23 (libva 2.23.0) vainfo: Driver version: Mesa Gallium driver 25.3.4 for AMD Radeon RX 7800 XT (radeonsi, navi32, LLVM 21.1.8, DRM 3.64, 6.18.8-1-default) vainfo: Supported profile and entrypoints VAProfileH264ConstrainedBaseline: VAEntrypointVLD VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice VAProfileH264Main : VAEntrypointVLD VAProfileH264Main : VAEntrypointEncSlice VAProfileH264High : VAEntrypointVLD VAProfileH264High : VAEntrypointEncSlice VAProfileHEVCMain : VAEntrypointVLD VAProfileHEVCMain : VAEntrypointEncSlice VAProfileHEVCMain10 : VAEntrypointVLD VAProfileHEVCMain10 : VAEntrypointEncSlice VAProfileJPEGBaseline : VAEntrypointVLD VAProfileVP9Profile0 : VAEntrypointVLD VAProfileVP9Profile2 : VAEntrypointVLD VAProfileAV1Profile0 : VAEntrypointVLD VAProfileAV1Profile0 : VAEntrypointEncSlice VAProfileAV1Profile2 : VAEntrypointVLD VAProfileNone : VAEntrypointVideoProc

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

А можете мне написать пример попроще, с небольшим количеством параметров, например ffmpeg -i input.avi output.mp4, только какой ключ писать для аппаратного конвертирования?

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

Я уже весь интернет перечитал, ничего не понял; dxva2 это вообще походу для винды. d3d11… да там все примеры для винды. Вот в моём случае, ffmpeg -i input.avi output.mp4 в каком месте какой ключ ставить чтоб видюха заработала? Если просто ffmpeg -i input.avi output.mp4 то всё также на проце

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

Покажите вывод команды:

ffmpeg -hide_banner -encoders | grep -E "vaapi|amf"

Должно быть что-то типа:

 V....D h264_vaapi           H.264/AVC (VAAPI) (codec h264)
 V....D hevc_vaapi           H.265/HEVC (VAAPI) (codec hevc)
 V....D mjpeg_vaapi          MJPEG (VAAPI) (codec mjpeg)
 V....D mpeg2_vaapi          MPEG-2 (VAAPI) (codec mpeg2video)
 V....D vp8_vaapi            VP8 (VAAPI) (codec vp8)
 V....D vp9_vaapi            VP9 (VAAPI) (codec vp9)
Obezyan
()
Ответ на: комментарий от pckot

Вот в моём случае, ffmpeg -i input.avi output.mp4 в каком месте какой ключ ставить чтоб видюха заработала?

ffmpeg -hide_banner -vaapi_device /dev/dri/renderD128 -i input.avi -vf 'format=nv12,hwupload' -c:v h264_vaapi -qp 23 -c:a aac -b:a 192k output.mp4
Obezyan
()
Последнее исправление: Obezyan (всего исправлений: 1)
Ответ на: комментарий от pckot

А попробуйте:

ffmpeg -vaapi_device /dev/dri/renderD128 \
  -i input.avi \
  -vf 'format=nv12,hwupload' \
  -c:v h264_vaapi -qp 23 \
  -an \
  -f null -

И покажите вывод. Если там будет h264_vaapi то значит VAAPI используется и нужно смотреть что там карта реально делает через cat /sys/kernel/debug/dri/0/amdgpu_pm_info.

Obezyan
()