Подробно о режимах битрейта VP9

Введение

Хотя на страницах, посвященных основным функциям кодирования , мы даем общую информацию о режимах битрейта, в ней рассматривается только режим CQ (ограниченное качество).

В этом документе подробно описаны другие практические способы настройки битрейта VP9 для оптимизации различных сценариев. В примерах ниже используется FFmpeg .

Сжатие

Технологии сжатия видео, такие как VP9, направлены на сокращение объема данных, необходимых для передачи конечным пользователям понятного изображения и ощущения движения.

Одним из ключевых методов достижения этой цели является квантование . Квантизатор математически упрощает различные оцифрованные элементы изображения. Например, он может сузить диапазон используемых цветов, а затем применить к данным математические функции, чтобы «сгладить» кажущуюся нехватку разрешения в суженном цветовом диапазоне. Существует множество таких функций.

Квантование (или «Q») хорошо описано в статье в Википедии .

В VP9 квантование выполняется на основе коэффициентов преобразования. Это снижает требуемый битрейт для сохранения воспринимаемого качества за счёт добавления к кодированию.

В конечном счёте, чем выше квантование (число Q), тем меньше деталей теряется, а качество снижается, но для хранения кадра требуется меньше данных. В большинстве случаев кодер VP9 достигает своих целей по битрейту, изменяя Q со временем в зависимости от сложности каждого кадра.

Оптимизация вариантов использования

Чтобы пользователь мог «настроить» сжатие VP9 под свои конкретные нужды, можно отрегулировать баланс качества и битрейта во время начального сжатия с помощью ряда программных интерфейсов.

Кодер имеет скользящий компромисс между скоростью, качеством и битрейтом.

  • Если пользователь ориентирован на качество, он должен быть готов либо к более длительному времени кодирования, либо предоставить более быстрые и обширные ресурсы для обработки.

  • Если пользователь хочет, чтобы выходной файл, закодированный в формате VP9, был небольшим и мог быть доставлен быстро, он должен быть готов сократить время, необходимое квантизатору для обработки изображения, а это приведет к снижению детализации, с которой может работать квантизатор.

  • Если пользователь сосредоточен исключительно на скорости доставки (например, при прямой веб-трансляции или двусторонней видеоконференции), то квантизация может быть полностью подчинена ограничениям на скорость, с которой используемые байты данных могут передаваться по сети (то есть «битрейту» ).

Правильный выбор будет строго индивидуален для каждого варианта использования. Чтобы упростить настройку баланса в соответствии с вашими потребностями, VP9 поддерживает простую настройку в четырёх «режимах битрейта».

Режимы битрейта VP9

Начнем с обзора основных режимов битрейта, поддерживаемых VP9:

Режим
Постоянный квантизатор (Q) Позволяет указать фиксированное значение квантизатора; битрейт будет меняться
Ограниченное качество (CQ) Позволяет установить максимальный уровень качества. Качество может варьироваться в зависимости от битрейта.
Переменный битрейт (VBR) Балансирует качество и битрейт с течением времени в рамках ограничений битрейта
Постоянный битрейт (CBR) Попытки поддерживать битрейт относительно постоянным, в то время как качество меняется

В

Диаграмма режима Q

Режим Constant Quantizer хорошо подходит для сценариев, где размер файла и битрейт полностью подчинены конечному качеству.

Примеры использования параметров Q можно найти в цифровом кино, цифровых монтажных комплексах или приложениях цифровой рекламы, где контент может быть доставлен на физическом носителе или в течение неограниченного времени — задолго до фактического использования контента, и где желаемый вывод должен иметь наивысшее визуальное качество.

Оптимизация битрейта в режиме VP9 Q

Режим постоянного квантования требует минимальной настройки. Как следует из названия, режим Q ориентирован на поддержание квантования на целевом уровне «качества» и позволяет квантователю самостоятельно определять поток данных, который он хочет обработать. Пользователю нужно лишь задать целевое качество.

Более подробную информацию об особенностях целевого качества с точки зрения обработки изображений (а не битрейта) можно найти в статье «Основы кодирования» .

Используйте следующие параметры командной строки FFmpeg для оптимизации битрейта в режиме Q:

ffmpeg
-b:v 0 Отметив битрейт видео как 0 , мы явно устанавливаем режим «Q».
-g <arg> Устанавливает интервал ключевых кадров в кадрах (по умолчанию 240)
-crf <arg> Устанавливает максимальный уровень качества. Допустимые значения: от 0 до 63. Меньшие значения соответствуют более высокому качеству.
-quality good -speed 0 По умолчанию и рекомендуется для большинства приложений. best — это скорее исследовательский инструмент, с незначительным улучшением по сравнению с -quality good -speed 0
-lossless Режим без потерь

