Videorip.info

Учимся кодировать видео и делимся опытом

Кодек XviD — Настройки, описание, рекомендации, FAQ

Кодек XviD — Настройки, описание, рекомендации, FAQ

Статья в процессе написания, когда есть свободное время - тогда и пишу...

1. Что вы можете рассказать мне о настройках в XviD?

XviD FAQПри открытии настроек кодека XviD в программе XviD4PSP 5 в первый раз, вы увидите много кнопок, вкладок, выпадающих под панелей Показывающих варианты, варианты и .... что вы думаете? Дополнительные параметры настроек кодека XviD.
В принципе, все варианты, что предлагает XviD очень сильно отличаются от большинства других MPEG-4 кодеков. Они могут иметь значение (или не иметь) для Вашего кодирования, а также могут иметь огромное влияние на скорость кодирования. Вы можете выбрать определенные опции, при кодировании с которыми Ваш результат будет воспроизводиться с кодеками / декодерами, не только XviD ( например DivX или 3ivx кодек или FFDShow), или же Вы можете выбрать все эти дополнительные опции, которые делают XviD настолько уникальным и универсальным. Вы можете выбрать варианты, которые позволят в режиме реального времени кодировать телевизионную трансляцию или видео с камеры наблюдения, или же Вы можете выбрать опции, которые заставят кодек замедлиться до скорости улитки, но дадут очень хорошие результаты.

(Следующее описание настроек XviD для XviD4PSP 5 сборки от fcp. В других сборках интерфейс может быть отличным от этого, но Вы найдете много, если не все параметры, определенные в той или иной форме).

Настройки кодека XviD в XviD4PSP 5

В верху окна Настройки видео кодирования Вы можете видеть каким кодеком был закодирован исходный видео файл (исходник), его размер и соотношение Бит/(Пиксели*Кадры) а также предполагаемый размер и соотношение Бит/(Пиксели*Кадры) в перекодированном видео, при условии что уже настроены разрешение и частота кадров. (Исключение: Невозможно предугадать размер и соотношение Бит/(Пиксели*Кадры) при кодировании в режиме Constant Quality)

Вкладка Main

XviD Encoding ModeEncoding mode — Возможность выбрать режим кодирования: в установленный битрейт, с постоянным качеством или же в установленный размер.

  1-Pass Bitrate — Закодирует видео сразу, за один проход. Берет каждый кадр видео, проверяет на сжимаемость и затем кодирует его.

  2-Pass Bitrate — Кодирование в два прохода. В первом проходе делается оценка того, как сильно Ваше видео поддается сжатию. А во втором проходе используются данные о сжимаемости, собранные во время первого прохода, чтобы действительно закодировать видео.

  3-Pass Bitrate — То же, что и 2-Pass Bitrate, но кодирование производится в 3-м проходе. А во 2-м проходе производится уточнение статистики, полученной на первом проходе. Это дает возможность более корректно распределить битрейт и точно попасть в заданный битрейт.

  Constant Quality — Кодирование с постоянным квантизером ("делителем"). Чем меньше квантизер - тем выше качество. В этом режиме выходной битрейт не определен, и зависит от сжимаемости видео. Так же следует учитывать, что не зависимо от выставленного квантизёра, кодер не будет использовать значения, меньше Min Q и больше Max Q установленные на вкладке Frames.

  3-Pass Quality — Первый проход кодируется в режиме Constant Quality, определяется битрейт перекодированного файла. Второй и третий проходы эквиваленты обычному 2-х проходному кодированию (2-Pass Bitrate), в качестве битрейта задается ранее подсчитанный битрейт.

  2-Pass Size — Кодирование в два прохода. В первом проходе делается оценка того, как сильно Ваше видео поддается сжатию. А во втором проходе используются данные о сжимаемости, собранные во время первого прохода, чтобы действительно закодировать видео а также устанавливается необходимый битрейт (высчитывается встроенным в XviD4PSP 5 калькулятором) для точного попадания в заданный битрейт (в пределах разумного, кодек не сможет закодировать минутный семпл из DVD video в размер 2GB).

  3-Pass Size — То же, что и 2-Pass Size, но (по аналогии с 3-Pass Bitrate) во время второго прохода производится уточнение статистики, полученной на первом проходе. Третий проход - непосредственно кодирование. Это дает возможность более корректно распределить битрейт и точно попасть в заданный размер.

