Создание H.264 видео: кодировщики в действии

Как вы можете догадываться, не все программы кодирования работают со всеми настройками одинаково.
Медиасерверы

Например, кодируя при помощи кодека Apple H.264, Apple Compressor поддерживает только профили Baseline и Main, и делает это при помощи в некоторой мере непонятного чекбокса, называющегося «Frame Reordering» («Переупорядочивание кадров», Рисунок 2). Если вы установите галочку, то получите профиль Main, а если не установите, — то профиль Baseline. Apple Compressor не позволяет вам указывать уровень или кодировать, используя профиль High.

Как упоминалось в предыдущей статье, Adobe Media Encoder позволяет вам выбирать и профиль, и уровень, как можно увидеть на Рисунке 3. Обратите внимание, что ни Apple Compressor, ни Adobe Media Encoder не дают доступа к параметрам кодирования, которые обсуждаются далее.

Энтропийное кодирование

Ещё одним специфическим параметром кодирования в H.264, включаемым в некоторые средства кодирования, является энтропийное кодирование, он определяет, как сжатые данные упаковываются в окончательном видео файле. Как можно видеть на скриншоте Sorenson Squeeze, показанном на Рисунке 4, есть два варианта — CAVLC и CABAC, где последний доступен только при использовании профилей Main или High.

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

При сравнительном тестировании файлов с одинаковыми параметрами (720 пикселей и битретойм 800 кбит/с), но с различными опциями CAVLC и CABAC, разница в качестве была заметна в некоторых сложных для кодирования сценах, и некоторые эксперты утверждают, что CABAC даёт такое же качество при более низких битрейтах, меньших на 12%-15%. На стороне проигрывателя воспроизведение файла с опцией CABAC потребовало на 0,6% больше процессорной мощности для компьютера HP 8710w Mobile Workstation с процессором 2.2GHz Core 2 Duo и на 4% — на «доинтелловском» двуядерном 2.7GHz PPC G5 Mac.

Поскольку преимущество в качестве ощутимо, а разница при воспроизведении – незначительна, то при создании видео в профилях, поддерживающих CABAC, использовать данный параметр целесообразно. Как можно увидеть на Рисунке 5, который представляет собой анализ файла, загруженного с YouTube, YouTube делает так же, используя эту рекомендацию для профиля High. Утилита, предоставляющая такую информацию, называется MediaInfo, она бесплатная и работает на платформах Windows, Mac и Linux. Её можно загрузить по ссылке http://mediainfo.sourceforge.net/ru.

B-кадры

Как и большинство современных технологий сжатия видео, H.264 использует межкадровое сжатие, чтобы устранить избыточность кадров (именно поэтому кодирование последовательностей ток-шоу значительно легче, чем матчей Чемпионата Мира). H.264 реализует межкадровое сжатие при помощи тех же трёх типов кадров, которые применяются и в MPEG-2: I-кадры, B-кадры и P-кадры.

I-кадры, также называемые опорными кадрами, кодируются без привязки к каким-либо другим кадрам при помощи алгоритма сжатия JPEG для статических изображений. P-кадры могут опираться на предыдущие I-кадры, чтобы получать избыточную информацию, тогда как B-кадры за избыточной информацией могут обращаться как к предыдущим, так и к последующим опорным кадрам, что делает B-кадры самой эффективной разновидностью кадров. Впрочем, как и в случае с кодированием CABAC, эта эффективность идёт за счёт повышенных требований к процессорной мощности, которые выставляют файлы, закодированные B-кадрами.

Это приводит нас к тем же вопросам, что и в случае с CABAC, — насколько лучше качество и насколько большие требования к процессору? Относительно первого вопроса, файлы, закодированные B-кадрами, могут похвастать немного более высоким качеством, чем те, которые закодированы без B-кадров, но только в файлах, передающих большое количество движения и произведенных с минимально возможным битрейтом. С точки зрения мощности процессора для воспроизведения, файлы с B-кадрами могут использовать до 10% больше мощности процессора, но, как правило, эта разница составляет около 5% или менее.

По этой причине рекомендуется использовать B-кадры, если их поддерживает профиль. Как показано на Рисунке 6 относительно Telestream Episode Pro, обычные параметры B-кадров включают количество B-кадров и количество ссылочных кадров (reference frames). Количество B-кадров – это количество B-кадров в последовательности между I-кадрами и P-кадрами. Таким образом, выставив значение в 3, последовательность будет выглядеть как IBBBPBBBPBBB … и так далее, до следующего I-кадра.

Количество ссылочных кадров – это количество кадров, в которых производится поиск на межкадровую избыточность. Здесь идёт попытка сбалансировать время кодирования с одной стороны и потенциальное улучшение качества – с другой, поскольку поиск этой избыточности занимает время. В большинстве видео файлов избыточность возникает чаще всего в кадрах, непосредственно окружающих кодируемый кадр, поэтому значения параметра reference frame большие 3-5, как правило, не дают особого дополнительного качества. Рисунок 6 показывает настройки, рекомендуемые для большинства случаем кодирования, где количество B-кадров установлено в 3 и используется 3 ссылочных кадра.