LINUX.ORG.RU

Ffmpeg h264 аппаратный декодер для amd

 ,


0

2

Сабж - кто пользует ffmpeg для декодирования (не кодирования!) н264 аппаратного - подскажите как вы инициализируете декодер - под нвидией прекрасно стартует h264_cuvid и активно нагружает аппаратный блок декодирования, под амд h264_vaapi с 9060 упорно прикидывается работающим (в дебаге никакого выхлопа) но и все декодирование делает центральный проц

Пробовал:

  • принудительно указывать hwaccel vaapi и декодер как h264_vaapi
  • указывать все что видит /dev/dri

Системно поддержка декодирования на карте есть 👨🏿‍🔧

★★★★★
ffmpeg -i test.mp4 -benchmark -f null -
video:1148KiB audio:1770KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame= 2773 fps=784 q=-0.0 Lsize=N/A time=00:01:53.28 bitrate=N/A speed=  32x elapsed=0:00:03.53    
bench: utime=18.871s stime=0.298s rtime=3.536s
bench: maxrss=316920KiB
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -i test.mp4 -benchmark -f null -

video:1148KiB audio:1770KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame= 2773 fps=496 q=-0.0 Lsize=N/A time=00:01:53.28 bitrate=N/A speed=20.3x elapsed=0:00:05.59    
bench: utime=1.596s stime=1.739s rtime=5.591s
bench: maxrss=278268KiB
ffmpeg -hwaccel vulkan -init_hw_device vulkan=vk:1 -i test.mp4 -benchmark -f null -
video:1148KiB audio:1770KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame= 2773 fps=365 q=-0.0 Lsize=N/A time=00:01:53.28 bitrate=N/A speed=14.9x elapsed=0:00:07.58    
bench: utime=0.313s stime=0.583s rtime=7.589s
bench: maxrss=270964KiB

т.е. amd 9950x в полтора раза шустрее чем vaapi декодер на 9060 и в два раза быстрее чем на встроенном гпу

на дискретном 9060 вулкан отваливается с

[h264 @ 0x56134dfe40c0] Device does not support the VK_KHR_video_decode_queue extension!
[h264 @ 0x56134dfe40c0] Failed setup for format vulkan: hwaccel initialisation returned error.

и судя по тому что vulkaninfo упоминает декодер только один раз, то видимо дебиан 13 в него не умеет

vulkaninfo | grep KHR_video
WARNING: radv is not a conformant Vulkan implementation, testing use only.
        VK_KHR_video_decode_av1                       : extension revision 1
        VK_KHR_video_decode_h264                      : extension revision 9
        VK_KHR_video_decode_h265                      : extension revision 8
        VK_KHR_video_decode_queue                     : extension revision 8
        VK_KHR_video_encode_h264                      : extension revision 14
        VK_KHR_video_encode_h265                      : extension revision 14
        VK_KHR_video_encode_queue                     : extension revision 12
        VK_KHR_video_maintenance1                     : extension revision 1
        VK_KHR_video_queue                            : extension revision 8

Покупай амуде, говорили они, у нее отличная поддержка под линухом, говорили они
скам какой-то :-D

rukez ★★★★★
() автор топика

Для того, чтобы декодирование работало, надо чтобы драйвера видео были собраны с поддержкой декодирования (mesa-libva или как это в вашем дистрибутиве называется). В Fedora, например, собирают без поддержки кодирования/декодирования из-за патентных ограничений в США.

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

Когда я со своими АМД плясал с декодированием на Вулкане, то без вот этой переменной окружения:

export RADV_PERFTEST=video_decode

оно точно так же не хотело работать.

Сейчас попробовал h264 vaapi, но в арче ffmpeg поставляется без декодеров vaapi :)

> ffmpeg -hide_banner -decoders | grep 264
 VFS..D h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
 V..... h264_v4l2m2m         V4L2 mem2mem H.264 decoder wrapper (codec h264)
 V....D h264_qsv             H264 video (Intel Quick Sync Video acceleration) (codec h264)
 V..... h264_cuvid           Nvidia CUVID H264 decoder (codec h264)

Щас у меня дособерётся ffmpeg-amd-full из АУРа, посмотрю там.

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

Не, я фигню, написал, видимо. Специалисты сказали, что vaapi в списке декодеров и не должен появляться.

Прогнал тестовый файл с ffmpeg из реп арча и с ffmpeg-amd-full из аура, результат одинаковый: GPU декодит, судя по amdgpu_top с загрузкой декодера до 100%, цпу отдыхает при этом.