Какой режим выбрать зависит от того, чего Вы желаете от результата. Кодирование в два прохода намного лучше в распределении битов, там где они необходимы, и поэтому дает Вам намного лучше выглядящее видео. Однопроходное кодирование пригодно для использования только когда невозможно сделать кодирование в два прохода, как например кодирование в реальном времени в прямом эфире, телевизионный захват или камеры видеонаблюдения. Если вам обязательно надо пойти на однопроходное кодирование по определенной причине тогда действительно нет другого пути, кроме кодирования в два прохода.
Обратите внимание, что DivX 5 в настоящее время имеет опцию "Multi-Pass ", что позволяет больше чем кодирование в два прохода. Это предназначается, чтобы получить еще лучшее распределение бит (вроде путем усреднения между большим количеством проходов), но многие пользователи сообщают близкие к нулю выгоды после третьего прохода. XviD действительно не нуждается в технике, как эта, потому что решение-распределения-бит которое она делает умнее и дает лучшие результаты.

    Квантизер — это так называемый DRF (Detail Removal Factor) - величина, показывающая степень потери детализации изображения, то есть обратно пропорциональная качеству. Чем больше квантизер — тем больше деталей будет потеряно. Визуально это проявляется появлением блочности на изображении (квадратных артефактов в кадре). Соответственно, чем меньше квантизер, тем больше детализация кадра (качество) а также битрейт, необходимый для его сжатия и, частично, его размер. По умолчанию минимальный квантайзер равен — 2; максимальный — 31.

Bitrate:(kbps) / Качество:(Q) / Размер: (MB) — Зависит от того что выбрано в Encoding mode. XviD Main

Preset — Профиль в основном соответствует определенным настройкам кодека, предназначенным специально для определенного использования, сценарии...
В каждом Профиле у Вас есть разные уровни настроек, которые ограничивают тот особый профиль определенным сценарием. После изменения некоторых настроек выбранного пресета он может сбросится на Custom (например изменение количества B-кадров).
  Default — Настройки кодека по умолчанию.
  Turbo — Быстрое кодирование, плохое качество
  Ultra — Высокое качество кодирования, оптимальное соотношение скорость / качество.
  Extreme — Очень высокое качество, медленное кодирование
  Custom — Персональные настройки кодека

FOURCC — Здесь вы можете изменить FourCC используемый в полученном файле после кодирования. FourCC в основном содержит идентификационный код, содержащийся в перекодированном видео файле. При сжатии, в заголовке AVI файла прописывается метка, каким кодеком это было сжато. При воспроизведении проигрыватель считывает эту метку и запускает соответствующий декодер (говорит мультимедийному приложению (например, WMP, MPC или DivX Player-у), какой тип декодера должен быть использован для правильного открытия видео). Для Mpeg4 совместимых кодеков возможна замена декодера. Вы можете установить, например, DivX или DX50 что бы проигрывать видео с помощью DivX 5 декодера. Если Вы это делаете, вы должны принять во внимание ограничения того декодера, так что вы не можете использовать некоторые функции XviD (например, больше чем 1 B-кадр или GMC). Рекомендуется, если вы действительно хотите, чтобы Ваши видео файлы воспроизводились на аппаратных плеерах, поддерживающих DivX, но не XviD.

Cartoon — Включает некоторый механизм по оценке движения, который пропускает больше макро-блоков (вместо того, чтобы кодировать их). Результат - более устойчивое, немного менее подробное (детализированное) изображение. Именно то что нужно для кодирования мультфильмов как "Futurama или Simpsons." Я не рекомендовал бы это для более детализированного японского аниме.
Активизирует два различных метода, оба разработанные, чтобы помочь с мультфильмами:
- detect_static_motion — флаг оценки движения, он работает как предел (лимит). Если движение, найденное процессом поиска движения, ниже этого предела, макроблок считается статичным, и никакая информация о движении не кодируется. Когда Cartoon режим включен, предел, ниже которого макроблок считается статическим, увеличивается так, что небольшие движения будут потеряны еще больше. Так как МНОГО этих "маленьких движений" являются фактически шумом (особенно в мультфильмах), он действительно помогает экономии многих битов, которые иначе использовались бы, чтобы закодировать шум на статической картинке.
- vop_cartoon  Квантизация. Когда блок получил достаточно хорошую компенсацию движения (с полной ошибкой ниже предела), это просто не кодируется вообще. XviD не пропускает данных в нормальном способе кодирования (предел = 1), но пропускает довольно много в мультипликационном способе. Опять же, это обычно означает, что шум проигнорирован. Это может также удалить некоторые мелкие детали, но мелкие детали действительно не должны присутствовать в "правильных" мультфильмах.
Таким образом, в то время как первая техника помогает с удалением движений, которые являются настолько крошечными, что можно считать что они "не являются частью источника", вторая помогает сжимаемости мультфильма, удаляя детали структуры, которые посчитала "слишком маленькими, чтобы быть частью источника".

Grayscale — говорит кодеку кодировать без цветной информации. Применяется для того, чтобы сэкономить биты на титрах в конце фильма. Кодирует изображение в чёрно-белое.

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

