Сегодня 24 апреля 2024
18+
MWC 2018 2018 Computex IFA 2018
реклама
Звук и акустика

Кодек Xvid

⇣ Содержание
Автор: Евгений Сучев


Сегодня, мы рассмотрим кодек Xvid, который претендует на звание "ISO совместимого". Это значит, что он должен проигрываться стационарными плеерами, поддерживающими Mpeg4 стандарт. На практике, это до сих пор не так.

Есть 4 реальных конкурента на рынке сильного сжатия видеоматериалов: Divx, Xvid, WMV_VCM и VP6. Между собой совместимы только DivX и Xvid (как последователи стандарта Mpeg4). Я не выделил бы ни один кодек в качестве однозначного лидера. У каждого из этих кодеков есть свои изъяны.

Например, Xvid искажает цвета и не очень хорошо работает с материалами, где есть постепенные нарастания и снижения яркости, но у него высокая чёткость на динамических сценах. DivX - менее чёткий, по сравнению с Xvid (опять же, при определённых условиях, это можно назвать плюсом). К WMV_VCM пожалуй меньше всего нарицаний, но он менее чёток на динамических сценах, по сравнению с Xvid. А вот про VP6 отдельный разговор. О нём написана хорошая статья Виктором Томиловым.

Теперь приступим непосредственно к виновнику. Вы можете спросить - а чем собственно Xvid, мне больше нравится? Отвечу - он мне больше подходит по причине качественной работы с динамическими сценами. Мне очень часто приходится заниматься сжатием "домашнего видео", а оно, как известно, не блещет качеством съёмки. Всё это снимается без штатива, естественно, картинка ходит ходуном. При этих условиях, только Xvid после сжатия, сохраняет максимальную деталировку.

Кодек Xvid постоянно обновляется. Это результат того, что его код является открытым и любой, кому это интересно, может принять участие в доработке программы. Первоначальный код переписывался 3 раза полностью. Последние версии (альфа и бета) уже совместимы с кодом ISO Mpeg4. Это значит, что фильмы, сжатые при помощи кодека Xvid, будут нормально просматриваться декодером DivX. По моему мнению, декодер DivX более качественный, чем собственный декодер Xvid.

Начнём. Для сборки фильма я использую программу VirtualDub. Это очень простая программа. Захват в ней я описал, а обычная работа с VirtualDub описана во многих статьях и повторятся я не буду. После запуска VirtualDub и открытия в нём вашего видео вы должны будете произвести настройку фильтров (его я опишу в другой статье). Когда этот этап пройден, вам нужно сжать исходный материал кодеком с сильным сжатием для дальнейшего хранения и просмотра. Мы договорились, что это будет Xvid. На момент написания статьи, была выпущена версия Beta2, которую можно скачать с сайта. Я опишу работу с этой версией.

После того, как вы произвели монтаж своего фильма и произвели настройку фильтров, нужно настроить кодек. Для запуска настройки кодека Xvid, нужно произвести последовательность действий, отображённую на рисунке.


После запуска конфигурации кодека, вы увидите окно настройки кодека:


Для большего удобства я ввёл свои условные пункты от одного до шести. Далее, при описан кодека, я буду отталкиваться от этих пунктов.

Если у вас раньше была установлена другая версия кодека Xvid, то после запуска окна настройки кодека нужно обязательно установить кодек по-умолчанию. Для этого нужно нажать на кнопку помеченную цифрой 1. В случае каких-то проблем при кодировании, так же может потребоваться установка кодека в дефолтное состояние.

Цифрой 2 помечены две вкладки.


Первая из них - выпадающее меню. Здесь сделаны стандартные предустановки, которые должны быть совместимы с аппаратными проигрывателями. На самом деле, использование этой вкладки под большим вопросом. Во-первых, на данный момент аппаратные Mpeg4 проигрыватели не получили достаточно широкого распространения. Это является дополнительной функцией DVD проигрывателей, но далеко не все проигрыватели это могут делать. Многое зависит от прошивки. Так что, для аппаратных проигрывателей это на вряд ли пригодится. Во-вторых, здесь только готовые предустановки для разрешения, битрейта и других параметров. Но если вы пытаетесь сжать готовый фильм, то для него потребуется своё разрешение и битрейт. В связи с этим, эта функция почти не применима.

