Рекомендуемые настройки для видео по запросу
Цель
В этом разделе приведены рекомендации по настройкам кодирования VP9 при выполнении кодирования на основе файлов (т. е. не в реальном времени).
Эти рекомендации разработаны для следующих целей:
- Баланс между качеством и скоростью кодирования
- Минимальный битрейт для достижения приемлемого качества
- Настройки для размещения широкого спектра типов контента
Эти рекомендации не:
- Адресная кодировка в реальном времени
- Оптимизация для определенных типов контента (например, динамичных спортивных кадров)
- Настройка параметров для конкретных устройств или сетевых требований
Кодирование с одним разрешением
VP9 поддерживает различные размеры кадров, от крошечных разрешений до 4K. Кадры большего размера обеспечивают более высокое качество, но требуют большей пропускной способности и большей вычислительной мощности для декодирования.
Если вы создаете изображение с одним разрешением, 640 x 480 — это беспроигрышный вариант для широкого спектра веб-приложений и мобильных устройств. Следующие параметры командной строки FFmpeg позволяют создать файл с одним разрешением и скоростью 750 кбит/с.
-vf scale=640x480 -b:v 750k -quality good -speed 0 -crf 33 \
-c:v libvpx-vp9 -c:a libopus output.webm
Кодирование с несколькими разрешениями
Если вы планируете ориентироваться на несколько разрешений или если ваша сеть доставки имеет различную пропускную способность, рекомендуется создать несколько разрешений. Затем ваш проигрыватель может контролировать, какое разрешение отправляется зрителю.
Кодирование видео с несколькими разрешениями часто используется в потоковой передаче с адаптивным битрейтом, когда видеопроигрыватель переключается между разрешениями в режиме реального времени в зависимости от полосы пропускания пользователя. Например, Shaka Player позволяет воспроизводить кодировки с несколькими разрешениями, где каждая кодировка VP9 находится в отдельном файле, а манифест DASH предоставляет информацию о каждой кодировке.
Для получения дополнительной информации об упаковке видео в форматы адаптивной потоковой передачи см. раздел Shaka Packager . В этом руководстве основное внимание будет уделено настройкам кодирования для VP9 в различных разрешениях.
Рекомендуемые настройки
Все приведенные ниже настройки можно использовать для отдельных файлов с различными разрешениями, в совокупности они обеспечивают полный набор, подходящий для адаптивной потоковой передачи. Обратите внимание, что версия 640x480 имеет две версии: одну с низким качеством (LQ) и другую со средним качеством (MQ).
Битрейт
Режим ограниченного качества (CQ) рекомендуется при кодировании файлов VP9 для просмотра по требованию. Этот режим кодирования позволяет указать целевую среднюю скорость передачи данных, одновременно контролируя как максимальное качество видео, так и минимальную и максимальную скорость передачи данных.
Следующие битрейты предлагаются в качестве базовых для распространения в сети и на мобильных устройствах. Эти предложения минимизируют битрейт, обеспечивая качество видео, подходящее для потребительского веб-сайта и мобильного распространения; думайте о них как о рекомендации «низкой» скорости передачи данных, которая все еще может обеспечить приемлемое качество.
Для приведенных выше примеров рекомендуется, чтобы минимальный битрейт был установлен на уровне 50% от целевого битрейта, а максимальный — на уровне 145% от целевого.
Размер кадра/частота кадров | Целевой битрейт (VOD, кбит/с) | Минимальный битрейт (50%) | Максимальный битрейт (145%) |
---|---|---|---|
320x240p @ 24,25,30 | 150 | 75 | 218 |
640x360p @ 24,25,30 | 276 | 138 | 400 |
640x480p @ 24,25,30 | 512 (LQ), 750 (MQ) | 256 (LQ) 375 (MQ) | 742 (LQ) 1088 (MQ) |
1280x720p @ 24,25,30 | 1024 | 512 | 1485 |
1280x720p @ 50,60 | 1800 | 900 | 2610 |
1920x1080p @ 24,25,30 | 1800 | 900 | 2610 |
1920x1080p @ 50,60 | 3000 | 1500 | 4350 |
2560x1440p @ 24,25,30 | 6000 | 3000 | 8700 |
2560x1440p @ 50,60 | 9000 | 4500 | 13050 |
3840x2160p @ 24,25,30 | 12000 | 6000 | 17400 |
3840x2160p @ 50,60 | 18000 | 9000 | 26100 |
В FFmpeg битрейт управляется следующими командами:
FFmpeg | |
---|---|
-b:v <arg> | Устанавливает битрейт (например, 500k) |
-minrate <arg> -maxrate <arg> | Устанавливает минимальный и максимальный битрейт. |
Например, при кодировании содержимого 640x480 вы можете использовать командную строку -b:v 750k -minrate 375 -maxrate 1088
.
Качественный
В режиме CQ вы также установите максимальный уровень качества. Для файлового кодирования VP9 рекомендуются следующие уровни качества:
Высота кадра | Целевое качество (CQ) |
---|---|
240 | 37 |
360 | 36 |
480 | 34 (LQ) или 33 (MQ) |
720 | 32 |
1080 | 31 |
1440 | 24 |
2160 | 15 |
В FFmpeg качество устанавливается командой -crf
. Например, чтобы установить качество 33, вы должны использовать команду -crf 33
Многопроходное кодирование и скорость кодирования
Кодирование на основе файлов обеспечивает гибкость скорости. Вы также можете выполнить несколько проходов по одному и тому же материалу для повышения качества и выбрать скорость для каждого из них.
При кодировании файлов VP9 в FFmpeg рекомендуется установить параметр -quality
на good
, а затем установить скорость первого и второго прохода в соответствии с таблицей ниже с параметром -speed
. Это дает хороший баланс между временем кодирования и качеством вывода.
Высота кадра | Скорость (первый проход) | Скорость (второй проход) |
---|---|---|
240 | 4 | 1 |
360 | 4 | 1 |
480 | 4 | 1 |
720 | 4 | 2 |
1080 | 4 | 2 |
1440 | 4 | 2 |
2160 | 4 | 2 |
Например, строка кодирования первого прохода в FFmpeg может включать -quality good -speed 4
.
Расстояние между ключевыми кадрами
Рекомендуется разрешать до 240 кадров видео между ключевыми кадрами (8 секунд для контента с частотой 30 кадров в секунду). Ключевые кадры — это самодостаточные видеокадры; они не полагаются на какие-либо другие кадры для рендеринга, но они, как правило, больше, чем другие типы кадров. При воспроизведении в Интернете и на мобильных устройствах большой интервал между ключевыми кадрами позволяет кодировщику выбирать наилучшее расположение ключевых кадров для максимального качества.
В FFmpeg расстояние между ключевыми кадрами управляется командой -g
, указывающей количество кадров. Для 240 кадров это будет -g 240
.
Рекомендации по тайлингу и многопоточности
Мозаика разбивает видеокадр на несколько столбцов, что немного снижает качество, но повышает производительность кодирования. Ширина плитки должна быть не менее 256 пикселей, поэтому существует ограничение на количество плиток, которые можно использовать.
В зависимости от количества плиток и разрешения выходного кадра может оказаться полезным большее количество потоков процессора. Вообще говоря, несколько потоков имеют ограниченное значение, когда размер выходного кадра очень мал.
Следующие настройки рекомендуются для мозаичного и потокового отображения при различных разрешениях.
Размер кадра | Количество плиток-столбцов | Количество потоков |
---|---|---|
320x240 | 1 ( -tile-columns 0 ) | 2 |
640x360 | 2 ( -tile-columns 1 ) | 4 |
640x480 | 2 ( -tile-columns 1 ) | 4 |
1280x720 | 4 ( -tile-columns 2 ) | 8 |
1920x1080 | 4 ( -tile-columns 2 ) | 8 |
2560x1440 | 8 ( -tile-columns 3 ) | 16 |
3840x2160 | 8 ( -tile-columns 3 ) | 16 |
В FFmpeg количество тайлов контролируется параметром -tile-columns
, а количество потоков — -threads
. Например, кодировка 640x480 будет использовать командную строку -tile-columns 2 -threads 4
.
Командные строки FFmpeg
Объединив приведенные выше рекомендации, можно использовать следующие команды FFmpeg для кодирования содержимого VP9.
Обратите внимание, что команды первого прохода и второго прохода объединены в цепочку. Аргумент -y
в команде второго прохода отвечает «Да», когда FFmpeg просит перезаписать файл статистики первого прохода выходным видео.
Также обратите внимание, что источник 1080p используется для кодирования с выходным разрешением до 1280x720. Источник 4k используется для большего вывода.
320x240 (24, 25 или 30 кадров в секунду)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \ -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \ -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \ -pass 1 -speed 4 tos-320x240.webm && \ ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \ -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 2 \ -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \ -pass 2 -speed 1 -y tos-320x240.webm
- Входной файл: tear_of_steel_1080p.webm (1920x800, 544,88 МБ)
- Выходной файл: tos-320x240.webm (320x240, 21,73 МБ)
640x360 (24, 25 или 30 кадров в секунду)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
-minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-640x360.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
-minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-640x360.webm
- Входной файл: tear_of_steel_1080p.webm (1920x800, 544,88 МБ)
- Выходной файл: tos-640x360.webm (640x360, 31,53 МБ)
640x480 (низкое качество, 24, 25 или 30 кадров в секунду)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-640x360-low.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-640x480-low.webm
- Входной файл: tear_of_steel_1080p.webm (1920x800, 544,88 МБ)
- Выходной файл: tos-640x480-low.webm (640x480, 51,18 МБ)
640x480 (Среднее качество, 24, 25 или 30 кадров в секунду)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
-minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-640x360-medium.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
-minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 4 \
-quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-640x480-medium.webm
- Входной файл: tear_of_steel_1080p.webm (1920x800, 544,88 МБ)
- Выходной файл: tos-640x480-medium.webm (640x480, 69,27 МБ)
1280x720 (24, 25 или 30 кадров в секунду)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
-minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1280x720-24-30fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
-minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 8 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-1280x720-24-30fps.webm
- Входной файл: tear_of_steel_1080p.webm (1920x800, 544,88 МБ)
- Выходной файл: tos-1280x720-24-30fps.webm (1280x720, 98,2 МБ)
1280x720 (50 или 60 кадров в секунду)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1280x720-50-60fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4-y tos-1280x720-50-60fps.webm
- Входной файл: tear_of_steel_1080p.webm (1920x800, 544,88 МБ)
- Выходной файл: tos-1280x720-50-60fps.webm (1280x720, 157,1 МБ)
1920x1080 (24, 25 или 30 кадров в секунду)
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 8 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1920x1080-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-1920x1080-24-30fps.webm
- Входной файл: tearofsteel_4k.mov (3840x1714, 6,76 ГБ)
- Выходной файл: tos-1920x1080-24-30fps.webm (1920x1080, 151,51 МБ)
1920x1080 (50 или 60 кадров в секунду)
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
-minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 8 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1920x1080-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
-minrate 1500k -maxrate 4350k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-1920x1080-50-60fps.webm
- Входной файл: tearofsteel_4k.mov (3840x1714, 6,76 ГБ)
- Выходной файл: tos-1920x1080-50-60fps.webm (1920x1080, 238,18 МБ)
2560x1440 (24, 25 или 30 кадров в секунду)
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
-minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-2560x1440-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
-minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 16 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-2560x1440-24-30fps.webm
- Входной файл: tearofsteel_4k.mov (3840x1714, 6,76 ГБ)
- Выходной файл: tos-2560x1440-24-30fps.webm 2560x1440, 533,54 МБ)
2560x1440 (50 или 60 кадров в секунду)
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
-minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-2560x1440-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
-minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 16 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-2560x1440-50-60fps.webm
- Входной файл: tearofsteel_4k.mov (3840x1714, 6,76 ГБ)
- Выходной файл: tos-2560x1440-50-60fps.webm 2560x1440, 664,04 МБ)
3840x2160 (24, 25 или 30 кадров в секунду)
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
-minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-3840x2160-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
-minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 24 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 4 -y tos-3840x2160-24-30fps.webm
- Входной файл: tearofsteel_4k.mov (3840x1714, 6,76 ГБ)
- Выходной файл: tos-3840x2160-24-30fps.webm 3840x2160, 1,03 ГБ)
3840x2160 (50 или 60 кадров в секунду)
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
-minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-3840x2160-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
-minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 24 \
-quality good -speed 4 -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -y tos-3840x2160-50-60fps.webm
- Входной файл: tearofsteel_4k.mov (3840x1714, 6,76 ГБ)
- Выходной файл: tos-3840x2160-50-60fps.webm 3840x2160, 1,56 ГБ)