Chroma optimizer — будет делать дополнительные «магические» действия над информацией о цвете, чтобы минимизировать эффект лестницы на границах. Это улучшит качество ценой скорости кодирования. Это снижает PSNR по своей природе, математическое отклонение от оригинальной картинки станет больше - но субъективное качество изображения будет лучше (как уже упоминалось, "ступенчатых артефактов" будет меньше). Поскольку он работает с информацией о цвете, Вы можете отключить его при кодировании в оттенках серого.

Профиль (+/-) — Возможность сохранить свой профиль настроек кодека (при большом желании удалить существующий).

Вкладка Motion

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

XviD Motion Motion search — Самая основная настройка точности поиска движения, и ей требуется большая продолжительность обработки, НО рекомендуется оставить 6. Допускается опускать значение ниже, до 5-ти, и только если Вы спешите. Кстати: она работает только в яркостной плоскости изображения, т.е. только смотрит на изменения в яркости, а не в цвете.

VHQ mode — Более интенсивный поиск и широкий подход, оптимизирует режим макроблоков, вместо усреднения. Более высокие параметры настройки замедлят кодирование значительно. Установка в 1 оказывает относительно маленькое влияние, и рекомендуется для любого кодирования. Использование более высоких значений даст Вам лучшее качество за счет падения скорости кодирования.

Quarter pixel search — Поиск движения с точностью до четверти пикселя. Это повышает чёткость, особенно на низких разрешениях, но вместе с этим добавляет шум на изображение. Естественно, просто так это не происходит. Включение Q-pel повышает загрузку процессора и увеличивает поток, используемый для этого. Не поддерживается Старыми аппаратными MPEG-4 плеерами.
Как Q-пиксел работает и когда я должен использовать его?
Q-pel (или Qpel) является кратким названием от Quarter Pixel motion search precision (поиск движения с точностью до Четверти Пикселя), и этот выбор активизирует использование точности до четверти пикселя.
Поиск движения пытается захватить все движение между одним кадром и следующим, так, чтобы макроблоки (Дальше MB) могли получить правильные векторы движения, назначенные на них. Если движение должным образом захвачено тогда не будет никакой потребности в дополнительных изменениях к MB-ам кроме вектора движения, экономя некоторые биты. Чем более точно движение захвачено, тем меньше битов может быть назначено на содержание MB-ов, и больше MB-ов может состоять только из вектора движения.
Так, теоретически, более точный захват движения бы спасти в измененной информации о структуре, таким образом экономя биты, и точность увеличения полного сжатия, таким образом увеличивая качество. (Мы будем скоро видеть, почему это только теоретически)

Обычно XviD использует точность поиска движения полупиксела. Это означает, что он может "видеть" движение с субпиксельной точностью; если MB перемещается по ширине, положение высоты от 200, 300 до 201, 300 в следующих двух кадрах, Q-pel может обнаружить это движение правильно и может дать MB вектор движения, который говорит, "переместите меня на половину пикселя вправо в этом кадре, пожалуйста", и в тех следующих двух кадрах. Движение будет захвачено правильно, и никакие биты кадров не изменены.
Теперь с Qpel Вы можете захватить движение, которое перемещается только на четверть пикселя за кадр, эффективно удваивая точность.

