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
Дополнительная информация
- Документация API x265
- Блог Netflix Tech — Крупномасштабное сравнение x264, x265 и libvpx (ссылка на статью)
- П. Ханхарт и др., Субъективная оценка качества грядущего стандарта сжатия видео HEVC (PDF)