Битрейт в режиме Q: примеры FFmpeg

Первый пример представляет собой очень экстремальную настройку режима Q и приведен только для иллюстрации . (Даже обработка 120-секундного клипа в этих примерах займет несколько часов, а полученный выходной файл обычно намного больше исходного источника.)

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 1 -b:v 0 -crf 0 -quality good \
  -speed 0 -lossless 1 -c:a libvorbis Q_g_1_crf_0_120s_tears_of_steel_1080p.webm.webm

Для сравнения эффекта -crf в следующих примерах используется только -crf . Обратите внимание, что -g не определен, поэтому по умолчанию будет 240 , а на практике -crf по умолчанию равен 10 , поэтому мы получили бы тот же результат без включения какого-либо параметра во второй из трёх примеров:

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 0 -quality good \
  -speed 0 -c:a libvorbis Q_crf_0_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 10 -quality good \
  -speed 0 -c:a libvorbis Q_crf_10_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 63 -quality good \
  -speed 0 -c:a libvorbis Q_crf_63_120s_tears_of_steel_1080p.webm

Размер выходных данных этих примеров на диске различается. При -crf , равном 0 файл занимал 711,8 МБ, при -crf равном 10 , — 125,3 МБ, а при -crf равном 63 — 4,5 МБ. Проще говоря, это показывает, что мы снизили качество полученного файла, закодированного в формате VP9, увеличив значение аргумента -crf . Полный список всех выходных файлов представлен в таблице результатов ниже.

Давайте теперь сравним эффект изменения настройки -g .

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 1 -b:v 0 -quality good \
  -speed 0  -c:a libvorbis Q_g_1_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 240 -b:v 0 -quality good \
  -speed 0 -c:a libvorbis Q_g_240_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 480 -b:v 0 -quality good \
  -speed 0 -c:a libvorbis Q_g_480_120s_tears_of_steel_1080p.webm

Мы заметили, что настройка -g 1 создаёт очень большой файл размером 25,9 МБ. Сравните это с изменением настройки -g 240 (явным указанием значения по умолчанию), при котором получается файл размером 4,5 МБ, и с настройкой -g 480 , при котором получается файл размером 4,4 МБ.

CQ

CQ — рекомендуемый режим для файлового видео.

Диаграмма режима CQ

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

Тем не менее, мы всё равно должны ограничить процесс, указав верхний диапазон — иначе сжатие может вообще не произойти! Мы также можем установить нижний диапазон , где даже если изображение чёрное и процесс кодирования практически не задействован, мы всё равно будем обрабатывать эти данные, возможно, менее эффективно, чем могли бы, но в итоге даже чёрный цвет не будет существенно сжат и будет выглядеть «очень чёрным».

Кроме того, необходимо установить порог квантования . В VP9 порог квантования может варьироваться от 0 до 63 .

Для режима CQ используются следующие параметры командной строки FFmpeg:
ffmpeg
-b:v <arg> Устанавливает целевой битрейт (например, 500k)
-minrate <arg>
-maxrate <arg>
Устанавливает минимальный и максимальный битрейт.
-crf <arg> Устанавливает максимальный уровень качества. Допустимые значения: от 0 до 63 , чем меньше число, тем выше качество.
Режим битрейта CQ: примеры FFmpeg

Первый пример демонстрирует достаточно широкое ограничение. Однако по сравнению с примерами, приведёнными выше для Q, мы обнаруживаем, что это приводит к увеличению битрейта до более высокого диапазона, а качество выходного сигнала заметно выше. Размер файла заметно увеличивается.

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1000k -maxrate 4000k -crf 10  -c:a libvorbis \
  CQ_4000_1000_crf_10_120s_tears_of_steel_1080p.webm

В этом случае выходной файл на диске имел размер 20,2 МБ — заметно меньше, чем при кодировании в режиме Q в приведенных выше примерах.

Для сравнения, в следующем примере мы ограничили битрейт гораздо более узким диапазоном.

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -crf 10  -c:a libvorbis \
  CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm

В этом случае размер выходного файла составил 24,1 МБ, а в моменты высокой сложности и движения качество видео заметно ухудшается по сравнению с предыдущим примером.

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 1000k \
  -minrate 750k -maxrate 1400k -crf 10  -c:a libvorbis \
  CQ_1400_750_crf_10_120s_tears_of_steel_1080p.webm

В этом последнем примере размер выходных данных существенно сократился — до 13,2 МБ на диске.

ВБР