Пример:
MB, который перемещается (плавно) от положения 200, 300 до 201, 300 в следующих четырех кадрах, перемещается только на одну четверть пикселя за кадр. С нормальной точностью полупиксела это движение отображалось бы с 'подергиванием', и кодеку, возможно, пришлось бы дать компенсацию за это, изменяя части структуры MB. Это, конечно, занимает место, и MB больше не состоял бы из только вектора движения; нужно было бы назначить дополнительные биты для измененной информации о кадре, таким образом уменьшая сжимаемость.
С Qpel,  движение будет захвачено правильно и не потребуются дополнительные биты для измененной информации о кадре, количество битов, используемых для этой структуры уменьшится.
Легко да? Но подождите, здесь есть одна проблема...
Итак, в чем же подвох?
Загвоздка в том, что только само использование Qpel уже использует дополнительные биты.
Помогает ли это экономии бит в целом или нет?
Это связано с дополнительной точностью, что требует больше битов, отводимых для векторов движения. Вместо того, что вектор движения может быть просто что-то вроде 0.5,0 (половина пикселя движение по ширине, без движения по высоте) этого не будет а будет 0.25,0 (четверть пикселя движение по ширине, без движения по высоте). Таким образом, вместо одной десятой после точки теперь требуется два десятичных знака после точки, требующие кодек бросить больше бит на сохранение этого значения.
(Обратите внимание, что это упрощение реального процесса, но это достаточно правильно чтобы понять принцип работы)
Вместо другой десятичной Qpel фактически использует другой дополнительный бит (устанавливается 0 или 1) для каждой оси, что достаточно для достижения двойной точности. Существуют две оси, одна для ширины и одна для высоты, так что каждый вектор движения требует двух дополнительных битов для Qpel.
Если предположить, что существует один вектор для всех макроблоков (там может быть 4 или 0), на разрешение 640x272 и 24 fps и P-кадрах только два бита для каждого макроблока принять 40 х 17 х 2 х 24 = 32 640 бит или 32,5 Кбит / с.
Так, в основном, независимо от результата, Qpel всегда берет значительный кусок битрейта только для себя, даже если это не поможет сжатию хоть одного проклятого бита.
Теперь правило, это действительно помогает, но биты кадров, сэкономленные лучшей точностью должны быть больше, чем биты добавленные векторами движения, прежде чем сжимаемость с Qpel увеличится при том же размере. Если сэкономленные биты кадров больше, чем дополнительные биты вектора движения, тогда Вы увеличите сжимаемость (и качество) в том же самом размере. Если сэкономленные биты кадров не больше, чем биты добавленные векторами движения, Вы потратите впустую место и конечный результат может выглядеть хуже.
Как же я могу узнать, использование Qpel будет увеличивать или уменьшать сжимаемость?
Вот другая загвоздка: Вы не можете узнать заранее. Нет никакого способа узнать, просто посмотрев на источник, поможет Qpel или нет. Не имеет значения, быстрая сцена с движением или медленная, панорамная сцена или изменяющая масштаб... Просто нет способа узнать заранее. Быстрая сцена с движением может составить 90%-ое движение Qpel или 90%-ое движение полупикселя, или любой другой процент... Это все делает какое-либо предварительное предположение о преимуществах кодирования с Qpel смешным.

Единственный реальный способ узнать состоит в том, чтобы попытаться кодировать и с и без Qpel и увидеть, какой результат выглядит лучше.
(Теперь вы можете понять, почему существует разница между теорией и практикой ...)

Некоторые дополнительные примечания:
— Из-за повышенной точности, Qpel значительно увеличивает время кодирования и требует больше вычислительной мощности для декодирования. Кодирование может занять почти в два раза больше времени и, соответственно, может потребоваться до 30-60% больше мощности для декодирования.
— В некоторых старых версиях (альфа) Qpel может создавать артефакты, но текущие реализация не имеют известных ошибок. Это безопасно для использования.
Quarter pixel search Не поддерживается Старыми аппаратными плеерами! Не кодируйте для других если не уверены что их аппаратный плеер сможет проиграть видео закодированное с Qpel!

Global motion compensation —  Глобальная Компенсация Движения (GMC), само название в значительной степени рассказывает о том, что делает GMC. Она начинает работать в моменты панорамирования, наезда или отъезда на объект, а так же при поворотах. Не поддерживается аппаратными MPEG-4 плеерами.
Для чего нужна GMC?
Если используется, то она будет смотреть на всю структуру кадра , есть ли  движение всех частей кадра в общем. Затем возьмет эту сумму движения и поместит ее в одно значение. Части кадров — макроблоки а количество движения называется "вектор движения", которое имеет как направление так и значение (своего рода как двумерное X, Y значение).

Все макроблоки обычно имеют свои собственные векторы движения, но у GMC всего один вектор движения, который они имеют все вместе (именно поэтому и называется "Глобальным") поэтому все векторы будут компенсироваться и вкладываться в один вектор движения. Некоторые движения макроблоков "будет полностью компенсировать вектор GMC, получая полностью сведены на ноль процесс компенсации. Вектор движения этих макроблоков будет тогда удален, поскольку это то же самое, и является только дополнительной информацией. Возможная выгода в том, что Вы можете удалить многие или даже все векторы движения макроблоков (или даже непосредственно сами блоки, если нет никакой информации о изменениях в текстуре) в кадре за счет одного значения, тем самым делая его гораздо меньше.
Заметим, однако, что это для одной warppoint GMC. С Несколькими warppoints процессы гораздо более сложные, но принцип тот же.
Warppoints, хм..., что за warppoint?
warppoint — это вектор движения, что определяет смещение одного * края * в видео. Возьмите лист бумаги за края и перемести его, и вы увидите то, что я имею в виду.
— Первый warppoint определяет смещение верхнего левого края если это единственный warppoint, это когда остальное изображение имеет тот же вектор и вся картинка движется. Подумайте о панорамировании.
— Второй warppoint определяет смещение верхнего правого края (не * точно * правда, но достаточно близко, не вдаваясь слишком в технические подробности). Вместе с первым warppoint, этого достаточно, чтобы определить панорамирование * и * зум. Обратите внимание, что оно могло бы быть использовано для определения панорамирования и поворота вместо этого, но * нет *
— Третий warppoint определяет смещение вниз левого края и три warpoints достаточно, чтобы определить панорамирование, масштабирование и поворот.
— Четвертый warppoint создал бы подобное перспективе движения.
Обратите внимание, что GMC XviD использует 3 warppoints, в то время как GMC DivX использует только один. Warppoints хранятся в заголовке кадра, и только тогда, когда они используются.

