ffmpeg с NVenc, похоже, не использует мой GPU.

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

Я пытался конвертировать видео высокого разрешения в 2k. Я использовал эту команду:

ffmpeg -i input_video.mp4 -vf scale=1920:1080 -c:v h264_nvenc -preset slow -b:v 8M output_video.mp4

Согласно результатам top и nvidia-smi, мой процессор работал на максимуме, но мой графический процессор едва использовался. Процесс ffmpeg использовал всего около 240 МиБ видеопамяти.

nvidia-smi dmon показал много активности enc. Но низкое использование видеопамяти и высокая загрузка процессора заставляют меня думать, использует ли ffmpeg мой графический процессор в полную силу.

nvidia-smi dmon                                                                                     
# gpu    pwr  gtemp  mtemp     sm    mem    enc    dec    jpg    ofa   mclk   pclk
# Idx      W      C      C      %      %      %      %      %      %    MHz    MHz
    0      -     74      -      6      8     66      0      -      -   3504    420
    0      -     74      -      6      8     71      0      -      -   3504    420
    0      -     74      -      6      8     70      0      -      -   3504    420
    0      -     74      -      6      8     71      0      -      -   3504    420
    0      -     74      -      6      7     63      0      -      -   3504    420
    0      -     74      -      5      7     56      0      -      -   3504    420
    0      -     74      -      6      8     70      0      -      -   3504    420
    0      -     74      -      6      8     67      0      -      -   3504    420
    0      -     74      -      6      8     69      0      -      -   3504    420
    0      -     74      -      6      8     71      0      -      -   3504    420
    0      -     74      -      6      8     68      0      -      -   3504    420

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

Почему FFmpeg с NVENC не использует вашу GPU на полную мощность

Когда вы запускаете команду FFmpeg с использованием кодека h264_nvenc, вы ожидаете, что ваша видеокарта NVIDIA активно будет участвовать в процессе кодирования. Однако, как вы отметили, ваша CPU использует максимальные ресурсы, в то время как GPU лишь немного активен. Это может быть связано с несколькими факторами, которые мы подробно рассмотрим ниже.

1. Проверка совместимости и конфигурации системы

Убедитесь, что ваша система полностью поддерживает NVENC:

  • Драйверы: Проверьте, что вы используете актуальные драйверы NVIDIA, совместимые с вашей видеокартой и FFmpeg. Рекомендуется скачать последние версии драйверов с официального сайта NVIDIA.
  • Версия FFmpeg: Убедитесь, что у вас установлена версия FFmpeg, которая поддерживает NVENC. Обычно это включает использование FFmpeg, собранного с поддержкой --enable-nvenc.

2. Параметры командной строки

Ваша команда:

ffmpeg -i input_video.mp4 -vf scale=1920:1080 -c:v h264_nvenc -preset slow -b:v 8M output_video.mp4

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

  • Уровень кодирования: Попробуйте указать значение уровня с помощью опции -profile:v high или другого, соответствующего вашему контенту.
  • Качество кодирования: Обратите внимание на установку -preset. Хотя slow может использовать больше ресурсов, также можно попробовать high-performance или просто medium, чтобы увидеть, изменится ли ситуация.
  • Динамическое регулирование: Рассмотрите возможность использования параметра -gpu, чтобы указать использование определенного GPU, если у вас их несколько.

3. Избегание перегрузки CPU

Если CPU активно используется, это может говорить о том, что кодирование передается сначала на CPU. Рассмотрите возможность использования опции -hwaccel cuda, чтобы FFmpeg мог лучше управлять статической загрузкой GPU.

4. Контролируйте запрещенные факторы

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

5. Мониторинг производительности

Используйте следующие команды, чтобы получить больше информации о загрузке GPU:

  • nvidia-smi: Позволяет следить за загрузкой GPU в режиме реального времени.
  • ffmpeg -stats: Добавление этого параметра к команде позволит выводить более детальную информацию о процессе кодирования.

Заключение

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

Ограничение использования ресурсов — это нормальное явление, и при внесении корректировок, вы сможете максимально эффективно использовать свой GPU и ускорить процесс кодирования.

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

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