В этом разделе приведены рекомендации по кодированию VP9 для различных распространенных профилей:

  • Высокооптимизированное видео для веб-сайтов и мобильных устройств (VOD)
  • Распространение премиум-контента (VOD)
  • Спорт, анимация, 10-битный контент (VOD)
  • Живое кодирование
  • WebRTC

Введение

При кодировании видео необходимо учитывать ряд моментов:

  • Создаете ли вы одну версию медиафайла или несколько версий с разным битрейтом и разрешением?
  • Создаете ли вы прямую видеотрансляцию или видеофайлы по запросу?
  • Какой тип медиаконтента вы кодируете — много ли в нем движения? Детализированный? Анимированный?
  • Кодируете ли вы для максимального качества (например, премиум-контент) или скорости (например, веб-конференции)?

Этот раздел начинается с настроек базового видеофайла по запросу, а затем даются рекомендации по всем этим вопросам.

Основные настройки

Битрейты кодирования

Следующие значения битрейта предлагаются в качестве базовых для веб- и мобильного распространения. Эти значения минимизируют битрейт, обеспечивая качество видео, подходящее для потребительского веб- и мобильного распространения; их можно рассматривать как «низкий» битрейт, который всё ещё позволяет достичь приемлемого качества.

Рекомендуемые целевые битрейты

Размер кадра/частота Средний битрейт (VOD, кбит/с) Средний битрейт (в прямом эфире, кбит/с)
320x240p @ 24,25,30 150 250
640x360p @ 24,25,30 276 386
640x480p @ 24,25,30 512 (LQ), 750 (MQ) 720 (LQ), 1024 (MQ)
1280x720p @ 24,25,30 1024 1440
1280x720p @ 50,60 1800 2500
1920x1080p @ 24,25,30 1800 2500
1920x1080p @ 50,60 3000 4200
2560x1440p @ 24,25,30 6000 8400
2560x1440p @ 50,60 9000 12600
3840x2160p @ 24,25,30 12000 16800
3840x2160p @ 50,60 18000 25200

Рисунок 2a: Целевые битрейты

Настройки кодирования VOD

Настройки для большинства типов контента

Для большинства типов контента мы рекомендуем использовать режим ограниченного качества (CQ) с ограничением битрейта. Большинство видео содержат как динамичные сцены (например, сцены с действиями), так и менее детализированные сцены (например, разговоры). Режим CQ позволяет кодеру поддерживать приемлемый уровень качества в более длинных и простых сценах (без потери битов), выделяя больше битов для сложных сцен.

Мы также рекомендуем установить битрейт в диапазоне от 50% до 150% от целевого, используя значения качества, указанные в таблице ниже. Этот режим требует двухпроходного кодирования, и для HD и выше рекомендуется использовать более высокие настройки, как указано ниже.

Настройки кодировщика для кодирования CQ

Высота рамы Целевое качество (CQ) Режим кодирования
240 37 TWO_PASS_MEDIUM
360 36 TWO_PASS_MEDIUM
480 34 (низкое качество) или 33 (среднее качество) TWO_PASS_MEDIUM
720 32 TWO_PASS_FAST
1080 31 TWO_PASS_FAST
1440 24 TWO_PASS_FAST
2160 15 TWO_PASS_FAST

Рисунок 2b: Рекомендуемые настройки CQ

Мы рекомендуем использовать 240 видеокадров между ключевыми кадрами (для контента с частотой 30 кадров в секунду это соответствует 8 секундам). Ключевые кадры — это самодостаточные видеокадры, не зависящие от других кадров при рендеринге (более подробное объяснение см. в разделе «Структура GOP»). Для воспроизведения в веб-браузере и на мобильных устройствах мы допускаем большие интервалы между ключевыми кадрами, поскольку это позволяет кодеру выбирать «наилучшее» расположение ключевых кадров для максимального качества.

Пример параметров командной строки: видео 640x360

Исходя из вышеизложенного, рекомендации для видео 360p следующие:

  1. Уровень CQ 36 (см. рисунок 2b)
  2. Целевой битрейт 276 кбит/с (см. рисунок 2а)
  3. Минимально допустимый битрейт 138 кбит/с (50% от целевого)
  4. Максимально допустимый битрейт 414 кбит/с (150% от целевого)
  5. Максимальный интервал между ключевыми кадрами — 240 секунд.
  6. Двухпроходный, профиль «Средний»

Это дает следующие параметры командной строки для libvpx и FFmpeg:

libvpx

--end-usage=cq --cq-level=36 --target-bitrate=276 --minsection-pct=50 \
  --maxsection-pct=150 --kf-max-dist=240 --passes=2 --good --cpu-used=2

FFmpeg

-crf 36 -b:v 276k -minrate 138k -maxrate 414k -g 240 -good -speed 2

Настройки премиум-контента

