7.4. Кодирование кодеком Xvid

7.4. Кодирование кодеком Xvid

Xvid — это свободная библиотека для кодирования MPEG-4 ASP видео потоков. Перед тем, как начать кодирование, Вам потребуется настроить MEncoder для его поддержки.

Это руководство в основном нацелено на особенности применения тех же методов, что описаны в руководстве по кодированию с помощью x264. Поэтому, сначала прочтите, пожалуйста, первую часть того руководства.

7.4.1. Какие опции следует использовать для получения лучших результатов?

Пожалуйста, начните с просмотра раздела Xvid man страницы MPlayer. Этот раздел предполагается как дополнение к man странице.

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

7.4.2. Опции кодирования Xvid

  • vhq Эта опция влияет на алгоритм принятия решений о макроблоке, чем выше значение, тем мудрее будут решения. Значение по умолчанию можно без опаски использовать для любого кодирования, в то время, как более высокие значения всегда улучшат PSNR, но будут работать значительно медленнее. Заметьте, пожалуйста, что лучший PSNR не обязательно означает лучше выглядящую картинку, но говорит, что она ближе к оригиналу. Отключение этой опции заметно ускоряет кодирование; это может быть достойным компромиссом, если скорость Вам критична.

  • bvhq То же, что и vhq, но для B-кадров. Имеет незначительное влияние на скорость и слегка улучшает качество (около +0.1дБ).

  • max_bframes Большее число допустимых последовательных B-кадров обычно улучшает сжимаемость, хотя оно может также привести к большему количеству блочных артефактов (квадратиков). Значение по умолчанию — хороший выбор между сжимаемостью и качеством, но Вы можете увеличить его до 3, если стеснены величиной битпотока. Вы также можете уменьшить это значение до 1 или 0, если печетесь об отличном качестве, впрочем в этом случае Вы должны убедиться, что целевой битпоток достаточно высок, дабы кодировщик не увеличивал значение квантователя, сохраняя нужную величину битпотока.

  • bf_threshold Управляет чувствительностью кодировщика к B-кадрам, где большие значения приводят к использованию большего количества B-кадров (и наоборот). Опция должна использоваться совместно с max_bframes; если Вы стеснены величиной битпотока, то должны увеличить и max_bframes, и bf_threshold, в том время как увеличение max_bframes и уменьшение bf_threshold позволят кодировщику использовать больше B-кадров в местах, где это действительно необходимо. Низкое количество max_bframes и высокое значение bf_threshold — это, возможно, не самое мудрое решение, поскольку оно принудит кодировщик размещать B-кадры в местах, которые никак не выиграют от этого, тем самым ухудшая визуальное качество. Однако, если Вам требуется совместимость с аппаратными проигрывателями, поддерживающими только старые DivX профили (которые поддерживают только 1 последовательный B-кадр), это единственный способ увеличить сжимаемость при помощи B-кадров.

  • trellis Оптимизирует процесс квантования для получения оптимального соотношения между PSNR и битпотоком, что позволяет существенно экономить биты. Эти биты впоследствии будут потрачены на другие части видео, что приведет к увеличению общего качества. Следует всегда оставлять эту опцию включенной, поскольку ее влияние на качество огромно. Даже если Вы заботитесь о скорости, не отключайте ее до тех пор, пока не выставили vhq и остальные более CPU-прожорливые опции на минимум.

  • hq_ac Активирует более точный метод оценки стоимости коэффициентов, что уменьшает размер файла примерно на 0.15 - 0.19% (соответствует увеличению PSNR меньше, чем на 0.01дБ), имея несущественное влияние на скорость. Поэтому, рекомендуется всегда держать эту опцию включенной.

  • cartoon Разработана для лучшего кодирования мультфильмов и не влияет на скорость, поскольку всего-лишь настраивает эвристики принятия решений о режимах для этого типа содержимого.

  • me_quality Это опция для настройки точности оценки движения. Чем выше me_quality, тем точнее будет оценка оригинального движения и тем лучше получающийся отрывок будет фиксировать оригинальное движение.

    Настройка по умолчанию лучше во всех случаях, поэтому не рекомендуется ее выключать, если только Вы действительно не гонитесь за скоростью, поскольку биты, сэкономленные хорошей оценкой движения, могут быть использованы где-нибудь еще, увеличивая общее качество. Таким образом, не используйте значения ниже 5, да и его — только в крайнем случае.

  • chroma_me Улучшает оценку движения, дополнительно принимая во внимание информацию о цвете, тогда как одна me_quality использует только яркость. Это замедляет кодирование на 5-10%, но несколько улучшает визуальное качество, уменьшая эффект блочности и сокращая размер файла примерно на 1.3%. Если Вас интересует скорость, следует попробовать отключить эту опцию, прежде чем решите уменьшать значение me_quality.

  • chroma_opt Эта опция служит для увеличения качества цветного изображения вокруг чисто черных/белых границ вместо улучшения сжатия. Она также может помочь против эффекта "красных ступенек".

  • lumi_mask Пытается отдать меньший битпоток областям изображения, которые человеческий глаз не в состоянии увидеть достаточно хорошо, что позволит кодировщику потратить сэкономленные биты на более важные части картинки. Качество закодированного материала, привнесенное этой опцией, сильно зависит от личных предпочтений и от типа и настроек монитора, использовавшегося для просмотра (обычно результат выглядит не очень хорошо, если он яркий, или является TFT монитором).

  • qpel Увеличивает количество предполагаемых векторов движения, путём повышения точности оценки движения с полупиксельной до четвертьпиксельной. Идея состоит в том, чтобы найти лучшие векторы движения, которые взамен уменьшат битпоток (тем самым увеличивая качество). Однако, векторы движения с четверьтпиксельной точностью требуют большего количества дополнительных бит для кодирования, а векторы-кандидаты не всегда дают (значительно) лучшие результаты. Достаточно часто кодек тратит дополнительные биты на повышенную точность впустую, а взамен получает или вообще ничего, или небольшое увеличение качества. К сожалению, нет способа предсказать возможные улучшения от qpel, так что Вам придется сделать кодирование с ней и без нее, чтобы знать наверняка.

    qpel может почти удвоить время кодирования и требует, как минимум, на 25% большей мощности при декодировании. Она поддерживается не всеми аппаратными проигрывателями.

  • gmc Пытается сэкономить биты в панорамных сценах, используя один вектор движения для всего кадра. Это почти всегда увеличивает PSNR, но заметно замедляет кодирование (так же как и декодирование). Поэтому Вас следует использовать ее, только когда Вы включили vhq на максимум. GMC Xvid'а является более сложным, чем у DivX'а, но поддерживается только некоторыми аппаратными проигрывателями.