Chroma motion estimation — Оценка движения цветовой информации. Принимает во внимание цветовую информацию в кадре, работает на основе Motion search с настройкой 7 но в области цветности, согласно названию. Рекомендуется!

Вкладка Frames

Стандартный рип, сделанный кодеком XviD, содержит 3 типа кадров (frames):

1. I-frames — ключевые кадры, мало сжимаемые но не требуют других кадров для декодирования видео
2. P-frames — промежуточные (прогнозируемые) кадры, могут использовать данные из предыдущих кадров для распаковки и более сжимаемые, чем I-frames.
3. B-frames — двунаправленные интеллектуальные кадры, могут использовать как предыдущие так и следующие кадры для распаковки, чтобы получить наибольший объем сжатия данных.

I-frames содержат видеоинформацию и кодируются с минимальным сжатием, следовательно, имеют максимальную детализацию изображения. Навигация по видеоряду, операции резки/склейки осуществляются только по I-frames. В начале видеоряда и на смене сцен всегда стоит ключевой кадр.

P-frames содержат видеоинформацию об отличии видеокадра от предыдущего - то есть, при его распаковке мы получим не полный кадр, а, грубо говоря, отличие от предыдущего. На статических сценах кадры меняются сравнительно мало, поэтому отличия содержат меньше видеоинформации, чем полный кадр, и, благодаря этому, p-frames значительно меньше, чем i-frames. Но, для получения полного видеокадра, нам нужно иметь полный предыдущий кадр, чтобы добавить к нему это отличие. Для получения следующего – полный предыдущий и так далее... То есть, нам нужно декодировать подряд всю цепочку кадров, начиная с ближайшего i-frame, имеющего полную информацию о кадре.

B-frames содержат видеоинформацию, вычисляемую по двум кадрам — предыдущему и следующему. Алгоритм весьма сложный, разный у разных кодеков. Очень грубо говоря, делается однозначная и легко вычисляемая интерполяция между предыдущим и следующим кадром, и B-frame содержит информацию о том, насколько реальный кадр отличается от этой интерполяции. Поскольку чаще всего предыдущий и последующий кадры, как правило, P-frame, (хотя может быть и i-frame), а b-frame вычисляется по их отличию, то он является разницей между двумя разницами. Это очень грубая аналогия, конечно. Они разработаны для того, чтобы уменьшить размер файла на выходе и сэкономить битрейт для кодирования I-frames и P-frames.
Например: нам надо закодировать, чисто теоретически, 3 одинаковых кадра: I, P и ещё один P с битрейтом 20 бит/сек. На I-frame уйдёт 10 бит, на P-frames - по 5 бит соответственно. А теперь представьте, что вместо одного P-frame у вас B-frame, на который уйдёт не 5, а 3 бита. Оставшиеся 2 бита кодек добавит либо к I-frame, либо к P-frame (куда нужнее будет), тем самым увеличив качество данного кадра, то есть детализацию.
Размер B-frame будет меньше, чем заменённого им P-frame (данное справедливо для кодека XviD), так как B-frame — это не картинка, а разница между двумя другими разницами, как было сказано выше. Таким образом, мы выигрываем ещё и в размере.

Итак, стандартный видеоряд представлен следующей последовательностью кадров:
I-P-B-P-B-P-B-P-B-I в следующей пропорции (при условии использования I-frames 1): ключевой кадр, по 150 чередующихся P-frames и B-frames, и вновь ключевой кадр. То есть на 300 кадров видеоряда мы имеем 1 ключевой кадр. Это, я напоминаю, по умолчанию; в то же время кодек, определяя начало новой сцены, ставит первым ключевой кадр; таким образом, этот параметр не значит, что у нас на 300 кадров действительно будет лишь 1 ключевой; как минимум, их будет столько, сколько новых сцен в данном отрезке видеоряда. Разные рипперы используют разное количество, вернее, величину этого параметра – от 100 до 500. Количество ключевых кадров влияет на три параметра:
1. облегчение навигации по фильму и операций резки/склейки;
2. качество видеоряда;
3. размер файла;