В логах вот такое есть:

[AVHWDeviceContext @ 0x5653ab2f1e40] libva: VA-API version 1.22.0
[AVHWDeviceContext @ 0x5653ab2f1e40] libva: Trying to open /usr/lib/dri/radeonsi_drv_video.so
[AVHWDeviceContext @ 0x5653ab2f1e40] libva: Found init function __vaDriverInit_1_22
[AVHWDeviceContext @ 0x5653ab2f1e40] libva: va_openDriver() returns 0
[AVHWDeviceContext @ 0x5653ab2f1e40] Initialised VAAPI connection: version 1.22
[AVHWDeviceContext @ 0x5653ab2f1e40] VAAPI driver: Mesa Gallium driver 25.2.2-arch1.1 for AMD Radeon RX Vega (radeonsi, vega10, ACO, DRM 3.63, 6.15.4-arch2-1).
[AVHWDeviceContext @ 0x5653ab2f1e40] Driver not found in known nonstandard list, using standard behaviour.
[h264 @ 0x5653ab4ac4c0] Reinit context to 3840x2160, pix_fmt: yuv420p
Selecting decoder 'h264' because of requested hwaccel method vaapi

...

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'sample_3840x2160.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.83.100
  Duration: 00:00:28.24, start: 0.000000, bitrate: 37573 kb/s
  Stream #0:0[0x1](und): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(progressive, left), 3840x2160, 37570 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
      Metadata:
        handler_name    : VideoHandler
        vendor_id       : [0][0][0][0]
