ffmpeg сообщает “Не найдено подходящих устройств” для кодирования hevc nvenc, несмотря на наличие поддерживаемой графической карты.

Вопрос или проблема

Я пытаюсь транскодировать видео mp4 в hevc nvenc с помощью следующей команды:

ffmpeg -i test.mp4 -c:v hevc_nvenc output.mkv

Но я постоянно получаю ошибку, показанную в конце этого поста. Я использую ноутбук с графикой RTX 3060, который, как показано на этом сайте: https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new, поддерживает кодирование и декодирование HEVC.

Я пробовал транскодировать в h.264 nvenc, и в h.265 без nvenc, используя следующие команды:

ffmpeg -i test.mp4 -c:v h264_nvenc -c:a copy output.mkv

ffmpeg -i input.mp4 -c:v libx265 -c:a copy output.mkv

И обе команды сработали, так что, кажется, проблема только в hevc nvenc.

Вот вывод для hevc nvenc, любая помощь будет очень признательна:

  собран с gcc 13.2.0 (Rev5, создано проектом MSYS2)
  конфигурация: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libopenjpeg --enable-libquirc --enable-libuavs3d --enable-libxevd --enable-libzvbi --enable-libqrencode --enable-librav1e --enable-libsvtav1 --enable-libvvenc --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxeve --enable-libxvid --enable-libaom --enable-libjxl --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      59. 31.100 / 59. 31.100
  libavcodec     61. 11.100 / 61. 11.100
  libavformat    61.  5.101 / 61.  5.101
  libavdevice    61.  2.100 / 61.  2.100
  libavfilter    10.  2.102 / 10.  2.102
  libswscale      8.  2.100 /  8.  2.100
  libswresample   5.  2.100 /  5.  2.100
  libpostproc    58.  2.100 / 58.  2.100
Вход #0, mov,mp4,m4a,3gp,3g2,mj2, из 'test.mp4':
  Метаданные:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf59.16.100
  Продолжительность: 00:02:06.60, начало: 0.000000, битрейт: 4153 кбит/с
  Поток #0:0[0x1](und): Видеo: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 4014 кбит/с, 59.94 fps, 59.94 tbr, 60k tbn (по умолчанию)
      Метаданные:
        handler_name    : ISO Media file produced by Google Inc.
        vendor_id       : [0][0][0][0]
  Поток #0:1[0x2](eng): Аудио: aac (LC) (mp4a / 0x6134706D), 44100 Гц, стерео, fltp, 127 кбит/с (по умолчанию)
      Метаданные:
        handler_name    : ISO Media file produced by Google Inc.
        vendor_id       : [0][0][0][0]
Сопоставление потоков:
  Поток #0:0 -> #0:0 (h264 (native) -> hevc (hevc_nvenc))
  Поток #0:1 -> #0:1 (aac (native) -> vorbis (libvorbis))
