Основное внимание уделяется кодировщику libx265, который позволяет сэкономить около 25–50% битрейта по сравнению с видео H.264, закодированным с помощью libx264, сохраняя при этом такое же качество изображения. Эти преимущества будут наиболее заметны при разрешении 1080p и выше.
См. HWAccelIntro для получения информации о поддерживаемых аппаратных кодерах H.265/HEVC.
Получение ffmpeg с поддержкой libx265
ffmpeg необходимо собрать с помощью флагов конфигурации --enable-gpl --enable-libx265 и установить x265 в вашей системе. Руководства по сборке покажут вам, как это сделать.
Также можно скачать сборку, в которой есть libx265.
Параметры просмотра
Вы можете перечислить опции, доступные в этом кодировщике, с помощью ffmpeg -h encoder=libx265.
Режимы регулирования скорости
Как и в случае с x264, в кодировщике x265 есть несколько алгоритмов управления скоростью, в том числе:
- целевой битрейт в 1 проход (путем настройки -b:v)
- 2-проходной целевой битрейт
- Коэффициент постоянной скорости (CRF)
Сосредоточимся на CRF и двухпроходном кодировании, поскольку однопроходное кодирование с целевым битрейтом не рекомендуется.
Коэффициент постоянной скорости (CRF)
Используйте этот режим, если вы хотите сохранить хорошее качество изображения и вас не волнует точная скорость передачи данных или размер закодированного файла. Этот режим работает точно так же, как и в x264, за исключением того, что максимальное значение всегда равно 51, даже при поддержке 10-битного кодирования, поэтому для получения дополнительной информации ознакомьтесь с руководством по H.264.
Как и в случае с x264, вам нужно сделать несколько вариантов:
- Выберите CRF. CRF влияет на качество. Значение по умолчанию — 28, и оно должно визуально соответствовать видео libx264 с CRF 23, но размер файла будет примерно в два раза меньше. CRF работает так же, как в x264, поэтому выберите максимальное значение, обеспечивающее приемлемое качество.
- Выберите предустановку. Значение по умолчанию - medium. Предустановка определяет параметры сжатия и эффективность и, следовательно, влияет на скорость и размер кодирования. Допустимыми предустановками являются ultrafast, superfast, veryfast faster, fast medium, slow slower, veryslow placebo,,, и,,,. Используйте самую медленную настройку, на которую у вас хватит терпения, с приемлемым crf, учитывая эту настройку. Игнорируйте placebo, поскольку это обеспечивает незначительную отдачу при значительном увеличении времени кодирования. Обратите внимание, что значения CRF различаются в зависимости от выбранного вами пресета. «Более медленный» пресет обеспечивает более высокую степень сжатия, но может увеличить размер файла. Если вы сравните «сверхбыстрый» пресет с «очень медленным» при одинаковом значении CRF, то «очень медленный» пресет может создать файл большего размера, но с более высокой степенью сжатия. Так, например, если -preset ultrafast с -crf 15 генерирует файл размером, сопоставимым с «очень медленным» -crf 20, то файл с пресетами «очень медленный» будет иметь более высокое качество при том же размере. Вы также можете указать битрейт для пресета (см. ниже) вместо crf для управления размером файла при определенном уровне сжатия.
- Выберите опцию (необязательно). По умолчанию эта функция отключена, и обычно нет необходимости устанавливать параметр. 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 кбит/с. Используется собственный кодировщик FFmpeg AAC, но в разделе AAC вы найдёте информацию о других возможностях.
Двухпроходное кодирование
Этот метод обычно используется, если вы ориентируетесь на определённый размер выходного файла, а качество вывода от кадра к кадру имеет меньшее значение. Лучше всего это объяснить на примере. Ваше видео длится 10 минут (600 секунд), и требуется получить файл размером 200 МБ. Поскольку bitrate = file size / duration:
(200 МБ * 8388,608 [преобразует МБ в кбит; примечание: не 8192, так как 1 кбит — это всегда 1000 бит]) / 600 секунд = ~2796 кбит/с общая скорость передачи данных
2796 — 128 кбит/с (желаемая скорость передачи аудио) = 2668 кбит/с скорость передачи видео
Вы также можете отказаться от расчёта битрейта, если уже знаете, какой конечный (средний) битрейт вам нужен.
Двухпроходный пример
Для двухпроходного режима вам нужно запустить ffmpeg дважды с почти одинаковыми настройками, за исключением:
- В проходах 1 и 2 используйте параметры -x265-params pass=1 и -x265-params pass=2 соответственно.
- На первом этапе выводите данные в нулевой файловый дескриптор, а не в реальный файл. (Это создаст файл журнала, который нужен 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 в выводе команды кодирования на консоли или обратившись к демультиплексору хэшей для проверки.
Внутреннее кодирование
Используйте опцию -g 1 для FFmpeg 4.3 и более поздних версий или если вы используете сборку из ветки git master. В более старых версиях необходимо использовать -x265-params keyint=1.
Параметр scale позволяет масштабировать видео до указанного разрешения. Например, команда
ffmpeg -i input.mp4 -c:v libx265 -scale 1920:1080 output.mp4
масштабирует видео до разрешения 1920:1080
Пример с понижением качества видео и аудио:
fmpeg -i input_video_file.mp4 -c:v libx265 -c:a aac -ar 22050 -ac 2 -b:a 64k -s 480x320 output_video_file.mp4
Настройка профилей
Профили можно настроить с помощью опции -profile:v аналогично libx264. Смотрите список доступных профилей x265.
Совместимость с Final Cut и продуктами Apple
Чтобы сделать ваш файл совместимым с «промышленным стандартом» Apple H.265, вам нужно добавить следующий аргумент -tag:v hvc1
перевод сего с корректировкой и правками