"DIVX ;)". БЫЛ, ЕСТЬ И БУДЕТ ЕСТЬ!

Спецвыпуск Xakep, номер #017, стр. 017-018-4


VKI

Конечно, применение технологии ММ4 позволило существенно улучшить картинку, но была еще одна серьезная проблема: "грязь", "артефакты" на смене сцен. Первоначальный вариант кодека M$ и его детей имел опцию при кодировании - задание временного интервала между КК. Интервал задавался в целых секундах (от 1 до 9999), обычно применялась 1 секунда, чтобы иметь возможность нарезки фрагментов как можно ближе к сменам сцен. А парадокс заключается в том, что увеличение ключевого интервала может дать некоторое улучшение картинки при том же потоке данных.

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

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

И вот в декабре 2000 выходит заплатка к "DivX 3.11" - "VKI patch" (Virtual Keyframe Interval), которая сильно облегчила жизнь, расставляя ключевые кадры не только через заданный интервал в секундах, но и в местах смены сцен (просто проверяя массу ДК и сравнивая ее с массой предыдущего КК - если дельта кадр оказывался слишком тяжелым, его заменяли на ключевой). При этом скорость кодирования практически не изменилась! Патч вышел для обоих вариантов кодека и устанавливался простой заменой соответствующих dll в каталоге "system".

Результат превзошел все ожидания. Простая установка лишних ключевых кадров в наиболее сложных местах обеспечивала резкий подъем качества. При этом размер файла иногда даже уменьшался! Это происходило оттого, что один ключевой кадр заменял собой несколько "тяжелых" дельта кадров. Теперь ключевой интервал можно было устанавливать хоть в 3 секунды (как в установках по умолчанию в патче), а хоть и в 999 секунд - ключевые кадры сами ставились в нужных местах, при этом оставалось гораздо больше места на дельта кадры, что давало дополнительное повышение качества! Это была революция в кодировании "DivX".

Назад на стр. 017-018-3  Содержание  Вперед на стр. 017-018-5