LINUX.ORG.RU

Аппаратное ускорение кодирования видео в Linux

 , ,


0

2

Приветствую, нужна помощь сообщества.

Использую свой компьютер для монтажа видеороликов в Kdenlive. Видео в 4к обрезаются, добавляются эфекты и собирается в 1080р или 1440р. При сборке Kdenlive вообще практически не использует процессор и не использует вообще видеокарту. Загрузка процессора в районе 15%, а видеокарты в районе погрешности.

Тестовый кусок видео длительностью 1:25 кодируется со средней скоростью 6 к/с за 6:57.

При сборке проекта я пробовал использовать следующие пресеты с аппаратным ускорением:

  1. NVENC H264 ABR (ab=160k acodec=aac channels=2 f=mp4 real_time=-1 threads=0 vb=6000k vcodec=h264_nvenc)
  2. NVENC H265 ABR (ab=160k acodec=aac channels=2 f=mp4 real_time=-1 threads=0 vb=6000k vcodec=hevc_nvenc)
  3. NVENC AV1 VBR (ab=160k acodec=aac channels=2 f=mp4 rc=constqp real_time=-1 threads=0 vcodec=av1_nvenc vq=72 vqp=72)

Результат - один и тот же (описал выше).

Теперь мой сетап:

  • Операционная система: openSUSE Tumbleweed 20251127
  • Версия KDE Plasma: 6.5.3
  • Версия KDE Frameworks: 6.20.0
  • Версия Qt: 6.10.1
  • Версия ядра: 6.12.59-1-longterm (64-бита)
  • Графическая платформа: Wayland
  • Процессоры: 16 × AMD Ryzen 7 3700X 8-Core Processor
  • Память: 32 ГиБ ОЗУ (31,3 ГиБ доступно)
  • Графический процессор: NVIDIA GeForce RTX 5060 Ti 16Gb (driver 580.95.05)

При таком сетапе очень обидно не использовать всюмощь современного железа.

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

Перемещено anonymous_incognito из talks


Kdenlive использует ffmpeg, проверь работает ли вообще в твоей системе с твоими драйверами аппаратное ускорение. Для начала собран ли с ним ffmpeg.

ffmpeg -encoders | grep nvenc

Должно быть что-то вроде:
V....D h264_nvenc           NVIDIA NVENC H.264 encoder
V....D hevc_nvenc           NVIDIA NVENC hevc encoder
V....D av1_nvenc            NVIDIA NVENC av1 encoder

Попробуй что-то закодировать им, вроде примерно так: ffmpeg -f lavfi -i input_testvideo -c:v h264_nvenc -t 10 output_nvenc.mp4

Если получилось, сравни это с временем на cpu с libx264 энкодером.

Проверь банально есть ли текущий юзер, который $USER в группах video и render, ещё могут быть разные пакеты для ffmpeg и nvenc ffmpeg-nv* всякое. Ещё может Wayland портить, попробуй в X11 сессии, если можно.

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

ffmpeg -encoders | grep nvenc

Да, вот это я смотрел, выхлоп такой же как у тебя, т.е. ffmpeg собран с поддержкой ап. ускорения.

Остальное смогу проверить только вечером.

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

ffmpeg -encoders | grep nvenc

ffmpeg version 7.1.2 Copyright (c) 2000-2025 the FFmpeg developers built with gcc 15 (SUSE Linux) configuration:… –prefix=/usr –libdir=/usr/lib64 –shlibdir=/usr/lib64 –incdir=/usr/include/ffmpeg –extra-cflags=‘-O2 -Wall -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -flto=auto -ffat-lto-objects -g’ –optflags=‘-O2 -Wall -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -flto=auto -ffat-lto-objects -g’ –disable-htmlpages –enable-pic –disable-stripping –enable-shared –disable-static –enable-gpl –enable-version3 –enable-libsmbclient –disable-openssl –enable-gnutls –enable-ladspa –enable-libshaderc –enable-vulkan –enable-libplacebo –enable-libaom –enable-libass –enable-libbluray –enable-libbs2b –enable-libcdio –enable-libcodec2 –enable-libdav1d –enable-libdc1394 –enable-libdrm –enable-libfontconfig –enable-libfreetype –enable-libfribidi –enable-libgsm –enable-libiec61883 –enable-libjack –enable-libjxl –enable-librist –enable-libmp3lame –enable-libmysofa –enable-libopenjpeg –enable-libopenmpt –enable-libopenh264 –enable-libopus –enable-libpulse –enable-librav1e –enable-librubberband –enable-libsvtav1 –enable-libsoxr –enable-libspeex –enable-libssh –enable-libsrt –enable-libtheora –enable-libtwolame –enable-libvidstab –enable-libvmaf –enable-libvorbis –enable-libvpx –enable-libwebp –enable-libxml2 –enable-libzimg –enable-libzmq –enable-libzvbi –enable-lto –enable-lv2 –enable-libvpl –enable-vaapi –enable-vdpau –enable-version3 –enable-libfdk-aac-dlopen –enable-nonfree –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libvo-amrwbenc –enable-libx264 –enable-libx265 –enable-libxvid

  • libavutil 59. 39.100 / 59. 39.100
  • libavcodec 61. 19.101 / 61. 19.101
  • libavformat 61. 7.100 / 61. 7.100
  • libavdevice 61. 3.100 / 61. 3.100
  • libavfilter 10. 4.100 / 10. 4.100
  • libswscale 8. 3.100 / 8. 3.100
  • libswresample 5. 3.100 / 5. 3.100
  • libpostproc 58. 3.100 / 58. 3.100

