Какие параметры сжатия видео H.264 / H.265 обеспечивают DVD-эквивалентное качество с лучшим сжатием?

11

У меня есть коробка DVD-видеодисков, от которой я хочу избавиться, в то время как я хотел бы сохранить видео, преобразовав их в файлы MP4 для хранения на жестком диске.

Учитывая превосходство современных алгоритмов сжатия H.264 AVC и H.265 HEVC над стандартом DVD MPEG2, я надеюсь сэкономить место на жестком диске, сжимая видео, сохраняя при этом ~ 99% исходного качества DVD.

какая

  • Параметры сжатия H.264 (FFMPEG + libx264)
  • Параметры сжатия H.265 (FFMPEG + libx265)

я должен использовать для достижения своей цели?

Под параметрами я подразумеваю значения CBR / CRF, пресет (пожалуйста, без veryslow / плацебо), флаги и т. Д.

PS: Я бы предпочел ограничить использование -pix_fmt yuv420pи -profile:v baseline -level 3.0убедиться, что файл воспроизводится нормально на всех устройствах, включая старые, использующие старые аппаратные чипы декодера. Использование несколько увеличенной частоты I-кадров (с использованием -gпараметра) также желательно для облегчения использования медленных носителей с низкой скоростью и высокой задержкой.

Что касается HEVC, я бы также предпочел использовать параметры, которые обеспечивали бы плавное аппаратно-ускоренное воспроизведение на устройствах, которые его поддерживают, но я не хочу фокусироваться на этом ограничении, поскольку я не видел ни одного устройства, предлагающего аппаратно-ускоренное H.265. декодирования вообще пока нет.

Иван
источник

Ответы:

14

Обратите внимание, что для этого вы всегда должны использовать последнюю версию ffmpeg и, предпочтительно, скомпилировать ее самостоятельно . Это дает вам доступ к самым последним libx265 и libfdk-aac для кодирования звука.

Кроме того, экономия скорости передачи данных будет весьма существенной, если вы перейдете с DVD-диска ~ 10 Мбит / с до 1-2 Мбит / с для видео H.264 и 0,5–1 Мбит / с для видео H.265. Изменение качества в следующих шагах может повлиять на битрейт, но все же уменьшение данных должно быть значительным.

H.264

Для контроля качества / скорости вы хотите использовать режим CRF в libx264, а не постоянный битрейт. Использование CRF гарантирует сохранение среднего качества независимо от исходного разрешения видео или его сложности. Постоянный битрейт действительно полезен, только если вы ограничены средой передачи (например, скорость жесткого диска, пропускная способность Интернета).

Выбор значения CRF является сложной частью. Это требует от вас посмотреть на вывод. Значение по умолчанию для libx264 (23) предлагает довольно хороший компромисс между размером и качеством. Но, учитывая, что ваш исходный источник уже сжат (и не очень хорошего качества по сравнению с Blu-ray), вы можете изменить CRF на немного более низкий, например 20. Это увеличит необходимый битрейт примерно на треть ,

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

ffmpeg -i input \
-c:v libx264 -crf 20 -pix_fmt yuv420p \
-x264-params keyint=240:min-keyint=20 \
-preset:v slow -profile:v baseline -level 3.0 \
-c:a libfdk_aac -vbr 4 \
output.mp4

Встроенный кодировщик ffmpeg AAC можно использовать, если libfdk-aac недоступен. Используйте -c:a aac -strict experimental -b:a 128kвместо -c:a libfdk_aac -vbr 4.

H.265

Исследования показывают, что использование HEVC приведет к экономии битрейта до 74% по сравнению с H.264. Это основано на субъективном просмотре данных последовательностей Ultra-HD. Конечно, это зависит от временной сложности исходного контента, и объем сохраняемых данных не будет таким высоким для трудно кодируемых последовательностей. В любом случае вы можете с уверенностью сказать, что сокращение данных на 50% абсолютно возможно.

CRF по умолчанию для libx265 - 28. Используя тот же исходный контент, он дает примерно половину битрейта по сравнению с libx264 на CRF 23. Это независимо от фактического битрейта, т. Е. Если версия H.264 требует 1,5 Мбит / с, тогда H.265 будет использовать около 750 кбит / с, но это 750 кбит / с против 350 кбит / с для другой последовательности. Я запустил его на нескольких последовательностях с разрешением DVD-PAL и не смог определить разницу с точки зрения качества.

ffmpeg -i input \
-c:v libx265 -pix_fmt yuv420p \
-x265-params crf=28:keyint=240:min-keyint=20 \
-preset:v slow \
-c:a libfdk_aac -vbr 4 \
output.mp4

Для получения дополнительной информации, вот соответствующие ресурсы:

slhck
источник
Спасибо за прекрасный ответ. Что Клинт означает практически между прочим?
Иван
1
Значение keyintx264 / x265 - это интервал между кадрами IDR, то есть интервал между ключевыми кадрами, с которым декодер может обновляться. Между ними могут быть I-кадры без ключевых кадров, например, когда происходит смена сцены. Это эквивалентно -gпараметру, если я не ошибаюсь.
slhck
Кстати, @slhck, вещь, которая удивила меня в вашем ответе - внимание, которое вы уделяете выбору библиотеки кодирования AAC. Раньше я думал, что все они почти одинаковы, и почти или совсем не имеют значения, что в аудио части все просто (просто выберите битрейт и вперед и что все основные кодеки с потерями, такие как MP3, AAC и Vorbis, звучат почти или точно то же самое при 128 кбит / с и выше). Вы имеете в виду, что на самом деле есть заметная разница между libfdk-aac и обычным aac?
Иван
1
@Ivan Сборки Zeranoe определенно должны позволять вам делать, -c:a aac -strict experimentalкак указано в моем ответе. И я согласен, я бы не стал создавать его на Windows.
slhck
2
@Ivan (1-й комментарий): см. Ffmpeg-wiki : «Основано на качестве, полученном от высокого до низкого: libopus > libvorbis >= libfdk_aac > aac > libmp3lame >= libfaac >= eac3/ac3 > libtwolame > vorbis > mp2 > wmav2/wmav1только для AAC: (потому что это немного сбивает с толку, с 3 доступными кодировщиками): libfdk_aac > aac > libfaacзнак> = означает больше или то же самое качественный."
Голар Рамблар