Перейти к содержанию

Encoding/H.265

Материал из Мадока ВТ Вики

Руководство по кодированию видео H.265/HEVC

Это руководство посвящено кодировщику libx265, который может обеспечить экономию битрейта примерно на 25–50% по сравнению с видео H.264, закодированным с помощью libx264, при сохранении того же визуального качества. Этот выигрыш будет наиболее заметен при разрешениях 1080p и выше.

См. информацию о поддерживаемых аппаратных кодировщиках H.265/HEVC.

Получение ffmpeg с поддержкой libx265

ffmpeg должен быть скомпилирован с флагами конфигурации --enable-gpl --enable-libx265 и требует установки x265 в вашей системе. Руководства по компиляции показывают, как это сделать.

Вы также можете скачать статическую сборку, все из которых включают libx265.

Просмотр опций

Вы можете вывести список приватных опций, доступных в этом кодировщике, с помощью команды ffmpeg -h encoder=libx265.

Режимы управления битрейтом

Подобно x264, кодировщик x265 имеет несколько алгоритмов управления битрейтом, включая:

  • 1-проходный целевой битрейт (устанавливается через -b:v)
  • 2-проходный целевой битрейт
  • Постоянный Фактор Качества (CRF)

В этом руководстве мы сосредоточимся на CRF и двухпроходном кодировании, так как 1-проходное кодирование с целевым битрейтом не рекомендуется.

Постоянный Фактор Качества (CRF)

Используйте этот режим, если вы хотите сохранить хорошее визуальное качество и не заботитесь о точном битрейте или размере файла закодированного видео. Этот режим работает точно так же, как в x264, за исключением того, что максимальное значение всегда 51, даже при поддержке 10-бит, поэтому, пожалуйста, прочтите руководство по H.264 для получения дополнительной информации.

Как и в случае с x264, вам нужно сделать несколько выборов:

  • Выберите CRF. CRF влияет на качество. Значение по умолчанию — 28, и оно должно визуально соответствовать видео libx264 с CRF 23, но приводить примерно к половине размера файла. CRF работает так же, как в x264, поэтому выберите наибольшее значение, обеспечивающее приемлемое качество.
  • Выберите пресет (preset). По умолчанию — medium. Пресет определяет параметры сжатия и эффективность и, следовательно, влияет на скорость кодирования и размер. Доступные пресеты: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow и placebo. Используйте самый медленный пресет, на который у вас хватит терпения, с приемлемым CRF для этого пресета. Игнорируйте placebo, так как он дает незначительный выигрыш при значительном увеличении времени кодирования. Обратите внимание, что значения CRF отличаются в зависимости от выбранного пресета, более медленный пресет обеспечивает большее сжатие на бит, но может увеличить размер файла. Если сравнить ultrafast с veryslow при одинаковом значении CRF, veryslow может создать файл большего размера с общим лучшим сжатием. Так, например, если -preset ultrafast с -crf 15 создает файл сравнимого размера с veryslow -crf 20, файл с пресетом veryslow будет иметь лучшее качество при том же размере файла. Вы также можете указать битрейт для пресета (см. ниже) вместо CRF для контроля размера файла при определенном уровне сжатия.
  • Выберите настройку (tune) (необязательно). По умолчанию отключено, и обычно не требуется устанавливать опцию настройки. x265 поддерживает следующие опции -tune: psnr, ssim, grain, zerolatency, fastdecode. Они объясняются в руководстве по H.264.

Например:

ffmpeg -i input -c:v libx265 -crf 26 -preset fast -c:a aac -b:a 128k output.mp4

Этот пример использует аудио AAC с битрейтом 128 кбит/с. Здесь используется встроенный кодировщик AAC FFmpeg, но в статье про AAC вы найдете информацию о дополнительных опциях.

Двухпроходное кодирование

Этот метод обычно используется, если вы нацелены на конкретный размер выходного файла, а качество от кадра к кадру менее важно. Лучше всего это объяснить на примере. Ваше видео длится 10 минут (600 секунд), и желаемый размер выходного файла — 200 МиБ. Поскольку битрейт = размер файла / продолжительность:

(200 МиБ * 8388.608 [переводит МиБ в кбит; примечание: не 8192, так как 1 кбит = 1000 бит]) / 600 секунд = ~2796 кбит/с общий битрейт
2796 - 128 кбит/с (желаемый битрейт аудио) = 2668 кбит/с битрейт видео

Вы также можете пропустить расчет битрейта, если уже знаете, какой конечный (средний) битрейт вам нужен.

Пример двухпроходного кодирования

Для двухпроходного кодирования вам нужно запустить ffmpeg дважды, почти с одинаковыми настройками, за исключением следующего:

  • В проходах 1 и 2 используйте опции -x265-params pass=1 и -x265-params pass=2 соответственно.
  • В проходе 1 выводите результат в нулевой файловый дескриптор, а не в реальный файл. (Это создаст лог-файл, который ffmpeg понадобится для второго прохода.)
  • В проходе 1 вы можете исключить аудио, указав -an.

Для libx265 опция -pass (которую вы бы использовали для libx264) не применима.

ffmpeg -y -i input -c:v libx265 -b:v 2600k -x265-params pass=1 -an -f null /dev/null && \
ffmpeg -i input -c:v libx265 -b:v 2600k -x265-params pass=2 -c:a aac -b:a 128k output.mp4


Примечание: Пользователи Windows должны использовать NUL вместо /dev/null и ^ вместо \.


Как и в случае с CRF, выберите самый медленный -preset, который можете себе позволить, и опционально примените настройку -tune. Обратите внимание, что при использовании более быстрых пресетов с тем же целевым битрейтом итоговое качество будет ниже, и наоборот.

Передача опций

Обычно опции передаются в x265 с помощью аргумента -x265-params, например: -x265-params "keyint=1:lossless=1". Для тонкой настройки процесса кодирования вы можете передать любую опцию, указанную в документации x265. Имейте в виду, что тонкая настройка любых опций обычно не требуется, если вы точно не знаете, что нужно изменить.

Кодирование без потерь

Используйте опцию -x265-params lossless=1. Добавлять -crf 0 не требуется.

Вы можете проверить кодирование без потерь, найдя x265 [info]: lossless compression ratio в выводе консоли вашей команды кодирования, или обратитесь к демультиплексору hash для проверки.

Кодирование только с внутрикадровым предсказанием (Intra encoding)

Используйте опцию -g 1 для FFmpeg 4.3 и новее или если вы используете сборку из основной ветки git. Более старые версии должны использовать -x265-params keyint=1.

Установка профилей

Профили можно установить с помощью опции -profile:v, аналогично libx264. См. список доступных профилей x265.

Совместимость с Final Cut и продуктами Apple

Чтобы сделать ваш файл совместимым с H.265 "промышленного стандарта" Apple, вы должны добавить следующий аргумент: -tag:v hvc1

Дополнительная информация