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

в 10:14, , рубрики: virtualdub, xvid, матрица квантования, Работа с видео, метки: , ,

Эта статья будет интересна прежде всего тем, кто по каким-то причинам предпочитает 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!
Кодируйте на здоровье.

Автор: alexgrey

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js