Это моя текущая команда для изменения размера видео (1080p) с 2 ГБ до 300 МБ, но это занимает много времени:
mkdir newfiles
for %%a in ("*.mp4") do ffmpeg -i "%%a" -c:v libx264 -preset slow -crf 21 -c:a aac -b:a 128k -vf scale=678:-2 "newfiles\%%~na.mp4"
pause
Я попробовал nvenc с моим NVIDIA GTX1070:
mkdir newfiles
for %%a in ("*.mp4") do ffmpeg -i "%%a" -c:v h264_nvenc -preset slow -c:a aac -b:a 128k -vf scale=678:-2 "newfiles\%%~na.mp4"
pause
Размер вывода всегда равен 3⨉ или 5⨉ оригинального размера - nvenc не использует -crf
.
Так как же использовать nvenc с ffmpeg для преобразования / изменения размера видео с высоким качеством и небольшим размером? Должен ли я использовать графический процессор для кодирования?
ffmpeg
video-encoding
hongducwb
источник
источник
slow
чтобыfast
в первой команде. CRF не реализован вnvenc
.Ответы:
Для кодировок на основе CRF передайте следующие аргументы в приведенном ниже фрагменте в FFmpeg:
Конечно, вам нужно будет настроить целевую скорость передачи данных и фиксированное
cq
значение. 19 является рекомендуемой настройкой, поскольку она «визуально идентична 0», но сохраняет хорошее соотношение сжатия к размеру файла. Посмотрите эту статью для получения дополнительной информации о том, что делает CRF.Обратите внимание, что
-cq
шкала логарифмическая, что означает, что 0 по существу без потерь, а 51 будет абсолютным худшим.Качество может быть улучшено путем добавления таких опций, как B-кадры (не более 3, для этого требуется основной профиль H.264 и выше. Базовые профили не поддерживают B-кадры. Для этого перейдите
-bf {uint}
к видеокодер, такой,-bf:v 4
что в результате кодер использует 4 B-кадра.Основные части здесь являются
-cq:v 19
и-rc:v vbr_hq
аргументы, которые позволяют вам настроить кодер как с переменной заданной скоростью передачи и максимально допустимой скоростью передачи (-b:v
и-maxrate:v
) соблюдая при этом значения CRF 19.А теперь небольшие заметки о NVENC и настройке его для высококачественного кодирования:
NVENC, как и любой другой аппаратный кодер, имеет несколько ограничений, и, в частности, HEVC, вот известные ограничения:
На Паскале:
Для кодирования HEVC применяются следующие ограничения:
У Тьюринга есть все улучшения, доступные для Pascal, с добавлением поддержки B-кадров для HEVC и возможностью использовать B-кадры в качестве эталона. Посмотрите этот ответ для примера этой возможности.
И на Maxwell Gen 2 (графические процессоры серии GM200x):
Кодировка HEVC не имеет следующих функций:
Влияние Максвелла на то, что тяжелые сцены в движении с HEVC при ограниченных битрейтах могут пострадать от артефактов (блочности) из-за отсутствующих функций просмотра и возможностей петлевой фильтрации с адаптивным смещением выборки (SAO). Pascal несколько улучшил эту возможность, но в зависимости от версии SDK, с которой был построен видеокодер, не все функции могут быть доступны.
Например, режим взвешенного прогнозирования для кодировок H.264 на Pascal требует NVENC SDK 8.0x и выше, и этот режим кодирования также отключит поддержку B-кадров. Аналогичным образом, комбинация аппаратных средств масштабирования, работающих на Nvidia Performance Primitives (NPP) с NVENC, может привести к повышению производительности в приложениях масштабирования видео за счет артефактов масштабирования, особенно с масштабированным контентом. Это также влияет на конвейер видеокодирования, поскольку функции масштабирования АЭС запускаются на ядрах CUDA на графическом процессоре, и поэтому влияние на производительность, вызванное дополнительной нагрузкой, следует анализировать в каждом конкретном случае, чтобы определить, соответствует ли качество производительности компромисс приемлем.
Имейте это в виду: аппаратный кодировщик всегда будет предлагать несколько меньшую настройку, чем эквивалентная программная реализация, и поэтому пробег и приемлемое качество вывода всегда будут отличаться.
И для вашей справки:
С FFmpeg вы всегда можете обратиться к настройкам кодера для настройки:
Итак, для кодеров на базе NVENC вы можете запустить:
Вы также можете увидеть все кодировщики на базе NVENC и масштабирующие устройства на базе NPP (если таковые созданы), выполнив:
Пример вывода на мой стенд:
источник
vbr_minqp
кажется, устарела сейчас. Я согласен с тем, что этот ответ может быть неправильно понят, поскольку для него нет режима CRFh264_nvenc
.Я считаю, что нашел решение:
Похоже, h264_nvenc использует
-qp
вместо-crf
. Эта опция работает только когда-rc
установленоconstqp
.источник
-qp
все отличается от-crf
. h264_nvenc 's-qp
эквивалентно libx264 ' s-qp
Для
-crf
замены из libx264 может быть-cq
или-qp
из h264_nvenc:-crf
Выберите качество для режима постоянного качества-cq
Установите целевой уровень качества (от 0 до 51, 0 означает автоматический) для режима постоянного качества в управлении скоростью VBR-qp
Метод управления скоростью параметра постоянного квантования (от -1 до 51) (по умолчанию -1)Самый быстрый аппаратно ускоренный метод кодирования:
-resize
разрешение на входе (аппаратно); не нужно компилировать ffmpeg--enable-libnpp
дляscale_npp
фильтра.Для получения дополнительной информации:
ffmpeg -h encoder=h264_nvenc
источник