Базовая кодировка

Основы сжатия видео

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

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

Простое кодирование

Следующая команда FFmpeg преобразует входной файл в видео VP9 со звуком Opus. Это простейший возможный вариант кодирования с настройками по умолчанию.

ffmpeg -i tears_of_steel_1080p.webm -c:v libvpx-vp9 -c:a libopus output.webm

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

FFmpeg
-i <filename> Указывает имя входного файла
-c:v libvpx-vp9 Дает команду FFmpeg создать видео VP9
-c:a libopus Дает команду FFmpeg создать аудио Opus
output.webm Указывает имя выходного файла

FFmpeg определяет тип создаваемого файла по указанному имени выходного файла. В этом примере FFmpeg выведет файл WebM, поскольку мы запросили output.webm .

Разрешение

У каждого видео есть размер кадра (указывающий ширину и высоту в пикселях). Следующий параметр командной строки FFmpeg позволяет управлять размером выходного видеокадра при кодировании VP9:

FFmpeg
-vf scale=<width>x<height> Ширина и высота рамы

Например, следующая команда FFmpeg выведет видео VP9 WebM с разрешением 640x480.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -c:v libvpx-vp9 -c:a libopus output.webm

Меньшие разрешения обеспечивают более низкое качество, но большие разрешения требуют большей пропускной способности, большей вычислительной мощности для декодирования и могут не поддерживаться на старых устройствах. Для VP9 разрешение 640x480 считается безопасным для широкого спектра мобильных и веб-устройств.

Битрейт (битрейт)

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

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

Режим CQ рекомендуется для видео из файлов (в отличие от потоковой передачи в реальном времени). Для режима CQ используются следующие параметры командной строки FFmpeg:

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

Например, следующая команда FFmpeg создаст видеофайл среднего качества с разрешением 640x480, используя режим CQ, со средним битрейтом 750 кбит/с и максимальным качеством, ограниченным 33.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -crf 33 -c:v libvpx-vp9 -c:a libopus output.webm

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

Настройки качества и скорости

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

VP9 предлагает несколько настроек для баланса качества и скорости:

  • Настройка качества определяет подход кодера к сжатию видео. Доступные режимы: «Наилучшее», «Хорошее» и «В реальном времени».

  • Настройки потоков позволяют кодеру использовать несколько потоков процессора для кодирования видео. Эти настройки могут немного снизить качество, но значительно повысить скорость кодирования и декодирования.

Эти два типа настроек контролируются несколькими параметрами командной строки:

FFmpeg
-threads Указывает количество потоков, используемых во время кодирования.
-quality Может быть установлено значение good , best или realtime
-speed Этот параметр имеет разные значения в зависимости от выбранного качества: good или realtime . Для видео по запросу (VoD) в режимах good и best применяются значения скорости 0-4 4, где 0 соответствует наивысшему качеству, а 4 — самому низкому. Допустимые значения для Realtime : 5-8 ; более низкие значения соответствуют более высокому качеству.
-tile-columns Тайлинг разбивает видео на прямоугольные области, что позволяет использовать многопоточное кодирование и декодирование. Количество тайлов всегда равно степени двойки. 0 = 1 тайл, 1 = 2, 2 = 4, 3 = 8, 4 = 16, 5 = 32.

Следующая команда FFmpeg создаст файл размером 640x480 с качеством «хорошее» и скоростью 0 (высокое качество):

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -quality good -speed 0 -crf 33 -c:v libvpx-vp9 -c:a libopus \
  output.webm

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