Нажмите [q], чтобы остановить, [?] для помощи
[hevc_nvenc @ 00000147092cb0c0] Кодек не поддерживается
[hevc_nvenc @ 00000147092cb0c0] Не найдено совместимых устройств
[vost#0:0/hevc_nvenc @ 000001470929e980] Ошибка при открытии кодировщика - возможно, неверные параметры, такие как битрейт, скорость, ширина или высота.
[vf#0:0 @ 00000147092cb440] Ошибка отправки кадров в потребителей: Обобщенная ошибка во внешней библиотеке
[vf#0:0 @ 00000147092cb440] Задача завершена с кодом ошибки: -542398533 (Обобщенная ошибка во внешней библиотеке)
[vf#0:0 @ 00000147092cb440] Завершение потока с кодом возврата -542398533 (Обобщенная ошибка во внешней библиотеке)
[vost#0:0/hevc_nvenc @ 000001470929e980] Не удалось открыть кодировщик до конца файла
[vost#0:0/hevc_nvenc @ 000001470929e980] Задача завершена с кодом ошибки: -22 (Недопустимый аргумент)
[vost#0:0/hevc_nvenc @ 000001470929e980] Завершение потока с кодом возврата -22 (Недопустимый аргумент)
[out#0/matroska @ 00000147090f37c0] Ничего не записано в выходной файл, потому что по крайней мере один из его потоков не получил пакетов.
frame=    0 fps=0.0 q=0.0 Lsize=       0KiB time=N/A bitrate=N/A speed=N/A
Конвертация не удалась!

Попробуйте эту команду:

ffmpeg -v 0 -encoders | findstr "nvenc"

На моем оборудовании я получаю такой вывод:

V....D av1_nvenc            Кодировщик NVIDIA NVENC av1 (кодек av1)
V....D h264_nvenc           Кодировщик NVIDIA NVENC H.264 (кодек h264)
V....D hevc_nvenc           Кодировщик NVIDIA NVENC hevc (кодек hevc)

Это по крайней мере подтвердит, что ваш ffmpeg содержит эти кодировщики.

Ответ или решение

Проблема, с которой вы столкнулись, связана с конфигурацией вашей среды для использования NVIDIA NVENC для кодирования в HEVC (h.265). Хотя ваша видеокарта GeForce RTX 3060 действительно поддерживает HEVC, данный сбой может происходить по нескольким причинам. Рассмотрим возможные решения проблемы.

Шаги для решения проблемы

  1. Проверьте версию драйвера NVIDIA:
    Убедитесь, что у вас установлены последние драйвера для вашей видеокарты. Вы можете скачать актуальные версии драйверов с официального сайта NVIDIA. Обновление драйверов может помочь устранить проблемы совместимости с кодеком.

  2. Проверьте, поддерживается ли hevc_nvenc в текущей сборке FFmpeg:
    Выполните команду:

    ffmpeg -encoders | findstr "nvenc"

    Убедитесь, что в списке доступных кодеков присутствует hevc_nvenc. Если этого кодека нет, вам необходимо установить FFmpeg с поддержкой NVENC. Обычно, версии, скомпилированные с опцией --enable-nvenc, поддерживают работу с NVENC.

  3. Проверьте параметры кодирования:
    Возможно, параметры кодирования, такие как разрешение, битрейт или частота кадров, находятся за пределами допустимых значений для вашего GPU. Попробуйте указать явные значения:

    ffmpeg -i test.mp4 -c:v hevc_nvenc -b:v 5M -preset fast output.mkv

    В данном примере мы устанавливаем битрейт на 5 Мбит/с и используем предустановку fast.

  4. Убедитесь в наличии необходимых библиотек и кодеков:
    Иногда отсутствуют дополнительные софта для работы с NVENC. Убедитесь, что в вашей системе установлены необходимые зависимости для работы FFmpeg с NVIDIA NVENC.

  5. Переход на более новую версию FFmpeg:
    Если проблема сохраняется, попробуйте обновить FFmpeg до последней версии. Новые версии могут содержать исправления и улучшения работы с NVENC.

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

    ffmpeg -hwaccels

    Это покажет, какие аппаратные ускорения доступны. Также можно использовать команду:

    nvidia-smi

    Это даст информацию о состоянии GPU и о том, используются ли ресурсы.

  7. Перезагрузите систему:
    Если после обновления драйверов и FFmpeg проблема persists, попробуйте перезагрузить систему. Иногда программное обеспечение может не корректно инициализировать GPU при первом запуске.

Заключение

Если после выполнения всех вышеуказанных шагов проблема не решается, возможно, стоит обратиться к сообществу FFmpeg или NVIDIA, чтобы получить помощь. Также полезно проверить их форумы на наличие аналогичных случаев и решений. Надеюсь, эти рекомендации помогут вам успешно настроить кодирование HEVC с использованием NVENC на вашей системе.

Оцените материал
Добавить комментарий

Капча загружается...