Режим переменного битрейта (VBR) рекомендуется для потоковой передачи видео по запросу с динамичным контентом (например, спортивными репортажами). Он хорошо подходит для доставки по протоколу HTTP.

Диаграмма режима VBR

В модели VBR сцены действия могут кодироваться с более высоким битрейтом, чем «более простые» сцены, которые соответствуют ключевому кадру.

Для крупных моделей потоковой доставки преимущества VBR могут существенно сказаться как на дистрибуции, так и на инфраструктуре. Когда множество потоков VBR доставляются через одну и ту же инфраструктуру, это может принести пользу всем зрителям, использующим систему.

VP9 VBR также рекомендуется для кодирования спортивных состязаний и другого контента с высокой интенсивностью движения. Для такого сложного контента VBR обеспечивает более высокое качество в периоды низкой интенсивности движения.

Для режима VBR используются следующие параметры командной строки FFmpeg:
ffmpeg
-quality good good качество подходит для видео по запросу
-speed <arg> Для ВИДЕО ПО ЗАПРОСУ допустимые значения: от 0 до 5, где 0 соответствует наивысшему качеству, а 5 — самому низкому. (Для потоковой передачи в реальном времени диапазон составляет от 5 до 9 — см. CBR ниже)
Режим битрейта VBR: примеры FFmpeg
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -quality good -speed 0  -c:a libvorbis \
  VBR_good_0_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -quality good -speed 5  -c:a libvorbis \
  VBR_good_5_120s_tears_of_steel_1080p.webm

ЦБ РФ

Для потоковой передачи в реальном времени с помощью VP9 рекомендуется режим постоянного битрейта (CBR).

График режима CBR

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

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

Для режима CBR используются следующие параметры командной строки FFmpeg:
ffmpeg
-quality realtime Качество realtime подходит для прямой трансляции
-speed <arg> Для потоковой передачи в реальном времени допустимые значения — от 5 до 9, где 5 — наивысшее качество, а 9 — наименьшее. (Для видео по запросу это значения от 0 до 5. См. VBR выше.)
-minrate <arg>
-maxrate <arg>
Устанавливает минимальный и максимальный битрейт ** Они должны быть установлены на одно и то же значение битрейта -b:v для режима CBR**.

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

Режим битрейта CBR: примеры FFmpeg

В примерах ниже рассматривается установка битрейта на целевые значения 2 Мбит/с и 500 Кбит/с:

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 2000k -maxrate 2000k -quality realtime -speed 5 -c:a libvorbis \
  CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 2000k -maxrate 2000k -quality realtime -speed 8 -c:a libvorbis \
  CBR_2000_realtime__8_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 500k -maxrate 500k -quality realtime -speed 5 -c:a libvorbis \
  CBR_500_realtime_speed_5_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 500k -maxrate 500k -quality realtime -speed 8 -c:a libvorbis \
  CBR_500_realtime_speed_8_120s_tears_of_steel_1080p.webm

Результаты

Каждое из вышеперечисленных кодирований было выполнено в системе Ubuntu Linux со следующими характеристиками:

  • Процессор: 4x Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
  • Память (ОЗУ): 8060 МБ (используется 1492 МБ)
  • Графика: Intel HD Graphics 530 (Skylake GT2)
  • ОС: Ubuntu 16.04 LTS

Исходным файлом во всех случаях был клип длительностью в одну минуту и двадцать секунд (1:20), взятый из Tears Of Steel .

Файл Кодировать минуты Размер файла на диске
Q_g_1_crf_0_120s_tears_of_steel_1080p.webm 81 1,06 ГБ
Q_crf_0_120s_tears_of_steel_1080p.webm 131 711,8 МБ
Q_crf_10_120s_tears_of_steel_1080p.webm 118 125,3 МБ
Q_crf_63_120s_tears_of_steel_1080p.webm 27 4,5 МБ
Q_g_1_120s_tears_of_steel_1080p.webm 51 25,9 МБ
Q_g_240_120s_tears_of_steel_1080p.webm 28 4,5 МБ
Q_g_480_120s_tears_of_steel_1080p.webm 10 4,4 МБ
CQ_4000_1000_crf_10_120s_tears_of_steel_1080p.webm 11 20,2 МБ
CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm 9 24,1 МБ
CQ_1400_750_crf_10_120s_tears_of_steel_1080p.webm 50 13,2 МБ
VBR_good_0_120s_tears_of_steel_1080p.webm 3 23,4 МБ
VBR_good_5_120s_tears_of_steel_1080p.webm 4 23,9 МБ
CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm 2 24,8 МБ
CBR_2000_realtime_speed_8_120s_tears_of_steel_1080p.webm 1 21 МБ
CBR_500_realtime_speed_5_120s_tears_of_steel_1080p.webm 1 8,5 МБ
CBR_500_realtime_speed_8_120s_tears_of_steel_1080p.webm 1 7,1 МБ

