четверг, 25 февраля 2016 г.

Настройки сжатия H.264/AVC в PlayClaw

Настройки для различных кодеров H.264/AVC в принципе похожи друг на друга (AMD, Intel, NVidia). Есть различия только в наборе предустановок и способов контроля битрейта.


В предустановке выбираем набор уже готовых параметров сжатия. В NVidia он сильно расширен и можно понять о предназначении каждого набора исходя из названия. Но для среднестатистического пользователя можно оставить NVDefault. Этот вариант вполне быстр и качественен.

Управление битрейтом

В группе управления битрейтом необходимо выбрать способ контроля кодером битрейта. Для всех кодеров есть стандартные CBR (постоянный битрейт) и VBR (переменный битрейт), а так же свои собственные варианты.

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

Переменный битрейт может контролироваться параметром квантования (QP - Quantization Parameter) или, другими словами, параметров качества. Чем ниже (0 - минимально) этот параметр, тем выше качество. Чем выше (51 - максимум), тем выше степень сжатия.
Например, у NVidia есть способ контроля VBR/QP, где можно задать минимальный и максимальный параметр. В этом случае кодер будет стараться "уложить" качество сжатия в заданные пределы, по возможности увеличивая реальный параметр (снижая размер данных), если кадр это позволяет.

У всех кодеров есть так же вариант контроля CQP (постоянный QP), где минимальная и максимальная границы одинаковы (и называются "качеством" в настройках). Этот вариант можно считать самым быстрым VBR для кодера, потому что ему не надо подбирать качество - оно уже жестко задано.

Управление цепочкой кадров

Поток кадров H.264/AVC состоит из трех видов кадров - ключевых (I-frame) и обычных (P-frame, B-frame). I-frame сжимается самостоятельно (по типу MJPEG), P-frame сжимается с учетом предыдущего I или P фрейма. B-frame создается с учетом предыдущего и последующего I или P фрейма.
Настройкой интервала ключевых кадров вы задаете как часто кодер вставляет I-frame. Чем более динамичная сцена, тем больше должно быть ключевых кадров. Некоторые сервисы трансляции задают рекомендуемые параметры и интервал ключевых кадров в том числе.

Интервал P-фреймов задает размер цепочки B-фреймов, которые помещаются между двумя последовательными P-фреймами. То есть, если интервал равен 1 (единица), то B-фреймы вообще отключаются. Если интервал равен 2, то между P-фреймами будет вставляться один B-фрейм.
Чем больше интервал P-фреймов, тем больше нагрузка на кодер и декодер.

Понятие группа кадров (GoP - Group of Pictures) - это кадры между двумя ключевыми кадрами (плюс первый кадр, ключевой). При создании P и B кадров кодер может использовать кадры за пределами группы кодируемого кадра. В этом случае группа называется открытой. Степень сжатия здесь повышается.
Сервисы трансляции могут потребовать закрытую группу. Для этого есть специальная опция в настройках.

Опция постоянного фреймрейта (CFR) дает возможность избежать потенциальной рассинхронизации видео и звука в некоторых редакторах (типа Adobe Premier). Если по какой-либо причине пропускается кадр, PlayClaw постарается имитировать его дубликатом предыдущего кадра.

Дополнительные настройки

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