XviD FramesB-frames — Определяет максимальное количество идущих подряд B-кадров. Если поставить 0, то мы попросту отключим использование B-кадров. Если поставить 1, то последовательность кадров будет: IPBPBPBPBPI (для большей совместимости со старыми аппаратными плеерами); если 2, то: IPBBPBBPBPI (для лучшего эффекта; установка B-frames 2 не означает что Везде будет два B-кадра подряд, это всего лишь ограничение что бы не было Больше двух подряд. На сложных сценах с движением последовательность кадров может выглядеть вот так: IPBPPPPBPPPBBPBPI ); если 3, то: IPBBBPBBBPBPI (для интенсивного использования, может быть не совместимо с аппаратными MPEG-4 плеерами)Однако при очень большом количестве B-frames качество картинки может стать хуже (из-за высокой степени сжатия B-frames). Рекомендуется ставить 1 или 2 для того что бы не потерять совместимость с аппаратными MPEG-4 плеерами (По стандарту DivX, B-frames 1 рекомендуется при установке FOURCC — DivX / DX50).
B-кадрами (или BVOPs в технических обсуждениях) являются так называемые двунаправленные закодированные кадры и они являются частью определения Advanced Simple Profile (ASP). Без B-кадров вы просто должны придать ключевым кадрам четкое определение появления кадра каждые XXX кадров, а все остальные кадры (P-кадры) будут ссылаться на предыдущий, ключевой кадр, для описания. B-кадры ссылаются как на предыдущий так и на следующий кадр, поэтому они относится к другим кадрам в двух направлениях (эргономичная B-часть). Преимущество B-кадров в том, что они, как правило, закодированы с большим квантизером и занимают меньше места (битов) в видео, в то время как потери качества меньше в сравнении с потерями в использовании бит. В общем, вы используете изначально меньшие и хуже по качеству B-кадры, чтобы сэкономить место, которое будет использоваться для повышения качества во всем клипе. Основной эффект, как правило, улучшение качества, в зависимости от параметров B-кадра и типа источника.

B-frames ratio — Множитель (в среднем) окружающих квантов НЕ B-кадров, с этим значением, даст вам квантизер  B-кадра (высчитывается, согласно формуле, на сколько должен быть поднят квантизер для B-кадров). Так что, если два смежных кадра имеют кванты 2 и 4, средний квант будет 3. Множитель с соотношением кванта 150 даст вам B-кадр с квантом — 4,5.
Пример: (2 + 4) * 150 / 200 = 4,5 (при условии что B-frames offset=0)
(Квантизер предшествующего НЕ B-кадра + Квантизер следующего НЕ B-кадра) * (B-frames ratio) / 200 (при условии что B-frames offset=0)
Снижать этот параметр не рекомендуется (теряется смысл B-кадров). Повышать Вы можете на своё усмотрение, это повысит сжатие B-кадров (соответственно, снизит их качество) и повысит качество I и P-кадров.

B-frames offset — Смещение квантизера. Возьмите результат расчета выше, а затем добавьте это значение. Со смещением квантизера 200 вы в конечном итоге получите B-кадры с квантом 6,5.
Как правило, повышение последних двух значений, даст Вам B-кадры более низкого качества.

Key-frames intervalМаксимальное расстояние между ключевыми (I-frames) кадрами (интервал). Эта опция указывает кодеку когда Обязательно нужно вставить ключевой кадр (I-кадр) через заданное число кадров (интервал). Если ключевой кадр необходим раньше, чем это число было достигнуто, он будет вставлен (например в месте смены сцен), и кодек начнет отсчет снова. Таким образом, хоть Вы и можете получить ключевые кадры с меньшим расстоянием, чем заданный интервал, у Вас не может быть более высоких интервалов.
Стандартные рекомендации настройки, 10x количество кадров в секунду, то есть 250 для 25fps PAL видео, 300 для NTSC 29,979 и т.д. Однако, есть видимый эффект, называемый Keyframe-pumping. Это напоминает медленное ухудшение качества последовательных P-и B-кадров с внезапным "скачком " по качеству, когда вставляется новый Ключевой кадр. В таких случаях может помочь Снижение максимального интервала I-кадра . Установка большого значения может привести к плохой навигации при перемещении по видео, так как процесс поиска использует только ключевые кадры, и меньшее количество ключевых кадров = менее точный поиск.
Примечание: Замечено появление артефактов при кодировании мультипликационных фильмов с Key-frames interval 300 для 25fps PAL видео, снижайте до 240-200...

Closed GOPClosed GOP  гарантирует, что P-кадр будет использоваться перед каждым новым I-кадром. Этот параметр всегда должен быть проверен (в противном случае Вы можете закончить с последовательностью кадров, как PBIP где B-кадр ссылается на I-кадр, что не имеет смысла; также отключение данной функции приведет к усложнению резки / склейки Вашего перекодированного видео).