В примерах выше мы использовали довольно быстрые настройки кодирования для эффективного создания видеопотоков. Однако для некоторого контента (например, фильмов премиум-класса) стоит потратить больше времени на кодирование, чтобы получить более качественный результат.

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

Режимы кодирования премиум-контента и параметры командной строки

Высота рамы Режим кодирования libvpx FFmpeg
240 TWO_PASS_VERY_SLOW --good --cpu-used 0 -good -speed 0
360 TWO_PASS_VERY_SLOW --good --cpu-used 0 -good -speed 0
480 TWO_PASS_VERY_SLOW --good --cpu-used 0 -good -speed 0
720 TWO_PASS_SLOW --good --cpu-used 1 -good -speed 1
1080 TWO_PASS_MEDIUM --good --cpu-used 2 -good -speed 2
1440 TWO_PASS_MEDIUM --good --cpu-used 2 -good -speed 2
2160 TWO_PASS_MEDIUM --good --cpu-used 2 -good -speed 2

Рисунок 2c: Режимы кодирования премиум-контента

Настройки спорта и динамичного контента

Мы рекомендуем кодирование VBR для спортивного контента. Спортивные съёмки, как правило, характеризуются довольно стабильной интенсивностью движения и сложностью, а использование VBR обеспечивает более высокое качество в периоды низкой динамики, чем кодирование QP.

Для командной строки основное различие между режимами QP и VBR заключается в том, что вам не нужно указывать уровень CQ; в остальном рекомендуемые настройки те же.

Пример параметров командной строки VBR: видео 640x360

libvpx

--end-usage=vbr --target-bitrate=276 --minsection-pct=50 --maxsection-pct=150 \
  --kf-max-dist=240 --passes=2 --good --cpu-used=2

FFmpeg

-b:v 276k -minrate 138k -maxrate 414k -g 240 -good -speed 2

Настройки анимации и игр

Настройки шумного/низкокачественного контента

Для шумного контента мы рекомендуем увеличить количество и интенсивность альтернативных референсных кадров. Альтернативные референсные кадры — это «невидимые» кадры, которые никогда не отображаются пользователю, но используются в качестве референса при создании финальных кадров (подробнее см. здесь).

Чтобы указать VP9 на необходимость использования большего количества кадров alt-ref, рекомендуются следующие параметры:

libvpx

--auto-alt-ref=1 --lag-in-frames-16 --arnr-maxframes=5 --arnr-strength=3

FFmpeg

10-битное/HDR-кодирование

Для 10-битного кодирования вам понадобится профиль VP9 2. Кодирование с глубиной 10 бит не требует дополнительных бит, поэтому остальные параметры те же:

libvpx

--profile=2

FFmpeg

-profile 2

Настройки живого кодирования

Прямая трансляция

Кодирование в реальном времени обычно выполняется с постоянной скоростью передачи данных (CBR), что ограничивает возможности кодера по достижению максимального качества. По этой причине мы будем использовать более высокие битрейты, как показано на рисунке 2a.

Для кодирования в реальном времени мы также хотим максимально использовать потоки. Это достигается следующим образом:

  1. Разрешение VP9 разбивать видео на столбцы (ширина которых не может быть меньше 256 пикселей, а их размер должен быть степенью двойки);
  2. Указание VP9 использовать больше ресурсов процессора. В следующей таблице приведены рекомендации для каждого разрешения.

Рекомендации по тайлингу и резьбе

Настройки кодировщика для кодирования CQ
Размер рамы Количество плиток-колонн Количество потоков
320x240 1 2
640x360 2 4
640x480 2 4
1280x720 4 8
1920x1080 4 8
2560x1440 8 16
3840x2160 8 16

Рисунок 2d. Рекомендуемое размещение и распределение потоков для кодирования в реальном времени.

При кодировании в реальном времени также будет установлен крайний срок «в реальном времени» для обеспечения производительности, а также будет дана команда кадрам alt-ref не заглядывать в будущее (что может привести к задержке):

Исходя из этого, рекомендации для живого видео 360p таковы:

  1. CBR, целевой битрейт 386 кбит/с (см. рисунок 2а)
  2. 2 колонны из плитки (см. рис. 2d)
  3. 4 нити (см. рисунок 2d)
  4. Производительность в реальном времени
  5. Отсутствие задержки из-за чередования кадров (отсутствие задержки кадров)

Это дает следующие параметры командной строки для libvpx и FFmpeg:

libvpx

--end-usage=cbr --target-bitrate=386 --cpu-used=4 --tile-columns=2 --rt --lag-in-frames=0

FFmpeg

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -r 29.97 -b:v 386k \
  -minrate 386k -maxrate 386k -c:v libvpx-vp9 -c:a libopus output.webm

Кодирование Live VP9 для DASH/YouTube

Кодирование WebRTC