10.4. Кодирование кодеком `Xvid`
Пред. | Глава 10. Кодирование с MEncoder | След.

## 10.4. Кодирование кодеком `Xvid`

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

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

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

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

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

### 10.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'а, но поддерживается только некоторыми аппаратными проигрывателями.

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

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

| Простой | Расширенный простой | DivX
Название профиля | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 4 | 5 | Карманный | Портативный NTSC | Портативный PAL | Домашний кинотеатр NTSC | Домашний кинотеатр PAL | HDTV
Ширина [пикселов] | 176 | 176 | 352 | 352 | 176 | 176 | 352 | 352 | 352 | 720 | 176 | 352 | 352 | 720 | 720 | 1280
Высота [пикселов] | 144 | 144 | 288 | 288 | 144 | 144 | 288 | 288 | 576 | 576 | 144 | 240 | 288 | 480 | 576 | 720
Частота кадров [fps] | 15 | 15 | 15 | 15 | 30 | 30 | 15 | 30 | 30 | 30 | 15 | 30 | 25 | 30 | 25 | 30
Максимальный средний битпоток [кбит/сек] | 64 | 64 | 128 | 384 | 128 | 128 | 384 | 768 | 3000 | 8000 | 537.6 | 4854 | 4854 | 4854 | 4854 | 9708.4
Пиковое значение средней величины битпотока за 3 секунды [кбит/сек] |  |  |  |  |  |  |  |  |  |  | 800 | 8000 | 8000 | 8000 | 8000 | 16000
Макс. B-кадров | 0 | 0 | 0 | 0 |  |  |  |  |  |  | 0 | 1 | 1 | 1 | 1 | 2
MPEG квантование |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |
Адаптивное квантование |  |  |  |  | X | X | X | X | X | X | X | X | X | X | X | X
Чересстрочное кодирование |  |  |  |  | X | X | X | X | X | X |  |  |  | X | X | X
Четвертьпиксельная точность |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |
Глобальная компенсация движения |  |  |  |  | X | X | X | X | X | X |  |  |  |  |  |

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

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

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

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

Пред. | Уровень выше | След.
10.3. Кодирование семейством кодеков `libavcodec` | Начало | 10.5. Кодирование кодеком `x264`