Было заметно, что установка значений -speed выше 5 приводит к повышению скорости обработки VP9. Хотя это значительно увеличивает квантизацию (что видно по сильному эффекту «дизеринга» на очень низком качестве и высоких битрейтах), VP9 по-прежнему способен создавать очень хорошее качество 1080p на низком битрейте, хотя и лучше подходит для небольших мобильных устройств, чем для больших дисплеев.

Соображения относительно вариантов использования с изменением масштаба (размера)

Режимы битрейта VP9, очевидно, не изолированы и могут комбинироваться со многими другими аргументами и параметрами для определённых сценариев использования. Одним из типичных вариантов использования может быть изменение разрешения выходного видео для определённого устройства.

Классическим примером этого является преобразование HD-потока в SD-выход. Это, опять же, существенно повлияет на время обработки и выходной битрейт. В случае, когда две команды FFmpeg в остальном идентичны, простое изменение размера выходного видео изменит размер итогового файла и, следовательно, его битрейт в потоковой модели.

Чтобы проиллюстрировать это, мы взяли средний пример из каждого режима битрейта и просто добавили параметры масштабирования.

Q-режим
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 10 -quality good \
  -speed 0 -vf scale=640x480 -c:a libvorbis 640x480_Q_crf_10_120s_tears_of_steel_1080p.webm
режим CQ
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -crf 10 -vf scale=640x480 -c:a libvorbis \
  640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm
режим VBR
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -quality good -speed 5 -vf  scale=640x480 \
  -c:a libvorbis 640x480_VBR_good_5_120s_tears_of_steel_1080p.webm
режим CBR
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 2000k -maxrate 2000k -quality realtime -speed 5 -vf  scale=640x480 \
  -c:a libvorbis 640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm

Таблица результатов масштабирования

Файл Кодировать минуты Размер файла на диске
640x480_Q_crf_10_120s_tears_of_steel_1080p.webm 5 3,4 МБ
640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm 2 22,4 МБ
640x480_VBR_good_5_120s_tears_of_steel_1080p.webm 1 22,6 МБ
640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm 4 23 МБ

Для удобства сравнения это те же команды FFmpeg из наших предыдущих примеров, но без масштабирования:

Файл Кодировать минуты Размер файла на диске
Q_crf_10_120s_tears_of_steel_1080p.webm 56 126 МБ
CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm 9 24,1 МБ
VBR_good_5_120s_tears_of_steel_1080p.webm 4 23,9 МБ
CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm 1 24,8 МБ

Как вы увидите, размер выходного файла заметно сокращается для каждого из них, и хотя в большинстве примеров время кодирования сокращается, в режиме Q время кодирования фактически увеличивается. Более сильное сжатие видео требует больших усилий, поэтому даже если ожидается, что выходной файл будет меньше при отсутствии ограничений на качество (как в режиме Q), это может фактически увеличить время создания выходного файла. Не думайте, что файл меньшего размера всегда можно получить быстрее в процессе кодирования.

Комбинация масштабирования и уменьшения битрейта

В качестве окончательного сравнения в следующих примерах повторно запускаются примеры изменения масштаба CQ, VBR и CBR, но на этот раз мы ограничиваем целевой битрейт уровнем 500 кбит/с — примерно на четверть (в соответствии с уменьшением размера изображения).

режим CQ
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 350k -maxrate 550k -crf 10 -vf scale=640x480 -c:a libvorbis \
  640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm
режим VBR
ffmpeg -i "120s_tears_of_steel_1080p.webm" -c:v libvpx-vp9 -b:v 500k \
  -minrate 350k -maxrate 500k -quality good -speed 5 -vf scale=640x480 -c:a libvorbis \
  640x480_VBR_good_5_120s_tears_of_steel_1080p.webm
режим CBR
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 500k -maxrate 500k -quality realtime -speed 5 -vf scale=640x480 -c:a libvorbis \
  640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm

Таблица результатов масштабирования и снижения целевого битрейта

Файл Кодировать минуты Размер файла на диске
640x480_CQ_500_crf_0_120s_tears_of_steel_1080p.webm 1 7 МБ
640x480_VBR_500_good_5_120s_tears_of_steel_1080p.webm 1 7 МБ
640x480_CBR_500_realtime_5_120s_tears_of_steel_1080p.webm 1 7,6 МБ

Как видите, время кодирования еще больше сократилось.