Манипуляции с матрицами квантования

Эта статья будет интересна прежде всего тем, кто по каким-то причинам предпочитает AVI и XVID, а не MKV и H264. На форумах doom9 и ixbt поднимались вопросы по поводу использования различных матриц, а также применения собственных, но вразумительного ответа, кроме углубления в теорию дискретно-косинусного преобразования, никто не дал. Есть статья, где приводятся неплохие матрицы, но там не объясняются их преимущества и недостатки. Так что буду рад, если окажусь пионером.

Итак, задача состояла в следующем: подобрать коэффициенты матрицы таким образом, чтобы убрать квадратичность при кодировании с постоянным квантизатором >2. При этом размер файла должен быть меньше, чем при таком же квантизаторе со стандартной матрицей H263.

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



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

Ещё немного о фичах кодирования.
Чтобы эта матрица стала эффективной, нужно соблюсти некоторые настройки. Во-первых, это обязательно постоянный квантизатор 2, 3 или 4. Меньше 2 нет смысла, а больше 4 – появляются искажения фона. Никаких дробных квантизаторов! Фото 2.



Во-вторых, дополнительные настройки квантизатора, которые появляются при нажатии на верхнюю кнопку «more».



Красным обведены важные настройки. Quantizer ratio – множитель основного квантизатора, указанного ранее (фото 2), обязательно 1. Quantizer offset – приращение квантизатора для неключевых кадров, оптимально 2. Для маньяков качества можно 0, для большего сжатия можно увеличить, но не советую.
Также настоятельно рекомендую отключить Adaptive quantization и Trellis quantization (нижняя кнопка «more»).

Для примера взял маленький кусочек из фильма с хорошим качеством, разрешение 720х304, исходный битрейт 1300 (без аудио). Варианты кодирования и полученный битрейт:
матрица H263, квантизатор 2 = битрейт 953
матрица моя, квантизатор 2 = битрейт 883
матрица моя, квантизатор 4 = битрейт 433

При квантизаторе 2 найти отличия в качестве практически невозможно, при квантизаторе 4 с моей матрицей отличия видны при покадровом просмотре, при квантизаторе 4 с матрицей H263 – квадраты, квадраты.

Вывод: матрица юзабельна на любых разрешениях, можно делать упор на качество или меньший размер. Особенно полезна на малых разрешениях, так как квадратичность минимальна, и на больших с квантизатором 4 – достаточно для заливки фильмов в инет. На малых разрешениях можно чуть уменьшить коэффициенты в красном квадрате и будет конфетка. И забудьте про два прохода.

Возможно, кого-то не устроит, что в моей матрице слишком сглаживаются детали (все коэффициенты, которые >20), но этому есть две причины. Во-первых, это способствует хорошему сжатию и малому размеру, во-вторых, резкость, на самом деле, не теряется безвозвратно. Если видео закодировано качественно, то во время просмотра можно включить фильтр резкости Sharpen. Мне больше нравится msharpen из пакета K-Lite Codec Pack. Там очень плавно можно регулировать резкость и он работает корректней других. В большинстве случаев сглаженное видео с фильтром резкости производит лучшее впечатление, чем если закодировать резкость в видеопоток. Это связано с особенностями кодирования сигнала путём квантизации, о чём я подробно говорить не буду.

Теперь о полезных фильтрах VirtualDub'а smoother и temporal smoother, оба встроенные.
Первый сглаживает методом Гаусса, так что картинка получается более мультяшной. Если использовать значение в пределах 1-5, то можно успешно сглаживать квадратичность и шум у границ объектов. Замедляет кодирование на 10-20%.
Второй собственно не сглаживает, а скорее стабилизирует картинку, делает зависимость текущего кадра от предыдущего. Значение устанавливает количество предыдущих кадров для аппроксимации. Рекомендуется 1 или 2. Если выставить >4, то взмах руки будет похож на веер. Незаменимо для стабилизации дёргающегося фона. Замедляет кодирование на 30-50%.

