Я сжимаю несколько видео для архивирования и пришел к такой конфигурации, которая дает мне хорошее общее качество при небольшом размере:
ffmpeg -threads 4 -y -hide_banner -i input.mp4 -vf scale=-2:480 -c:v libx264 -b:v 200k -preset slow -tune animation -movflags faststart -pix_fmt yuv420p -an -f mp4 -pass 1 NUL
ffmpeg -threads 4 -y -hide_banner -i input.mp4 -vf scale=-2:480 -c:v libx264 -b:v 200k -preset slow -tune animation -movflags faststart -pix_fmt yuv420p -pass 2 2-pass-x264.mp4
Это качество вывода приемлемо для моих нужд:
Но хотелось бы аппаратного ускорения, оно намного быстрее.
Итак, я попытался:
ffmpeg -hwaccel nvdec -y -hide_banner -i input.mp4 -vf scale=-2:480 -movflags faststart -pix_fmt yuv420p -c:v h264_nvenc -b:v 200k -maxrate 2M -bufsize 1M -rc-lookahead:v 30 -rc:v vbr_hq -preset slow -profile:v high -level 5.1 -an h264_nvenc.mp4
Но это дает мне результат с худшим общим качеством, а в сложных частях все становится еще хуже:
Можно ли добиться такого же общего качества (для низкого битрейта) с помощью кодировщика h264_nvenc?
Не на самом деле нет. Более новые карты nvidia на основе Turing будут давать лучшее качество, чем предыдущие поколения. Но поскольку nvenc — это фиксированная функция, а не программное обеспечение, работающее на графическом процессоре, его нельзя обновить или изменить, за исключением нескольких параметров, таких как предустановки.
h264_nvenc может кодировать с постоянным качеством, по крайней мере, начиная с Pascal. Мне пришлось немало покопаться в Интернете, чтобы понять, как правильно его использовать, но, наконец, я нашел работающую формулу.
Команда, подобная приведенной ниже, будет записывать с постоянным качеством, а значение CQ 26 будет производить примерно такое же, но немного лучшее качество, измеренное с помощью VMAF, как при кодировании libx264 со следующими параметрами: -vcodec libx264 -level 4.1 -profile:v high -tune film -preset medium -crf 23
. Битрейт H264_Nvenc был примерно на 19% выше, чем кодирование libx264, но у него был немного лучший показатель VMAF. Я провел эти тесты на некоторых игровых записях 1080p60, а также на некоторых трейлерах к фильмам 1080p.
ffmpeg -i input.mkv -c:v h264_nvenc -preset p6 -profile:v high -tune hq -rc-lookahead 8 -bf 2 -rc vbr -cq 26 -b:v 0 -maxrate 120M -bufsize 240M output.mkv
Важный:
-maxrate 120M -bufsize 240M
, режим CQ не будет вести себя соответствующим образом, и снижение его значения не даст лучших результатов. Режим постоянного качества активируется путем указания управления переменным битрейтом вместе с параметром CQ, битрейтом, установленным на ноль, и двумя вышеуказанными параметрами, установленными на какое-то большое значение, которое не будет ограничивать вывод. Не бойтесь этих значений, так как битрейт будет неплохим.Укажите битрейт, как -b:v 0
сделал трюк, общий битрейт увеличился с 2m
до 16m
.
ffmpeg -i in.mp4 -c:v h264_nvenc -b:v 0 out.mp4
пользователь27704
SlimSCSI