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
() автор топика
Ответ на: комментарий от iKido

Попробуй грепнуть каталог кденлайва на предмет h264_nvenc, и посмотреть в конфиг какие там параметры, возможно там чего-то не то написано.

ya-betmen ★★★★★
()
Ответ на: комментарий от 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

ну мало ли, вдруг именно nvenc не цепляло, а вулкан более универсален. Сравнивала с nvenc, производительность та же.

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

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

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

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

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

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

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

А это как?

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

А это как?

Увы, не знаю, сам видео редко редактирую, да и мощностей хватает без аппаратного ускорения.

Вроде нашел, но не уверен.

svidrigaylov
()

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

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

Тут (kdenlive.org) в пункте «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
() автор топика
17 июня 2026 г.

Извиняюсь за оффтопик, вы где-то писали, что когда-нибудь перейдете на Slowroll, там коменты уже закрыты, так решил спросить тут. Пробовали? Как оно там?

Я попробовал, вроде неплох, но поговаривают возникают иногда проблемы с зависимостями

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

Я попробовал слоуролл и мне не понравилось. Главное из-за чего я хотел перейти на него - меньше обновлений ядра по сравнению с TW, но оказалось, что их не меньше и мне всё также приходится чуть ли не после каждого обновления переустанавливать блоб нвидии. А с зависимостями проблемы возникают и на TW, ну их можно разрешить (если это просто разные версии пакетов из разных репо), ну или временно не обновляться недельку, если «безболезненно» разрешить не выходит, обычно за недельку пакетная база восстанавливается до норм. состояния и конфликты не возникают.

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

Кодирование на видеокарте не рекомендуют использовать из-за низкого качества.

LongLiveUbuntu ★★★★★
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария