Рекомендуемые настройки
В этом разделе приведены рекомендации по кодированию 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 следующие:
- Уровень CQ 36 (см. рисунок 2b)
- Целевой битрейт 276 кбит/с (см. рисунок 2а)
- Минимально допустимый битрейт 138 кбит/с (50% от целевого)
- Максимально допустимый битрейт 414 кбит/с (150% от целевого)
- Максимальный интервал между ключевыми кадрами — 240 секунд.
- Двухпроходный, профиль «Средний»
Это дает следующие параметры командной строки для 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.
Для кодирования в реальном времени мы также хотим максимально использовать потоки. Это достигается следующим образом:
- Разрешение VP9 разбивать видео на столбцы (ширина которых не может быть меньше 256 пикселей, а их размер должен быть степенью двойки);
- Указание 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 таковы:
- CBR, целевой битрейт 386 кбит/с (см. рисунок 2а)
- 2 колонны из плитки (см. рис. 2d)
- 4 нити (см. рисунок 2d)
- Производительность в реальном времени
- Отсутствие задержки из-за чередования кадров (отсутствие задержки кадров)
Это дает следующие параметры командной строки для 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