Напоследок осталось сказать только одно: Le XVID Est Mort? Vive Le XVID!
Кодируйте на здоровье.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 7

    +2
    Я думаю статья привлекла бы больше внимания если бы вы хотя бы в общих чертах рассказали сообществу что это за матрицы и что, черт побери, такое этот «квантизатор». Для многих хабр — это довольно серьезный канал расширения кругозора. Небольшие пояснения в статье что к чему, как и зачем люто приветствуются…
      0
      Могу и это написать. Просто я думал, что читатели хабра довольно начитаны о таких понятиях, как квантизатор, дискретно-косинусное преобразование и др. К тому же об этом есть много инфы на просторах инета и даже на Википедии. А ведь копипастить не приветствуется! Если есть массовая потребность в освещении аспектов кодирования — конечно постараюсь. А она есть?
        0
        Даже если и нет, то здесь всегда найдется много людей, готовые узнать что-то новое. И если это новое преподносится понятным языком, то это только приветствуется. Вы же пишете статью для массовой аудитории. Не все конечно разбираются в вашей области, но многим было бы интересно разобраться. Если лень писать азы, дайте хотябы ссылки на википедию в тексте. Я понимаю, что тот кто заинтересовался может и сам нагуглить и посмотреть, но можно же сэкономить людям время.
      0
      «Для примера взял маленький кусочек из фильма с хорошим качеством, разрешение 720х304… Вывод: матрица юзабельна на любых разрешениях,»
      Вы тоже любите экстаполировать??

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

      К слову сказать, для субъективного теста качества видео, необходимый минимум респондентов — 30 чел, это если они рандомно набраны, а если bias какой то есть, то нужно больше. Потом полученные результаты усредняются, аутлаеры выкидываются (всегда будет как минимум 5% зрителей с теми или иными нарушениями зрения), ну и так далее следуя научным традициям…

        0
        Нет, я не люблю экстраполировать. Я делал покадровую сверку «на глазок» различных видеоотрезков: с высоким разрешением и низким, с чёткими краями объектов, с фоном, где цвет имеет плавный переход и т.д. Но зачем я буду вываливать читателям все нюансы исследования? Ведь в конечном итоге всё сводится к практическому применению матрицы и я убедился, что она пригодна. Как ещё я должен убеждать читателей? Возьмите и сами проведите такой эксперимент: закодируйте нединамичный отрывок стандартной матрицей H263 с постоянным квантизатором и потом с теми же настройками моей матрицей. Сравните размеры файлов и качество покадрово. Если вы скажете, что H263 делает более качественную картинку с меньшим размером — я признаю, что лоханулся.

        А если вас не устраивает метод «на глазок», то это тот же древний спор о сравнении mp3 256Kbit и цифрового оригинала. Дело в том, что на практике 99% людей не в состоянии услышать разницу. Так стоит ли раздувать слона о недостаточности визуальной сверки?
          0
          Вы советуете вместо стандартного параметра «сила компрессии» менять непосредственно матрицу квантования.
          (Пусть даже для устарелого алгоритма компрессии и достаточно невысокого разрешения уровня DVD).

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

          Я могу понять, если вы найдете специфический контент, например мультики (или вообще что нибудь оригинальное, типа видео УЗИ-обследования :) на котором присутствуют резкие переходы цвета и/или отсутствие текстур или какие то другие особенности; и для которого специально-подготовленные матрицы квантования дают лучшую компрессию при том же уровне качества. Это бы имело какой-то смысл.
          Возможно, даже имело бы смысл если бы вы нашли оптимальную матрицу для вашего конкретного фильма, и похвастались бы уменьшением размера файла (хотя возможность double-pass компрессии поставит под вопрос выгоду от такой матрицы).
          Для общего пользования ваша матрица ни чем не лучше, а скорее даже и хуже чем стандартная. Что если я хочу закомпрессировать свой собственный фильм? К кому мне обращаться? Писать вам email, «а не подскажите ли вы мне наилучшую матрицу квантования, уважаемый? »?

          Ну и ваш последний аргумент про то что 99% людей не способно уловить разницу подрывает остатки вашей аргументации. Нафиг чего то менять, если и так все работает и никто не заметит разницы.
            0
            Начну с конца. То, что 99% людей не различают mp3 256Kbit и цифровой оригинал — это факт, были исследования, можете найти в инете. Вообще mp3 был создан в институте Фраунгофера, они же и выпустили наиболее качественный энкодер, и 320Kbit не с потолка взято, ибо есть наука психоакустика, и то, что 320Kbit предел для mp3 — тоже не зря сделано. Аналогичная история с JPEG, где качество 100 всё равно отличается от оригинала, но на глаз это увидеть невозможно (делал сверку в масштабе 1000%). Поэтому никто на самом деле не хранит jpeg-фотки в качестве 100, а в 90 вполне достаточно.

            Теперь о моей матрице. Смысл в ней есть, ибо при квантизаторе 4 она делает лучшую картинку соответственно восприятию многих людей (и не спрашивайте, почему я в этом уверен. Даже ребёнок может задолбать учёного, пытаясь вытянуть ответ на очевидные вещи, типа «а почему солнце восходит на востоке, а садится на западе?», «а почему Земля не плоская?», «а почему все люди не могут иметь IQ 150?»). А при квантизаторе 4 размер файла получается очень небольшим. Так что мой результат с одного прохода поспорит с любым результатом в два прохода – выгода очевидна.

            А ещё собственную матрицу можно использовать для получения файлов, которые потом будут обрабатываться, например в VirtualDub. Для этого нужно кодировать с квантизатором 2 и желательно все коэффициенты уменьшить на 4. И качество будет лучше, чем при стандартных настройках.

            Вы сказали: «я удивился, узнав, что какие-то манипуляции с матрицей квантизации могут на что-то сильно повлиять». Сделайте простой эксперимент: зайдите в настройки кодэра, выставьте любую кустомную матрицу и измените первое число во втором квадрате на 40 или больше (в моей матрице это число 12). Закодируйте несколько кадров и откройте результат в VirtualDub. Увидите и всё поймёте. И тогда нам не придётся писать длинные и бессмысленные комменты.

      Only users with full accounts can post comments. Log in, please.