7.4.3. Профили кодирования

Xvid поддерживает профили кодирования через опцию profile, которая используется для накладывания ограничений на значения видео потока Xvid таким образом, что он будет воспроизводиться на всем, что поддерживает выбранный профиль. Ограничения относятся к разрешению, битпотоку и некоторым возможностям MPEG-4. Следующая таблица показывает, что поддерживает тот или иной профиль.

 ПростойРасширенный простойDivX
Название профиля0123012345КарманныйПортативный NTSCПортативный PALДомашний кинотеатр NTSCДомашний кинотеатр PALHDTV
Ширина [пикселов]1761763523521761763523523527201763523527207201280
Высота [пикселов]144144288288144144288288576576144240288480576720
Частота кадров [fps]15151515303015303030153025302530
Максимальный средний битпоток [кбит/сек]646412838412812838476830008000537.648544854485448549708.4
Пиковое значение средней величины битпотока за 3 секунды [кбит/сек]          800800080008000800016000
Макс. B-кадров0000      011112
MPEG квантование    XXXXXX      
Адаптивное квантование    XXXXXXXXXXXX
Чересстрочное кодирование    XXXXXX   XXX
Четвертьпиксельная точность    XXXXXX      
Глобальная компенсация движения    XXXXXX      

7.4.4. Примеры настроек кодирования

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

Все настройки кодирования проверялись на тестовом видео 720x448 @30000/1001 fps с целевым битпотоком 900кбит/сек, на машине AMD-64 3400+ с 2400 МГц и 64 битном режиме. Для каждой настройки кодирования указаны измеренная скорость кодирования (в кадрах в секунду) и потеря PSNR (в дБ) по сравнению с настройкой "очень высокое качество". Поймите, пожалуйста, что в зависимости от Вашего материала, типа машины, прогресса разработки, Вы можете получить сильно отличающиеся результаты.

ОписаниеОпции кодированияскорость (в fps)Относительная потеря PSNR (в дБ)
Очень высокое качествоchroma_opt:vhq=4:bvhq=1:quant_type=mpeg16fps0дБ
Высокое качествоvhq=2:bvhq=1:chroma_opt:quant_type=mpeg18fps-0.1дБ
Быстроеturbo:vhq=028fps-0.69дБ
Реального времениturbo:nochroma_me:notrellis:max_bframes=0:vhq=038fps-1.48дБ