[out#0/null @ 0x5653ab34ff00] No explicit maps, mapping streams automatically...
[vost#0:0/wrapped_avframe @ 0x5653ab4d26c0] Created video stream from input stream 0:0
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
[vost#0:0/wrapped_avframe @ 0x5653ab4d26c0] Starting thread...
[vf#0:0 @ 0x5653ab373500] Starting thread...
[vist#0:0/h264 @ 0x5653ab4d1f00] [dec:h264 @ 0x5653ab36a040] Starting thread...
[in#0/mov,mp4,m4a,3gp,3g2,mj2 @ 0x5653ab4ab300] Starting thread...
Press [q] to stop, [?] for help
[h264 @ 0x5653ab4bee40] Reinit context to 3840x2160, pix_fmt: vaapi
[graph -1 input from stream 0:0 @ 0x7f74fc002f00] w:3840 h:2160 pixfmt:vaapi tb:1/24000 fr:24000/1001 sar:0/1 csp:unknown range:unknown
[graph -1 input from stream 0:0 @ 0x7f74fc002f00] video frame properties congruent with link at pts_time: 0

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

из-за патентных ограничений

по крайней мере вулкан точно не по патентам ограничен - на встройке он декодер видит

но видимо меса на момент фиксации дебиана 13 не умела в 9060

сейчас попробую rocm навернуть но это довольно забавная процедура на 13ом - часть пакетиков пришлось качать ручками ибо амд конечно драйвера под 13шку не обновила (и судя по тому что они вообще для убунты то и не планирует) - П-поддержка :-D

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

Специалисты сказали, что vaapi в списке декодеров и не должен появляться.

да, я в начале тоже думал что у меня ffmpeg не умеет в такое ожидая увидеть h264_vaapi в списке но видимо он в просто h264 воткнут

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

т.е. amd 9950x в полтора раза шустрее чем vaapi декодер на 9060

Так основной смысл в энергопотреблении, а не производительности.
Естественно, что современный шестнадцати ядерный проц будет быстрее.
У меня на 5950 и 6700 разница между cpu и vaapi вообще почти в три раза.
А вот с vulkan там какая то беда, при его использовании декодер видяхи только наполовину нагружается, так что он еще в два раза медленнее чем vaapi.

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

Есть деб-мультимедия, там пепесобирают ffmpeg, имеет смысл попробовать его.

у меня ffmpeg собран и с ваапи и с вулканом

configuration: --prefix=/home/orlovsn/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/orlovsn/ffmpeg_build/include --extra-ldflags=-L/home/orlovsn/ffmpeg_build/lib --extra-libs='-lpthread -lm' --ld=g++ --bindir=/home/orlovsn/bin --enable-chromaprint --enable-frei0r --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libdav1d --enable-libfdk-aac --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libmp3lame --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-nonfree --enable-opengl --enable-openssl --enable-version3 --enable-librubberband --enable-libharfbuzz --enable-libwebp --enable-libzimg --enable-libzvbi --enable-libgsm --enable-libvvenc --enable-vaapi --enable-vulkan

проблема явно где-то на стороне вулкана, который не может цепануть быстрое ГПУ (но может чахлика) и ваапи который видимо падает на софтовый дефолт

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

сейчас попробую rocm навернуть

а не, это я в себя слишком поверил :-D

*** dma_resv->seq is missing. exit…. Stop.

и судя по багтрекеру это уже годами на дебиане по разным причинам, для 13 обещают починить «когда-нить в составе рокм7»

Ну точно скам :-D

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

Так основной смысл в энергопотреблении, а не производительности.

не совсем - на соседней машине rtx 4060 в два раза быстрее декодирует чем 14900 на h264_cuvid
мне просто много потоков надо паралелльно декодировать - смысл декодера разгрузить цпу и сразу свалить на гпу как минимум ресайз (ффмпег из коробки умеет судя по докам в ресайс в вгпу) и потом еще по возможности сразу как мат для opencv пользовать не гоняя в основную озу но это следующий шаг, хотелось бы для начала сам декодер оживить

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

Тестинг пришлось ставить с нуля ибо попытка воткнуть amdgpu не прошла незаметно и обвалила графоний от слова совсем
На чистеньком свеженьком тестинге с 6.16 ядром я так же печально не узрел декодера для вулкана на 9060 и профита от ваапи.
Видимо не судьба, радеон придется менять на правоверную невидию 🫤

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

Нет смысла на бинарных дистрах сидеть — у них там непонятно с какими флагами собран софт.

ffmpeg рассказывает по дефолту при запуске какие были флаги сборки, меса вроде давно везде с вулканом собирается, в 6.16 радеон есть и дебиан на удивление даже сам подтянул для него firmware т.е. проблема скорее глобальна чем дебиана

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

Вот откуда берётся «В вашем линукс ничего не работает!». А потом оказывается тот линукс, на котором пробовали запустить «что не работает» — софт собран хрен пойми как и с какими флагами. И половина того, что должно работать просто не работает.

ffmpeg рассказывает по дефолту при запуске какие были флаги сборки

И посмотрев их внимательно увидишь что нужных флагов нет и пойдёшь ставить дев пакеты, занимающие десятки гигобайт превращая твой бинарный дистрибутив в сурсбейсед с убогими возможностями для сборки в отличие от сурсбейсед, пересобирая пакеты с нужными тебе флагами. А потом ещё найдёшь пакет, который без нужных тебе флагов собран, и ещё и ещё... В результате накопится больше половины пакетов дистра и смысл сидеть на бинарном дистре пропадает полностью!

Известная тропинка. ))

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

А потом оказывается тот линукс, на котором пробовали запустить «что не работает» — софт собран хрен пойми как и с какими флагами.

Sir, парой постов выше выложены флаги сборки ffmpeg в которых есть и vulkan и vaapi и non-free чо уж там.
А вот откуда берутся лозунги «у амуде открытые дрова которые работают из коробки ведь они же прям в ядре и поддерживаются лучше всех!!1» действительно интересно 😁

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

у амуде открытые дрова которые работают из коробки

Так и есть, в рамках твоего вопроса.
У тебя изначально под vaapi все работало и быстрее работать не будет, ни под linux, ни под windows, по крайней мере в ffmpeg.

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

На тестинге так:

Trying display: wayland
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'radeonsi'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.22.0)
vainfo: Driver version: Mesa Gallium driver 25.0.7-2 for AMD Radeon Graphics (radeonsi, gfx1200, ACO, DRM 3.64, 6.16.3+deb14-amd64)
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
      VAProfileNone                   : VAEntrypointVideoProc
rukez ★★★★★
() автор топика
Ответ на: комментарий от arax

У тебя изначально под vaapi все работало и быстрее работать не будет, ни под linux, ни под windows, по крайней мере в ffmpeg.

меня смущает не столько сильно падающая скорость декодирования (допустим бытовые гпу действительно не рассчитаны молотить гигапиксели из коробки ибо не типовой режим использования) сколько то что при включении vaapi нагрузка на cpu не падает т.е. текущая реализация драйвера - как минимум унылая (ну или не работающая) ибо под оффтопиком декодер этой-же 9060ой таки разгружает cpu на таком-же ffmpeg’е - т.е. физически что декодер может что процесс в ффмпеге построен логично.

и это я пока сравниваю «в лоб» т.е. на один декодер отдельный поток, под невидией я могу в одном контексте куды декодировать несколько потоков параллельно - на радеоне это видимо остается «за кадром» :/

rukez ★★★★★
() автор топика