V….D av1_nvenc NVIDIA NVENC av1 encoder (codec av1)

V….D h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)

V….D hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc)

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

ffmpeg -hwaccel cuda -i 194.mp4 -c:v h264_nvenc -vf "scale=2560:1440" -b:v 10M output.mp4

11s (грузится видеокарта под 100%)

ffmpeg -hwaccel cuda -i 194.mp4 -c:v libx264 -vf "scale=2560:1440" -b:v 10M output2.mp4

52s (грузится только процессор под 100%)

ffmpeg -hwaccel cuda -i 194.mp4 -c:v av1_nvenc -vf "scale=2560:1440" -b:v 10M output3.mp4

11s (грузится видеокарта под 100%)

ffmpeg -hwaccel cuda -i 194.mp4 -c:v hevc_nvenc -vf "scale=2560:1440" -b:v 10M output4.mp4

11s (грузится видеокарта под 100%)

ffmpeg -hwaccel cuda -i 194.mp4 -c:v libx265 -vf "scale=2560:1440" -b:v 10M output5.mp4

2m04s (грузится только процессор под 100%)

iKido
() автор топика
Ответ на: комментарий от ya-betmen

Проблема в том что kdenlive не хочет кодировать с аппаратным ускорением, при том что выбираю пресет с кодеком h264_nvenc. Более того он при кодировании даже проц не нагружает толком, в отличии от ffmpeg с libx264 запущенным отдельно.

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

Ну потомучто в kdenlive я умею монтировать, а обучаться новой программе нет времени. И если уж учится то davinchi resolve, а не какому-то ноунейму про, который никогда не слышал даже.

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

Уже хорошо, то есть, в принципе в системе работает аппаратное кодирование nvenc, это что-то с kdenlive не так.

У меня сейчас под рукой нет компа с nvidia, так что не очень помогу с ними, но всё же.

Проверь для начала каким ffmpeg пользуется kdenlive? Их там кучи могут быть. При запуске kdenlive валит сообщения в терминал (попробуй ещё с опцией kdenlive --debug) , там что-то должно быть про ffmpeg и nvenc, также в меню настроек в Environment где-то должен быть прописан путь к ffmpeg. Может даже LD_PRELOAD к правильной libffmpeg.so придётся настроить.

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

Разрабы в лучших традициях опенсорса закрывают искью как дупликат или с припиской «у меня всё работает», с чем мы его, конечно, поздравляем, а сами сидим со сломаным ускорением. Так что Хэ его Зэ, если честно, как быть.

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

Проверь для начала каким ffmpeg пользуется kdenlive?

Как я понял он пользуется фреймвёрком MLT. Я хотел было создать свой пресет и вкарячить в него параметры из рабочей команды, но там не ffmpeg запускается напрямую.

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

При запуске kdenlive валит сообщения в терминал

Относительно рендеринга валит он следующее:

CREATED JOB WITH ARGS:  QList("delivery", "/usr/bin/melt-7", "/tmp/kdenlive-aXKUPt-1.mlt", "--pid", "3503") 
starting kdenlive_render process using:  "/usr/bin/kdenlive_render" 
RECEIVED PROGRESS INFO:  "/home/kido/Видео/test.mp4" , progress: 0 , FRM:  0 
RECEIVED PROGRESS INFO:  "/home/kido/Видео/test.mp4" , progress: 1 , FRM:  27
...
и так далее

В этом mlt-файле нет упоминание ffmpeg, а nvenc встречается в одном месте в строке:

