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

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

Это продолжение статьи, в которой я больше расскажу о теории и практике кодирования видео с помощью Xvid, а также представлю улучшенную версию своей матрицы, в которой показатель «качество/размер» стал больше. Подробности под катом.

Недавно кодеку Xvid исполнилось 7 лет, а вообще данный принцип сжатия видео существует 15 лет, но в инете на русском языке путёвой информации по вопросам кодирования немного. Для затравки можете почитать это: сжатие видео, MPEG-4, Xvid.

Я же только кратко коснусь теории (подробней, честно говоря, знаю не особо). Перед кодированием картинка разбивается на блоки 8х8, для каждого блока находятся средние значения яркости и цвета, а все пикселы преобразуются в математическую зависимость от средних величин. К полученной матрице применяется дискретно-косинусное преобразование с использованием матриц квантования. Матрица Intra для ключевых кадров, Inter для всех остальных. Левый верхний угол матриц используется для квантизации значений, которые мало отличаются от средней величины, соответственно правый нижний угол – для значений, которые сильно отличаются от средней величины. Чем больше коэффициент в матрице, тем больше огрубление значений яркости и цвета. Коэффициенты бывают в диапазоне 8-255. На этом квантизация не закончена, перед итоговой упаковкой все значения блока делятся на квантизатор, указанный в настройке кодека Xvid. На фото Target quantizer (выделен красным, фото после фото матрицы).

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

Типы кадров. Проще говоря, кадры бывают ключевые и неключевые. Неключевые зависят от ключевых, они показывают изменение картинки (движение). На фото настроек Xvid показано стандартное значение интервала ключевых кадров 300, настройки вызываются нижней кнопкой «more» в основном окне настроек Xvid. Поскольку неключевой кадр занимает в 5 раз меньше места, чем ключевой, то малым размером файла мы обязаны именно ему. Значение больше 300 обычно не используется, ибо этого интервала хватает на 10-12 секунд просмотра. По объёму ключевые кадры при такой настройке займут 5-7 % вашего файла без учёта аудио.

На фотографиях ниже я покажу, как влияют коэффициенты матрицы квантования и квантизатор на качество картинки.
Для эксперимента я использовал следующую матрицу Intra:
Манипуляции с матрицами квантования. Часть 2

Как видите, первые коэффициенты я сделал максимальными, чтобы увидеть, в каких местах будут наибольшие искажения.
Все фотки в масштабе 300%. Это картинка до сжатия:
Манипуляции с матрицами квантования. Часть 2

Это сжатие с квантизатором 2:
Манипуляции с матрицами квантования. Часть 2

Это сжатие с квантизатором 4:
Манипуляции с матрицами квантования. Часть 2

Как видим, квантизатор 4 делает квадраты более заметными, а коэффициенты 255 в матрице огрубляют большую часть значений яркости и цвета, так что блок расплывается в квадратное пятно. Если бы блоки были круглыми, то это выглядело бы как боке – фон, который не в фокусе. А то, что детали картинки всё ещё видны, это потому, что мы остальные коэффициенты оставили минимальными. Квантизатор 1 использовать категорически не рекомендуется из-за особенностей кодека, а больше 4 я не использую, потому что при этом сильно искажаются блоки.

Теперь о моей матрице. Её новый вид таков:
Манипуляции с матрицами квантования. Часть 2

Она может применятся в трёх режимах. Настройки для всех режимов одинаковы, кроме одного параметра, основного квантизатора Target quantizer (выделен красным).
Манипуляции с матрицами квантования. Часть 2

Важные настройки, выделенные красным, рекомендуется ставить как на фотке (подробно в первом посте).
Манипуляции с матрицами квантования. Часть 2

1. Качественный. Target quantizer 2. Качество отличное, размер файла 80% (за 100% принимается размер файла при кодировании стандартной матрицей H263 с теми же настройками. От этого размера «пляшем» во всех режимах).
2. Компромисный. Target quantizer 3. Качество нормальное, размер 54%.
3. Сжатый. Target quantizer 4. Качество удовлетворительное, размер 40%.

Как видим, в третьем режиме имеем файл в 2 раза меньший, чем в первом (без аудио), но значительно жертвуем качеством. Хотя слово «значительно» имеет очень относительный смысл. Дело в том, что я сравнивал образцы, одновременно открытые в отдельных окнах VirtualDub'ом, покадрово в масштабах 200% и 300%. Если вы закодируете фильм с разрешением 1280х720 в третьем режиме и просто будете его просматривать в плеере, то может и не заметите разницу. Первый режим рекомендуется для видео с низким разрешением или для роликов, очень дорогих сердцу. Второй режим подходит для большинства фильмов, а третий для видео с большим разрешением или для роликов, где важно не качество, а сам материал.

Выбирая третий режим, не забудьте о качестве звука, ибо аудио в формате 5:1 384 Кбит занимает немало места (в фильме обычно 300 Мб). Для переноса аудио из любого формата в mp3 рекомендую Format Factory. Он бесплатен, кодирует видео и аудио. Ещё для информации: минимальный формат аудио mp3, при котором сохраняется нормальное звучание, это mono 48 Kbit 44 KHz. Не кодируйте в 22 KHz, ибо это значительно хуже на любом битрейте. Также не кодируйте в 48 KHz, если у вас исходник меньшей частоты или вы её не знаете. Изменение частоты обычно приводит к искажениям. 44 KHz – самая безопасная частота.

У многих возникнет вопрос: почему надо кодировать с постоянным квантизатором? Потому что в любом другом режиме (двухпроходный режим, постоянный битрейт) вы не контролируете квантизатор. А именно квантизатор в первую очередь отвечает за квадратичность (см. выше эксперимент). Также почитайте в первом посте о дополнительных настройках Xvid, без них использование моей матрицы не будет эффективным.

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

Автор: alexgrey

Источник


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


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