Вторая вкладка (находящаяся под кнопкой ...) изображена на рисунке:


Сверху на этой вкладке есть возможность выбора предустановок, про которые я уже написал. Опция "Quantization type" даёт возможность выбора типа матрицы квантизеров. Не вдаваясь в подробности что это такое, просто скажу, что даёт этот выбор. Мы можем сделать выбор из 3 пунктов:

"H.263" - это стандартная матрица квантизеров для Mpeg4. Это даёт менее чёткую картинку, чем MPEG матрица и рекомендуется делать для битрейтов ниже 900 kBit/s. Вторым пунктом стоит "MPEG". Этот выбор даст более чёткую картинку и соответственно, требует битрейтов больших, чем 900 kBit/s. "MPEG-Custom" даёт возможность задавать самому матрицу квантизеров. Я бы не рекомендовал вам пробовать это делать вручную.

Опция "Adaptive Quantization" включает возможность маскировки ярких и тёмных мест при сжатии. Раньше эта опция называлась "lumi masking". Эта опция нужна для того, что бы увеличить коэффициент сжатия исходного материала. Теоретически, человеческий глаз не заметит такого преобразования. Но на практике, при включении этой опции происходят искажения. В кодере Xvid этот алгоритм реализован недостаточно качественно.

Опция "Interlacing" включает работу кодека с чересстрочным видео. При включении этой опции кодек начинает сжимать не кадры, а поля. Эта опция пригодится только в том случае, если вы производите сжатие без деинтерлейса. Я не вижу практического применения такому сжатию, но кто знает, может вам пригодится.

Опция "Quarterpel" включает разрешение с точностью до четверти пикселя. Это повышает чёткость особенно на низких разрешениях, но вместе с этим, добавляет шум на изображение. Естественно, просто так это не происходит. Включение Quarterpel повышает загрузку процессора и увеличивает поток, используемый для этого. Включать эту опцию я не рекомендовал бы. Качество работы до сих пор не безупречно.

Опция "Global Motion Compensation" предназначена для компенсации движения. Она начинает функционировать, когда идёт панорамирование, наезд или отъезд на объект, а так же при вращении. Задумка конечно хорошая, но использовать я так же не рекомендовал бы.

А вот про опцию "Reduced resolution" ничего не известно. И вообще, не понятно, делает ли она что-нибудь.

Далее, опция BVOPs включает использование B-frames. Само по себе использование B-frames должно повысить качество кодируемого материала. Объясню, что такое B-frames.

При сжатии видео используется 3 типа кадров: I,P и B - frames. I-frames - это кадры без сжатия. Вернее, сжатие производится с очень небольшими коэффициентами компрессии. I-frames так же называются ключевыми кадрами. При просмотре сжатого фильма, вся навигация по фильму производится через ключевые кадры. После I-frames следует последовательность P-frames например так: IPPPPPPPPPPPPPPPPIPPPPPPP и так далее. P-frames имеет гораздо больший коэффициент сжатия. Для того, что бы повысить коэффициент сжатия, были введены B-frames. Они ставятся между двумя менее сжатыми кадрами (I,P-frames). Последовательность получается такой: IPBPBPBPBPBPBPIPBPBPBP… Коэффициент сжатия B-frames больше, чем коэффициент сжатия P-frames. Это достигается тем, что он сравнивается с 2 окружающими кадрами, а в B-frames записывается, чем он отличается от них. Но вместе с этим, это накладывает определённые ограничения. Например, видеопоследовательность не может заканчиваться B-frames. Начинаться же видеоряд должен обязательно с I-frames. В нём содержится вся информация об изображении. В P-frames и B-frames содержится информация не удалённая кодеком во время сжатия, что так же накладывает определённые трудности при монтаже сжатого материала. Итак, разобрались, с B-frames мы можем сильнее сжать видео. Вы спросите, а причём здесь качество? Всё просто. Сильнее сжали, а размеры видео файла у нас те же самые. Этот "освободившийся" поток перераспределяется на все кадры. Конечно, качество на B-frames ниже, чем у P-frames. Если поставить "Max consecutive BVOPs"=1, то они появляются 12 раз в секунду (последовательно с более качественными P-frames) и картинка, в целом, остаётся достаточно качественной.

