Базовое кодирование

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

В этом разделе рассматриваются основные параметры кодирования 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 выведет видео 640x480 VP9 WebM.

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 рекомендуется для файлового видео (в отличие от прямой трансляции). Следующие параметры командной строки FFmpeg используются для режима CQ:

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 . Настройки скорости от 0-4 до 4 применяются для VoD в режимах good и best , где 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

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