...

воскресенье, 15 декабря 2013 г.

[Из песочницы] Манипуляции с матрицами квантования

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

Кодируйте на здоровье.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.


Комментариев нет:

Отправить комментарий