Packet bitstream —  опция, которая может доставить смешанные результаты во время воспроизведения, в зависимости от того, что Вы используете для воспроизведения. Это предназначается чтобы решить проблемы порядка кадров при кодировании в форматы, такие как контейнер AVI, который не может справиться с непорядком кадров. И хотя эта функция предназначена чтобы решить проблемы воспроизведения, которые возникают без этого, много людей сообщило о проблемах воспроизведения видео, закодированного с Packet bitstream. Это придумано для воспроизведения видео с помощью FFDShow, декодера DivX 5, и некоторыми старыми автономными (аппаратными) DVD-плеерами.
Если Вы точно знаете, что Вы делаете, то лучше держать эту функцию выключенной до дальнейшего уведомления. Если у Вас возникли проблемы воспроизведения, видео проигрывается с остановками, попробуйте отключить эту функцию и посмотреть, помогает ли отключение. В последних версиях XviD, большая часть проблем, связанных с Упаковыванием битового потока, как говорят, были решены, но больше обратной связи необходимо по этому вопросу. Так что если у Вас есть какая-либо особая информация, пожалуйста, сообщите.
Примечание: Если Вы воспроизводите файлы только с кодер-декодером XviD, вы никогда не должны использовать Packet bitstream.

VHQ for B-frames — Тоже что и VHQ mode но только для B-кадров. 

Min Q / Max Q (I P B) — Минимально и Максимально возможные квантизеры для указанных типов кадров. Чем ниже это значение, тем более четкая картинка будет получаться (при условии, что битрейт будет достаточно высоким для достижения этого квантизера). По умолчанию: Min Q - 2, Max Q 31.
Min Q - 1 Устанавливается когда при кодировании в заданный битрейт / размер на выходе получаем файл с меньшим битрейтом / размером.
Если фильм, который достаточно хорошо сжимается при максимальном качестве, получается с меньшим битрейтом / размером, чем указано, то с Квантизером 1 немного  увеличивается битрейт и, следовательно, размер файла без дальнейшего улучшения качества. Именно поэтому Квантизер 2   является действительно значимой ценностью.
Если Вы установите Min Q - 2 для кодирования, Xvid сделает Вам файл меньшего размера, демонстрируя свои способности к адаптации, и Вы сможете присоединить  звуковую дорожку Большего размера, или даже повторить кодирование с Большим разрешением кадра. Это всегда лучше, чем впустую расходовать кванты для достижения нужного размера файла. Min Q - 2 почти не отличается по Качеству от Min Q - 1.

Вкладка Rate

KBoost — может быть использован, чтобы добавить дополнительные биты к ключевым кадрам. Указывается в процентах, так что значение 10 даст Вашим ключевым кадрам на 10% больше бит, чем обычно.

Кривая сжатия.
Обычно внутренние установки значения кривой (определяется разработчиками XviD после долгих общений с пользователями), способны доставлять очень хорошие результаты (я должен сказать «отличные» на самом деле), но если по тем или иным причинам Вы хотите изменить, можете использовать эти значения для настройки минимумов и максимумов в распределении бит.
Если вы сделаете мысленный образ кривой распределения, вы увидите график с «максимумами» и «минимумами», например как холмы и долины. Холмы это сцены с высоким битрейтом а долины — с низким битрейтом.
CHigh
— может быть использован, чтобы забрать биты из сцен с высоким битрейтом и распределить их на средне и низкобитрейтные сцены. (Представьте себе резервуар, например ведро с битами, откуда кодек может взять дополнительные биты чтобы улучшить каждый кадр) Следовательно, это снизит пиковый битрейт, и биты накопленные при этом будут разделены поровну между всеми кадрами Вашего видео. Это полезно, когда Вам действительно нужно сохранить Ваше перекодированное видео в пределах определенных максимальных параметров, как  максимумы для определенного profile@level. Вы также можете использовать это, если у Вас есть клип с настолько большим количеством бит, отданным высобитрейтным сценам, что низкобитрейтные сцены начинают выглядеть плохо.
CLow
— может быть использован, чтобы добавить дополнительных бит в сцены с низким битрейтом, это подобно заполнению долины осадками. Но биты должны прийти откуда-то, поэтому кодек берет все кадры из видеоряда и выцарапывает несколько битов из каждого. Это может пригодиться, если у вас есть несколько сцен с низким битрейтом, на которых видны квадратики (блочность).

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

OImprove

PDegrade

Reaction

Averaging

Smoother

VBVsize

VBVmax

VBVpeak

Вкладка Misc

Matrix

HVS masking

1-st pass Quantizer

Trelis quantization

Use new XviD 1.3.0

Threads

Вкладка CLI

 

xvid_encraw built at 10:22:53 on Aug 31 2007
Usage : xvid_encraw [OPTIONS]