<consumer ab="160k" acodec="aac" channels="2" deinterlacer="bwdif" f="mp4" in="0" mlt_service="avformat" out="2609" real_time="-1" rescale="hyper" target="/home/kido/Видео/test.mp4" threads="0" vb="6000k" vcodec="h264_nvenc"/>

Вообще в настройках есть закладка «Окружение» и там «Окружение MLT», где указаны пути до:

/usr/bin/ffmpeg
/usr/bin/ffplay
/usr/bin/ffprobe
/usr/bin/melt-7
/usr/share/mlt-7/profiles
iKido
() автор топика
Ответ на: комментарий от anonymous

Спасибо за ваш отчет.

Обратите внимание, что рендеринг вашего проекта состоит из двух этапов: 1) Применение всех эффектов, композиций и переходов; 2) Кодирование отрендеренных кадров с помощью выбранного кодировщика и добавление их в выбранный контейнер.

Шаг 1) выполняется исключительно MLT, базовой структурой для всех операций компоновки и фильтрации, которая не использует GPU из-за нерешенных проблем между MLT, movit (библиотекой для ускорения GPU) и Kdenlive. Обсуждения и работа продолжаются, но из-за небольшого размера команды прогресс идет медленнее, чем нам хотелось бы.

Шаг 2) — единственный, где возможно ускорение GPU путем выбора профилей NVENC или VAAPI. Но это лишь самая маленькая часть рендеринга, поэтому GPU в основном простаивает во время процесса рендеринга Kdenlive.

Так ответили на багрепорт (https://bugs.kde.org/show_bug.cgi?id=512987). И действительно я замечал такое поведение, если добавить эффектов, то первая часть (хотя они пишут, что это происходит во второй) сборки идёт полностью на ГПУ с загрузкой под 100%, а затем скорость резко падает до нескольких кадров в секунду.

Попробовал без добавления эффектов этот тестовый кусок видео перегнать из 4к в 1440р - получилось 26 к/с почти за 2 минуты, загрузка ГПУ стабильно в районе 30%. Всё равно ffmpeg делает это на порядок быстрее.

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

Всё равно ffmpeg делает это на порядок быстрее.

ffmpeg умеет напрямую в видеопамяти декодер и энкодер соединять - так конечно быстрее.

В cingg можно свой пресет создать для энкодера. А в yuv4mpeg в kdenlive вывода нет? Если есть, можно видео выгнать через fifo файл во внешний ffmpeg, а потом звук добавить.

Andrew-R ★★★★★
()
Ответ на: комментарий от Sylvia

а если попробовать с вулканом?

А зачем? ffmpeg и так хорошо справляется вместе с h264_nvenc. Проблема в Kdenlive, а точнее в фреймворке MLT.

В багрепорте разрабы отписались, что знают о ней и думают как победить, но сил и средств на это слишком мало и пока так.

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

В близжайшее время должны починить, разрабы сообщили что скоро завезут нормальное аппаратное ускорение.

Пока можете пользоваться функцией пререндера.

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

В близжайшее время должны починить, разрабы сообщили что скоро завезут нормальное аппаратное ускорение.

ЗдОрово, если так.

Пока можете пользоваться функцией пререндера.

А это как?

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

Я еще не сразу заметил:

При сборке Kdenlive вообще практически не использует процессор.

Тут в пункте «Parallel processing» описано как включить многопоточный рендеринг. Рекомендуется выставлять половину от имеющихся потоков.

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

Вчера вышел в релиз 25.12, пишут следующее:

We fixed the VAAPI support in AppImage, allowing for faster decoding and render time

Возможно что-то еще поправили с аппаратным ускорением.

З.Ы. проверил, у меня работает на старом Thinkpad X230 с h.264, даже настраивать не пришлось, думаю на другом железе все также должно быть.

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

Пока можете пользоваться функцией пререндера.

Это не то. Это пререндер видео на монтажном столе для плавного просмотра сильно нагруженного эффектами проекта. К финальной сборке самого проекта отношения не имеет.

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

Тут в пункте «Parallel processing» описано как включить многопоточный рендеринг. Рекомендуется выставлять половину от имеющихся потоков.

Попробовал. 16-ти потоковый процессор. Выставил 8. На 70% грузит одно ядро, остальные прохлаждаются.

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

VAAPI - это для видео от intel и AMD. У меня nvidia и новый релиз мне не принёс никаких изменений. На работе попробую там ryzen 5700G со видеовстройкой по идее должно работать ускорение, через VAAPI

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