Разобрались, включение B-frames (BVOPs) повышает качество.

Посмотрим теперь на опцию "Max consecutive BVOPs". Здесь нужно ставить максимальное количество идущих подряд B-frames. Если поставить 0, то мы попросту отключим использование B-frames. Если поставить больше 1, то качество картинки (на мой взгляд) падает. Плюс, я встречал появление необоснованных артефактов. Я рекомендую ставить 1.

Опция "Quantizer ratio (%)" означает, во сколько раз будет повышен квантизер для B-frames. Теперь объясню, что такое квантизер.

Квантизер может быть назван так же DRF - Detail Removal Factor. По-русски, степень потери детализации изображения. Минимально возможный квантизер - 2 (это то же самое, что 1).

Максимальный квантизер, ограничивается кодеком. Причём, чем больше квантизер, тем больше потерь в детализации будет происходить. Изначально, если кодек не ограничивать в размерах получаемого файла, он будет стремится держать квантизеры как более низкими. Но при этом размер получаемого файла будет получаться большим. Теперь, если ограничить размер получаемого AVI файла, кодек начнёт повышать эти квантизеры до тех пор, пока не попадёт в заданный размер. Причём, он устанавливает для каждого кадра свои кантизеры, в зависимости от сложности кадра.

В опции Quantizer ratio (%) мы указываем, во сколько раз увеличится квантизер и соответственно, во сколько раз ухудшится детализация на B-frames. Квантизер B-frames считается по следующей формуле: [(Quantizer of previous P-frame+Quantizer of following P-frame)*(B-frame quantizer ratio)/200+(B-frame offset/100)]. Исходя из формулы, квантизер B-frames зависит от значений квантизеров окружающих его P-frames, значения Quantizer ratio (%) (множитель) и Quantizer offset (смещение). Снижать этот параметр не рекомендую (теряется смысл B-frames). Повышать вы можете на своё усмотрение, это повысит сжатие B-frames (соответственно, снизит качество этих кадров) и повысит качество I и P-frames.

Опция "Quantizer offset" показывает, сколько нужно прибавить к квантизеру B-frames относительно расчётной величины после Quantizer ratio (%). Изменять этот параметр не стоит. Если включить опцию "Packed bitstream", то производится упаковка P-frames и B-frames в одном потоке. Это даёт возможность декодировать B-frames без задержек. При 2 проходном кодировании и включении этой опции кодер работает не правильно. Если у вас достаточно мощный процессор, нет никакого смысла включать эту опцию.

Опция "Closed GOV" предназначена для того, что бы перед I-frames никогда не стоял B-frames. Если вы не собираетесь сжатый материал впоследствии резать или сращивать, нет никакой надобности в этой функции. Зато при отключении этой функции качество можно ещё повысить за счёт добавления B-frames. Если же, вы собираетесь впоследствии как-либо монтировать Mpeg4, то вам понадобится включение этой функции. Только одно предостережение, вы сможете резать готовый Mpeg4 файл только по ключевым кадрам и многие стыки получатся очень корявыми. Лучше позаботиться о монтаже заранее.

Перейдя на вторую вкладку, мы увидим информационную панель. Вся беда в том, что она показывает информацию только если был использован какой-нибудь профиль.


Цифрой 3 (Encoding type) помечена опция, управляющая типом работы кодека.


В выпадающем меню вы можете выбрать 3 типа работы кодека. Для каждого типа есть свои настройки, которые находятся под кнопкой, обозначенной многоточием.