Input options:
-i      string                           : input filename (stdin)
-type   integer                      : input data type (yuv=0, pgm=1, avi/avs=2)
-w      integer                       : frame width ([1.2048])
-h      integer                        : frame height ([1.2048])
-frames integer                    : number of frames to encode

Output options:
-dump                                   : save decoder output
-save                                    : save an Elementary Stream file per frame
-o string                                : save an Elementary Stream,
or AVI file,
or MKV file,
based on filename extension
-avi string                              : save an AVI file for the complete sequence
-mkv string                             : save a MKV file for the complete sequence

BFrames options:
-max_bframes   integer         : max bframes (2)
-bquant_ratio  integer            : bframe quantizer ratio (150)
-bquant_offset integer          : bframe quantizer offset (100)

Rate control options:
-framerate float                     : target framerate (25.0)
-bitrate   [integer]                  : target bitrate (700)
values <= 10000 are treated as kbit/s
values > 10000 are treated as bit/s
-size      integer                    : target size in kilobytes
-single                                  : single pass mode (default)
-cq        float                         : single pass constant quantizer
-pass1     [filename]              : twopass mode (first pass)
-full1pass                             : perform full first pass
-pass2     [filename]             : twopass mode (2nd pass)
-altpass2  [filename]            : twopass mode (2nd pass alt)
-zq starting_frame float       : bitrate zone; quant
-zw starting_frame float      : bitrate zone; weight
-zones                                  : see xvid_encraw -help zones
-max_key_interval integer    : maximum keyframe interval (300)

Single Pass options:
-reaction   integer                 : reaction delay factor (16)
-averaging  integer               : averaging period (100)
-smoother   integer               : smoothing buffer (100)

Second Pass options:
-kboost     integer                 : I frame boost (10)
-kthresh    integer                 : I frame reduction threshold (1)
-kreduction integer               : I frame reduction amount (20)
-ostrength  integer               : overflow control strength (5)
-oimprove   integer               : max overflow improvement (5)
-odegrade   integer              : max overflow degradation (5)
-chigh      integer                  : high bitrate scenes degradation (0)
-clow       integer                 : low bitrate scenes improvement (0)
-overhead   integer              : container frame overhead (24)
-vbvsize    integer                : use vbv buffer size
-vbvmax     integer              : vbv max bitrate
-vbvpeak    integer              : vbv peak bitrate over 1 second

Other options
-noasm                                : do not use assembly optmized code
-turbo                                  : use turbo presets for higher encoding speed
-quality integer                    : quality ([0..6]) (6)
-vhqmode integer               : level of R-D optimizations ([0..4]) (1)
-bvhq                                  : use R-D optimizations for B-frames
-qpel                                   : use quarter pixel ME
-gmc                                   : use global motion compensation
-qtype   integer                  : quantization type (H263:0, MPEG4:1) (0)
-qmatrix filename               : use custom MPEG4 quantization matrix
-interlaced [integer]           : interlaced encoding (BFF:1, TFF:2) (1)
-nopacked                         : Disable packed mode
-noclosed_gop                  : Disable closed GOP mode
-lumimasking                      : use lumimasking algorithm
-hvs_aq string                   : use custom adaptive quantisation equation
-hvs_lmb string                 : use custom lambda equation
-stats                                : print stats about encoded frames
-ssim [integer]                   : prints ssim for each frame ([0..4]) (2)
-ssim_file filename            : outputs the ssim stats into a file
-debug                              : activates xvidcore internal debugging output
-vop_debug                      : print some info directly into encoded frames
-nochromame                    : Disable chroma motion estimation
-notrellis                            : Disable trellis quantization
-imin    integer                   : Minimum I Quantizer (1..31) (2)
-imax    integer                 : Maximum I quantizer (1..31) (31)
-bmin    integer                 : Minimum B Quantizer (1..31) (2)
-bmax    integer                : Maximum B quantizer (1..31) (31)
-pmin    integer                 : Minimum P Quantizer (1..31) (2)
-pmax    integer                : Maximum P quantizer (1..31) (31)
-drop    integer                 : Frame Drop Ratio (0..100) (0)
-start   integer                  : Starting frame number
-threads integer               : Number of threads
-nothreadedinput             : Disable threaded input reading
-progress [integer]          : Show progress updates every n frames (10)
-par     integer[:integer]   : Set Pixel Aspect Ratio.
1 = 1:1
2 = 12:11 (4:3 PAL)
3 = 10:11 (4:3 NTSC)
4 = 16:11 (16:9 PAL)
5 = 40:33 (16:9 NTSC)
other = custom (width:height)
-help                                : prints this help message
-help zones                     : prints zones help message

NB: You can define 64 zones repeating the -z[qw] option as needed.