1 тип - "Single Pass". Это однопроходный режим работы с постоянным битрейтом. Битрейт задаётся в окошке обозначенном цифрой 4. При вызове настроек однопроходного режима (нажатие на кнопку … под цифрой 4) появится окно:


В этом окне есть всего 3 параметра.

  • "Reaction Delay Factor" служит для задания времени задержки реакции кодера на изменение качественных параметров видеосигнала.
  • "Averaging period" этот параметр определяет скорость реакции на изменение качественных параметров видеосигнала.
  • "Smoother" параметр, определяющий количество кадров, в течении которых возможно понижение качества картинки для выдерживания заданного битрейта.

2 тип - Twopass - 1 st pass. Это первый проход двухпроходного режима. О нём говорить особо нечего, заглянем только в его настройки:


В окошке "Stats filename" стоит название файла, в который будет записываться статистика от первого прохода о фильме.

"Discrad first pass" если убрать галочку с этого пункта, то во время первого прохода будет не только производится сбор статистики, так же будет производится сохранение сжатого материала. Если вы используете двух проходный режим, то нет никакого смысла это делать. Единственное, для чего может это понадобится - что бы сделать видео с переменным битрейтом за 1 проход. Но размер при этом будет абсолютно не управляем., он получится на усмотрение кодека.

Теперь расскажу, о двухпроходном режиме и переменном битрейте. Для этого нужно немного рассмотреть теорию работы кодека. Кодеки Mpeg4 разработаны таким образом, что они видят не картинку целиком, а только объекты и изменение картинки от кадра к кадру. Из этого можно сделать вывод, что шумное видео сложнее сжимать, чем чистое и статичные картины так же проще сжимаются, чем динамичные (именно эту информацию и собирает кодек во время первого прохода). Допустим, у вас есть какой-то ролик или фильм. В любом видео, не бывает, что бы было абсолютно монотонное движение и неизменное количество объектов. Получается, что для каждого кадра нужно выделять разное количество памяти. Для того, что бы выделять каждому кадру своё количество битрейта, был введён переменный битрейт. То есть, во время первого прохода кодек собирает информацию о количестве движения и объектов, производит запись её в файл. Во время второго прохода, кодек начинает обрабатывать фильм снова. Только он уже производит сжатие исходного материала, пользуясь статистикой от первого прохода. При этом, для каждого кадра выделяется нужный ему битрейт. Таким образом происходит повышение качества кодируемого материала.

Следующая страница →
 
⇣ Содержание
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.
Вечерний 3DNews
Каждый будний вечер мы рассылаем сводку новостей без белиберды и рекламы. Две минуты на чтение — и вы в курсе главных событий.

window-new
Soft
Hard
Тренды 🔥
В Японии назревает противостояние двух приложений в духе Pokemon Go, но со столбами электропередач вместо покемонов 3 ч.
Релиз СУБД Platform V Pangolin 6.1: упрощённая миграция с зарубежных решений и повышенная производительность 3 ч.
Появились первые данные об успехах сериала Fallout — миллионы просмотров за рубежом и популярность в России 4 ч.
Блокировка TikTok в США одобрена Сенатом и вскоре станет законом 5 ч.
Сверхспособности, кошачий стелс и механика страха: инсайдер раскрыл детали мрачной Assassin's Creed Codename: Hexe про охоту на ведьм 5 ч.
SAS Institute представила новые инструменты для разработчиков ИИ-приложений — Viya Copilot и SAS Viya Workbench 5 ч.
Вышел Unreal Engine 5.4: улучшение TSR, повышенная производительность и ускоренная трассировка лучей 6 ч.
Институт системного программирования РАН и «Базис» расширяют работу по повышению безопасности российских облачных решений 6 ч.
IBM намерена купить поставщика решений для управления инфраструктурой HashiCorp 6 ч.
Google вновь отложила блокировку сторонних cookie в браузере Chrome 9 ч.