Владислав Кабак | Omegicus CIO

NebKa

Юбка детская "Комфортные складки"

Простая модель вязаной юбочки, с которой справится даже начинающая вязальщица. Следуйте описанию на нашем сайте и у вас всё получится. Размер: 7-8 лет Вам потребуется: 200 г пряжи (100% акрил) белого цвета, по 50 г



читать далее »

Как мы водоемы на даче сооружали

Мне нравятся любые водоемы — и большие, и маленькие; и пруды, и ручейки, и озерца. Поэтому при первой же возможности я затеяла устройство водоема на своем участке. Первый был совсем маленьким — пробным. Как раз



читать далее »

Веточки ЖАСМИНА из холодного фарфора.

Мастер-класс от Калиничевой Елены Сегодня я расскажу вам о том, как создать изысканный весенний аксессуар «Ветка жасмина» из самоотвердевающейся полимерной глины (холодного фарфора). Мастер-класс довольно подробный и подходит даже начинающим, но надеюсь, что и опытные мастерицы найдут в



читать далее »

Пуловер, шапка и краги спицами



читать далее »

СУВЕНИРНЫЕ КУКОЛКИ-САШЕ В ЯПОНСКОМ СТИЛЕ

По материалам мастер-класса Karso - Karso. Сувенирные куколки  -саше в японском стиле можно выполнить из кусочка фетра телесного цвета, маленькой кучки наполнителя,нескольких метров пушистой шерсти и нескольких граммов разноцветного бисера. Что-то из перечисленного найдется в доме



читать далее »

История

Столетняя война длилась 116 лет.


читать далее »

Пробковая подложка в декорировании предметов

Юлия Левашова (Julia-Ju) На этом примере покажу, как можно поэкспериментировать с так полюбившейся мне пробкой (подложка под ламинат толщиной 1,5 мм) Итак, использовалось: коробка изпод чайной пары - 1 шт, пробковый лист - 0.5 метра, салфетка -



читать далее »

Анекдот

Заявление. Прошу уволить меня по собственному желанию, потому что, собственно, никакого желания работать здесь в частности и вообще в общем у меня нет.


читать далее »

Анекдот

Едет в автобусе мужик. Отрывает от газеты маленькие кусочки и бросает их в окно. Соседу стало интересно, он спрашивает: — Зачем вы рвете газету, и бросаете обрывки в окно? — Это отпугивает слонов… — Но там нет слонов!!! —


читать далее »

Лилия из полимерной глины. МК

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



читать далее »

Анекдот

Приходит мужчина к врачу-диетологу. Тот спрашивает:- Сладкое уважате?- Нет!- Мучное кушаете?- Нет!- Ну хоть что-нибудь Вы любите?- Баклажаны.- Так вот, вам их нельзя!


читать далее »

География

Менее 1 процента Карибских островов обитаемы.


читать далее »

Сумочка + МК

Смотрите какая чудесная сумочка-мешочек :)  Нарезанные прямоугольники и квадраты сшить вот так затем соединить уголки заготовленные элементы( 10 ИЛИ БОЛЬШЕ) сшить сшить складки на донышке    теперь очередь подкладки    вкладываем подкладку в основу. Измерив окружность,вырезать и пришить деталь для завязочек. Вставить шнурочек.



читать далее »

Ажурное платье "Прозрачный шик"

С наступлением лета не мешает обновить свой гардероб и добавить в него новое платье, соответствующее сезону. Предлагаем вам связать его спицами своими руками.Для работы потребуется:- белая пряжа "Жасмин" (100% хлопок, 220 м / 75 г)



читать далее »

Анекдот

Травматология. Лежит мужик, у него переломано все, что только возможно, после серьезной аварии. Весь в гипсах, бинтах, растяжках. На тумбочке - пачка "Орбит"... Заходит доктор - обход. Оптимистично так: - Ну что, больной, на поправочку? Уже и жвачечку


читать далее »

Забавная детская сумочка с карманом-кроликом. Шьем сами

Источник http://thermoweb.com/blog/heatnbond-easter-bunny-bag/



читать далее »

СЕРЬГИ ИЗ БИСЕРА И БУСИН

Всего за полтора часа я сделала себе такие очаровательные серьги. Схема очень проста.1. Наберите 14 бисерин и замкните в кольцо.2. Сплетите 7 лепестков из 11 бисеринок.3. На каждом лепестке из бисера выплетите по три зубчика.4. В



читать далее »

Природа

В Южной Америке, в Андах, на высоте 3812 м находится самое большое высокогорное озеро мира - Титикака.


читать далее »

Фотографии, сделанные в тот самый момент

                                               



читать далее »

Анекдот

- Ну и как первая брачная ночь? - Не помню! Я сознание потерял уже после того, как она ресницы отклеила.


читать далее »

Простой дизайн с клейкой малярной лентой.

1. Малярной лентой прикрепите образец к рабочему столу и натуральной мочалкой нанесите лёгкий текстурный узор.2. С помощью малярной ленты создайте такой (или похожий)дизайн:3. Закрасьте полосы между лентами разными цветами:4. Для данного образца мы использовали металлические



читать далее »

Идеи для интерьера, подборка фото

                                                                                   Источник: http://subscribe.ru/



читать далее »

Пасхальные фоны

                                                                                                                                                       



читать далее »

Разное

В США был найден гриб рода опенок, грибница которого весом около 100 тонн занимала площадь в 15 гектар.


читать далее »

Вязаные серьги Языки пламени

Серьги на круглой основе из журнала Crochet Today саязаны ерючком № 1,25 из хлопковой пряжи (длина 320м/100г). Расход пряжи меньше 10 г. Размер готовых мережек 5 х 5 см. Для изготовления серег вам потребуются круглые заготовки



читать далее »

Переработка старых футболок. Поясок. МК

     Нашла еще одну идею переработки старых футболок: это плетеные пояски, которые пригодятся летом, как для брюк так и для юбок. Плетутся из четырех полосок . Для одного пояса понадобится 4 полоски от старой



читать далее »

Плетеный браслет из полосок кожи. Мастер-класс



читать далее »

Анекдот

В аське. - А тебя как зовут? - Нюргустан. - Это ты ща головой об клаву ударился, или реально такое имя есть?


читать далее »

Мой совет:

Такие пятна можно также снять, если последовательно применять молоко и кислоту.


читать далее »

Лавочка своими руками

Такую симпатичную лавочку можно поставить около дома или в саду. Несмотря на то, что смотрится она очень солидно, сделать ее сможет абсолютно каждый и довольно быстро.Итак, лавочка своими руками. Для нее нам понадобится: деревянные бруски желаемой



читать далее »

«До и после». Стилист Вадим Андреев.

Вадим Андреев Еще в юном возрасте,  Вадим Андреев создавал образы для своих моделей на любительских фотосессиях. За его плечами школа стилистов при Ленкоме, диплом косметолога, работа ведущим визажистом в престижных салонах  Санкт-Петербурга и на телеканале «ТКТ-ТВ», сотрудничество



читать далее »

География

Все 14 гор, которые выше чем 8000 метров находятся в Азии.


читать далее »

Текстильные бусы и браслеты. Мастер-класс

Очень понравилась идея Дарьи Унгурян! Собираюсь на днях сшить блузку из шифона и к ней как раз подойдут такие бусики с браслетом. Спасибо автору за мастер-класс!   Нам понадобится:ткань,бисер,нитки,иголка,ножницы. Нарезаем ткань на квадратики размером 7смх7см(12-14 квадратиков). Сметочным швом собрать



читать далее »

Плюмерия из фоамирана, мастер-класс

  Продолжаем замечательные подробнейшие мастер-классы от Светланы Поповой и сегодня мы делаем Плюмерию… вот такой красивый и нежный цветок. Приготовили,что на фото,плюс зубочистку и молд Рисуем каплю Вырезаем Обводим шаблон     Тонируем лепестки… Всегда с обеих сторон. Зеленым акрилом чуть подкрашиваем листочки Креповая бумага,продается



читать далее »

Декупаж с подрисовкой мастер класс

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



читать далее »

ЧАЙНЫЕ РОЗОЧКИ

 



читать далее »

География

Жителей острова Лесбос называют лесбосийцами и лесбосианками, а не лесбийцами и лесбиянками.


читать далее »

ПЛЕТЁМ ДЕРЕВО ИЗ БИСЕРА

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



читать далее »

Идеи для организации кастрюль и крышек. Подборка идей

Здравствуйте, дорогие читатели! Хочу предложить подборку идей по организации кастрюль и крышек на вашей любимой кухне) Конечно можно посмотреть все эти идеи в интернете на разных ресурсах, но я для себя и для вас решила



читать далее »

Элегантное зарядное устройство для телефона

Сегодня мы с вами сделаем оригинальное зарядное устройство для телефона из старой книги. Это простой способ избавиться от скучных стандартных зарядных устройств и украсить интерьер новым оригинальным элементом. Его можно использовать как для iPhone, так и


читать далее »

Анекдот

Если у вас нет паранои, это еще не значит, что они за вами не следят


читать далее »

Анекдот

В паспортном столе: - Я хочу поменять свои данные. - А кто вы сейчас? - Иван Говно. - А кем хотите стать? – Витааааликом...


читать далее »

Танцуй так, как будто никто не видит.

Танцуй так, как будто никто не видит. Не скрывайте свой талант, и жизнь сама поведет вас вперед. Айдос Орынгалиев, обычный рабочий на стройке, который за один обеденный перерыв стал звездой интернета и уже раздает интервью. 


читать далее »

География

В городке Калама, находящемся в чилийской пустыне Атакама, никогда не бывает дождей.


читать далее »

Платье"Карелия" и другие..

  Платье "Карелия"-550г саммер ярнарт,крючок№3.2. Поставлю ещё раз схемы,чтобы не искать по тегам.Юбочку вязала ссн, клешила в 6 местах,в каждом 6 ряду,все узоры вязала поворотными рядами.Швы в платье только плечевые и по пройме рукава. Платье Лина сирень-350г хлопка виолет



читать далее »

Кольцо для салфеток

Автор: Леонтьева Людмила Сайт автора: Ваш счастливый дом Скоро день рождения одной из подруг. Вот решила сделать подарок. Картонный вкладыш от туалетной бумаги режу на 3 части. В данном случае кольца получаются по 3 см шириной, d 4 см офисную



читать далее »

Вышивка. Зима. Схема



читать далее »

Розочка мастер класс из фоамирана

Сегодня мы с вами рассмотрим мастер класс по изготовлению маленькой розочки из фоамирана, автором данного мастер класса является Гульнара Айбедуллина. Для изготовления розочки нам потребуется: Фоамиран нужного цвета. Ножницы. Стек. Декоративный дырокол трех видов. Утюг. Термопистолет. Способ изготовления розочки:Берем нужные стеки, Гульнара использовала для



читать далее »

ОРХИДЕЯ ИЗ БИСЕРА



читать далее »

КОЛЬЕ ИЗ КРУЖЕВА И БИСЕРА

В этом обучающем уроке вы узнаете, как легко и просто сделать классное украшение из бисера. Сказочное колье станет настоящим украшением вашего образа. Это идеальный вариант украшения, которое дополнит любое вечернее платье. 90-е возвращаются… Приступаем к работе! Материал: кружево



читать далее »

До глубины души

Верность Мэри МакХью оплакивает своего убитого жениха, сержанта Джеймса Ригана. «Сектор 60» — новая область большого кладбища в Вашингтоне — стал последним пристанищем сотен американских солдат, убитых в Ираке и Афганистане. Джон Мур.   Благодарность Фотография человека, дающего свою обувь бездомной в Рио-де-Жанейро. Девочка расплакалась.   Настоящая дружба Объятия



читать далее »

ВЕЧЕРНЕЕ ПЛАТЬЕ ВЯЗАНОЕ КРЮЧКОМ

ВЕЧЕРНЕЕ ПЛАТЬЕ ВЯЗАНОЕ КРЮЧКОМ Источник: http://barrellab.ru  



читать далее »

Аксессуары для одежды из старой кофточки

И сегодня посмотрим несколько идей, как можно использовать старые вещи. Эти идеи я нашла у Станиславы Мареттовой из Словакии. Вот что она пишет. "Сегодня я перебирала летние кофточки и футболочки. Наверное некоторым это знакомо -какие-то вещи



читать далее »

Природа

Около 4000 млн. лет назад Земля была покрыта действующими вулканами.


читать далее »

КУЛИНАРНАЯ ТАБЛИЦА МЕР РАЗЛИЧНЫХ ПРОДУКТОВ (ГР, СТ. Л., Ч.Л., ШТ.)

Для тех, у кого пока нет электронных кухонных весов - может пригодиться  



читать далее »

Вышивка для скатерти и полотенца. Схемы



читать далее »

Из винтажного топа - в современное платье. Вязание крючком

Слова автора Алены: Топ был связан крючком №0.6, очень тоненькими ниточками. Будем превращать его в платье.   Источник Пряжа: 1. YarnArt "begonia", цвет 0077 2. Alize "forever", цвет 26 (сразу уточню, пряжа не самая лучшая как по мне, но только у



читать далее »

Шапка «Жирафик» крючком

 



читать далее »

Космос

Наиболее стремительно движется по околосолнечной орбите Меркурий - средняя скорость составляет 47,9 километра в секунду. До августа 2006 года считалось, что из всех планет Солнечной системы наименьшая скорость орбитального движения у Плутона, который перемещается по


читать далее »

Схема фриволите, анкарс: Свадебные ожерелье и серьги Ольга

Схема фриволите, анкарс: Свадебные ожерелье и серьги Ольга Воздушное свадебное колье ручной работы с бисером и жемчугом создано для невесты Ольги. Автор: Дарина Никонова   Сайт автора: Дарина Никонова. Украшения из бисера Материал для свадебного колье и серёг "Ольга": нить лавсан, люрекс; бисер



читать далее »

розы из фоамирана

автор мастер класса     PovodirN   из  "Страны мастеров" далее слова автора   Уникальный материал - фоамиран! Именно из него у меня стали получаться розы. Спешу поделиться своей радостью с вами. Материал новый, МК немного. Еще один МК  не помешает? Потребуется:1.



читать далее »

Как сделать Пат - смесь для создания тычинок и покраски папье-маше

Автор: Вероника Подгорная ЖЖ автора: nika_po Яндекс объяснил мне что пат - это шахматный термин, а я думала что пат - смесь крахмала, клея ПВА и гуаши. Его используют для изготовления тычинок мастерицы-цветочницы. Если вы вдруг захотите сделать игрушечные



читать далее »

Из старого советского стула в экземпляр для дворца

Декупаж стула от Натальи Родиной Источник: http://s30893898787.mirtesen.ru/blog/43748357900/Iz-starogo-sovetskogo-stula-v-ekzemplyar-dlya-dvortsa



читать далее »

Наука

Электрон в 2000 раз легче протона.


читать далее »
Здесь пока пусто

Unauthorized.

Профессиональное сжатие видео

2011.10.08

Автор: (c)Крис Касперски ака мыщъх

Эта публикация открывает цикл статей, посвященных вопросам обработки видеоинформации в домашних условиях и в первую очередь - осмысленной настройке MPEG2/MPEG4-кодеков, увеличивающей степень сжатия (без видимой потери качества) в несколько раз по сравнению с "сертифицированными профилями", установленными по умолчанию.

Введение

Научно-технический прогресс развращает, приучая все делать одним взмахом мыши, в результате чего мы имеем DVD-диск от SUPERBIT и EXTRABIT "непревзойденного качества", подготовленные с помощью Ahead Nero (о чем честно свидетельствует поле Source Media Implementation Identifier, хранящееся на DVD-диске вместе с прочей служебной информацией) и записанные с грубыми нарушениями стандарта, в результате чего мы имеем проблемы - от появления "артефактов" и ухудшения качества, до полной невозможности воспроизведения диска на определенных моделях DVD-плееров (особенно стационарных).

Сжатие цифрового видео - очень сложная тема, намного более кромешная и запутанная, чем это кажется до попытки основательно разобраться в ней. Начав исправлять ошибки лицензионных DVD (исключительно в целях домашнего просмотра!), автор зарылся в стандарты, обложился спецификациями, скачал исходные коды всех доступных кодеков и... на несколько месяцев погрузился в пучину бесчисленных экспериментов, в результате чего стал сжимать намного качественнее и плотнее, чем окружающие. "Качественнее" - это значит лучше, чем на оригинальном DVD-носителе (см. рис. 18, 19). Не верите? Говорите: "чудес не бывает"? А разве алгоритмы сжатия звука и видео - это уже само по себе не чудо? Немного людей знает, на каких принципах они базируются и еще меньше готовы написать свой собственный кодек или усовершенствовать имеющийся.

Да что там! Подавляющее большинство использует настройки по умолчанию или пытается манипулировать ими вслепую. Журналы и пестрят сравнительными тестами различных кодеков, демонстрирующими один и тот же кадр, рассматриваемый под большим увеличением. И невдомек им, что при популярном двухпроходном сжатии и дробном quantizer'e разные кадры сжимаются с разным качеством (поскольку quantizer дробным не бывает и если для достижения заданного объема целевого файла кодер решил, что нужно использовать quantizer = 2.5, в практическом плане это означает, что половина кадров закодируется с quantizer = 2, а половина - с 3 и результаты теста в большой степени зависят от того, какой кадр мы возьмем). Также при динамическом битрейте кодек стремится отдать больше битов тем сценам, в которых по его мнению они сильнее всего нуждаются, отнимая их у всех остальных. Алгоритм перераспределения битов у всех кодеков разный и потому сравнивая один и тот же кадр, сжатый разными кодеками, мы можем получить драматический разрыв в качестве, но... делать глобальные выводы на этом основании нельзя!

Это, так сказать, для затравки. Чтобы пробудить исследовательский интерес. Зная, как работает кодек, мы сможем осмысленно крутить его настройки для достижения максимального сжатия с минимальной потерей качества. Источником видеоматериала может выступать и цифровая камера, и карта видеозахвата, и TV-тюнер, и куча прочего потребительского барахла... но мы (для удобства) остановимся на DVD как на самом удобном и "послушном" носителе информации.

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

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

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

Требования к читателю

Предполагается, что читатель уже имеет некоторое представление о цифровом видео и хотя бы в общих чертах понимает, чем MPEG отличается от AVI. На всякий случай, вот несколько хороших FAQ по этому поводу:

  • Introduction to MPEG:
    http://www.faqs.org/faqs/compression-faq/part2/section-2.html;

  • The Unofficial XviD FAQ:
    http://ronald.vslcatena.nl/docs/xvidfaq.html;

  • Современные методы и стандарты экономного кодирования видеоинформации:
    http://compression.graphicon.ru/download/articles/video/standards/state-of-the-art-video-compression.pdf;

Свет и цвет

Существует множество систем кодирования светоцветовой информации, воспринимаемой человеком. Большинство методов построено на сложении (вычитании) трех или четырех основных цветов. В частности, CRT-телевизоры формируют изображение путем трех лучевых пушек - красной (Red), зеленой (Green) и синей (Blue) и соответствующая ей цветовая схема называется RGB. Она же используется и в большинстве видеокарт. Популярный режим RGB32 (True Color 32) на кодирование каждого пикселя расходует по 8 бит плюс еще 8 бит отводится под канал прозрачности. Итого 3 * 8 + 8 = 32.

Нетрудно подсчитать, сколько байт потребуется для кодирования "картинки" с любым разумным разрешением. Такое количество информации очень трудно сохранить и еще труднее передать по радиоканалу. А при проектировании цветных телевизоров перед разработчиками поставили задачу - любой ценой уложиться в полосу пропускания, отведенную для Ч/Б телевизоров, в которую RGB никак не желала укладываться и пришлось пойти на ряд хитростей.

Считается, что нормальный человеческий глаз (художников мы не берем в расчет) способен распознать до 16 миллионов цветовых оттенков, в то время как 32-битный RGB дает 4.294.967.296, что намного больше, то есть явный перебор. Сколько же бит реально необходимо? Прибегнув к логарифмам, нетрудно подсчитать, что 24 бита кодируют 16.777.216 оттенков. Но 24 бита - это все равно очень и очень много. С другой стороны, далеко не все оттенки равнозначны...

Цветоощущение - подарок природы, появившийся на поздних стадиях эволюции (многие животные его лишены и до сих пор!), в силу чего глаз гораздо более чувствителен к изменению яркости, чем к положению в спектре (т.е. цветности). Отталкиваясь от этого факта, перед передачей в эфир исходные RGB-сигналы преобразуются в сигнал яркости Y (он же Luminance или Luma) и два цветоразностных сигнала U и V (Chroma), вычисляемых по следующей формуле:

Y = 0.299R + 0.587G + 0.114B, U = R - Y, V = B - Y

Формула 1. Перевод RGB-сигналов в YUV-форму.

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

Естественно, перед выводом на экран приходится осуществлять обратное преобразование:

R = Y + U, B = Y + V, G = Y - 0.509U - 0.194V

Формула 2. Перевод YUV-сигналов в RGB.

Подробнее об этом можно прочитать в любой книжке по ремонту и настройке цветных телевизоров или в следующей статье: http://www.videoton.ru/Articles/Article2.html. Какое отношение имеют телевизоры к компьютерам и (тем более!) к сжатию информации? Самое прямое!!! Поскольку сжимать в основном приходится не RGB32, сграбленный с экрана, а видеоматериал, предназначенный для эфирной трансляции, то в нем уже отсутствует вся информация о 2^32 оттенках и потому MPEG-кодеры работают с "телевизионными" цветовыми схемами. В MPEG1 это YUV420 (она же YUV12 и YV12), в которой значение яркости (Y) сохраняется для каждого пикселя, а цветоразностные компоненты (U&V) получаются путем усреднения значений 4-х пикселей, образующих матрицу 2x2. На все компоненты отводится по 8 бит, в результате чего на одни пиксель приходится 12 бит (отсюда и название). Главным недостатком подобной схемы становится не только низкое цветовое разрешение, но и невозможность работы с чересстрочным (interlaced) видеоматериалом, т.к. из-за объединения соседних вертикальных линий возникают сильные искажения.

В MPEG2 используется более продвинутая цветовая схема YUV422 (она же YUY2), которая, так же, как и предыдущая сохраняет яркостной сигнал (Y) для всех точек, а вот сигнал цветности усредняется у двух соседних пикселей по горизонтали, в результате чего появляется возможность работать с чересстрочным видеоматериалом, цветовое разрешение возрастает вдвое, а на один пиксель уже приходится 16 бит.

В MPEG4-кодеках может использоваться как та, так и другая схема. YV12 встречается гораздо чаще, поскольку обладает более высоким сжатием, экономящим 35% бит по сравнению с YUY2. Кстати, именно по этой причине многие MPEG-4 кодеки первого поколения (такие как DivX, например) не могли работать с чересстрочным видео и перед его сжатием приходилось выполнять операцию de-interlaced, что не только требовало время, приводило к появлению "артефактов", но и ухудшало сжимаемость, но постепенно разработчики кодеков решили эту проблему и теперь при включении одноименной опции черные промежуточные полосы не сжимаются вообще, существенно сокращая размер выходного файла.

Ладно, это все была сухая теория. Переходим к суровой практике. При сжатии MPEG4-кодеком видеоматериала, представленного в формате YUY2 (например, DVD), искажения будут происходить не только из-за потери информации о цветности, но и... ошибок преобразования YUY2 в YV12 и последующей конвертации YV12 в RGB при выводе на экран монитора. Искажения цветопередачи зачастую оказываются весьма значительными и кристально чистая небесная голубизна превращается в унылую серую грязь. Чтобы понять, почему так происходит (и что сделать, чтобы этого не происходило) необходимо разобраться в этом вопросе более подробно и основательно.

Начнем, как водится, с канонов. Группа MSSG (MPEG Software Simulation Group) прилагает к стандарту референсную (reference - эталон) версию библиотеки mpeg2, последнюю версию которой можно скачать по адресу: ftp://ftp.mpegtv.com/pub/mpeg/mssg/mpeg2v12.zip (для доступа требуется логин и пароль) или утянуть ее прямо из института Беркли без всяких логинов и паролей: http://bmrc.berkeley.edu/ftp/pub/multimedia/mpeg/mpeg2/software/mpeg2v12.zip

В файле \src\mpeg2enc\readpic.c содержится исходный код функции readpic.c, преобразующий RGB в YUV2, ключевой фрагмент которой приведен ниже:

for (i=0; i {
        yp = frame[0] + i*width;
        up = u444 + i*width;
        vp = v444 + i*width;
        
        for (j=0; j         {
                r=getc(fd); g=getc(fd); b=getc(fd);
                /* convert to YUV */
                y = cr*r + cg*g + cb*b;
                u = cu*(b-y);
                v = cv*(r-y);
                yp[j] = (219.0/256.0)*y + 16.5; /* nominal range: 16..235 */
                up[j] = (224.0/256.0)*u + 128.5; /* 16..240 */
                vp[j] = (224.0/256.0)*v + 128.5; /* 16..240 */
        }
}

Листинг 1. Фрагмент функции перевода RGB в YUV2, выдранный из референсной библиотеки mpeg2.

Первое, что бросается в глаза - это, конечно же, вещественная арифметика, которая проигрывает целочисленной и пожирает процессорные такты со страшной силой. Но это еще не самое страшное (в конце концов, оптимизация - вопрос реализации). Хуже всего то, что отображение цветового диапазона RGB на цветовой диапазон YUV2 выполняется неправильно, с грубыми ошибками, допущенными умышленно и даже отмеченными в комментариях. Для увеличения степени сжатия уровень каждой из компонент сужается с 0...255 до 16...235 и обратное преобразование (естественно), приходится выполнять в том же порядке. Для телевизора (и CRT-монитора времен ранней молодости MS-DOS с подсевшей трубкой), эта схема работает на ура, поскольку по краям диапазона оттенки яркости практически неразличимы, а вот для современного LCD монитора с S-IPS матрицей (каким, в частности, является мой NEC 1970NX) уровень 16 - это уже не черный, а серый (или, точнее говоря, слегка белесоватый). В результате фильмы, действие которых разворачивается во мрачных замках, куда не проникает дневной свет, смотреть становится практически невозможно. Все тени приобретают грязноватый оттенок.

Умные декодеры (к которым, в частности, относится мной любимый FFDShow) позволяют исправить ситуацию либо коррекцией уровней (levels), либо модификацией функции конвертации (это совсем несложно сделать - исходные тексты доступны и хорошо структурированы). Только не берите версию FFShow, лежащую на www.sourceforge.net. Она безнадежно устарела (поскольку по непонятным причинам разработчикам отрубили доступ к проекту). В настоящее время скачать самую последнюю версию FFDShow можно с сервера www.free-codecs.com (более точная ссылка не приводится, поскольку она постоянно мигрирует в широких пределах).

Естественно, референсная библиотека - это совсем не Коран и LCD-мониторы появились не вчера и даже не позавчера. Другими словами, "правильный" DVD должен записываться с использованием "правильной" схемы конвертации, но... даже среди абсолютно лицензионных дисков за $15-$20 встречается куча откровенного барахла... Вот только один пример (см. рис. 1). Видите? Нижний порог яркости начинается не с нуля, а верхний - заканчивается задолго до достижения максимального насыщения (естественно, для снятия этого screenshot'а была специально выбрана соответствующая сцена из фильма, содержащая и предельно черные - в ее понимании - и предельно белые - опять-таки, в ее понимании - уровни яркости).

Наблюдение за уровнями яркости

Рисунок 1. Наблюдение за уровнями яркости в FFDShow.

Таким образом, мнение, что "DVD-качество" это эталон, выше которого не запрыгнуть, глубоко неверно. И часто случается так, что при правильном "перегоне" DVD на CD мы выигрываем в размере за счет потери несущественных деталей (которые все равно не видны) и в качестве - за счет устранения грубых ошибок мастеринга, сразу же бросающихся в глаза при просмотре оригинала.

Ладно, уровни - это ерунда. С ними и ребенок справится (естественно, с той оговоркой, что при растяжке уровня с 16...235 до 0...255 происходит неизбежная потеря информации о яркости - отрезанные биты ведь не из воздуха берутся, хотя в целом картинка смотрится намного естественнее). Большинство коммерческих (да и некоммерческих) кодеков для достижения максимального быстродействия используют целочисленную арифметику. Вот фрагмент функции преобразования YUV в RGB, выдранный из XviD'а, и находящийся в файле \src\image\colorspace.c. Сами же исходные тексты можно найти на официальном сайте: http://downloads.xvid.org/downloads/xvidcore-1.1.2.zip.

#define WRITE_RGB16(ROW,UV_ROW,C1)                                                  \
        rgb_y = RGB_Y_tab[ y_ptr[y_stride*(ROW) + 0] ];                             \
        b[ROW] = (b[ROW] & 0x7) + ((rgb_y + b_u##UV_ROW) >> SCALEBITS_OUT);         \
        g[ROW] = (g[ROW] & 0x7) + ((rgb_y - g_uv##UV_ROW) >> SCALEBITS_OUT);        \
        r[ROW] = (r[ROW] & 0x7) + ((rgb_y + r_v##UV_ROW) >> SCALEBITS_OUT);         \
        *(uint16_t *) (x_ptr+((ROW)*x_stride)+0) = C1(r[ROW], g[ROW], b[ROW]);      \
        rgb_y = RGB_Y_tab[ y_ptr[y_stride*(ROW) + 1] ];                             \
        b[ROW] = (b[ROW] & 0x7) + ((rgb_y + b_u##UV_ROW) >> SCALEBITS_OUT);         \
        g[ROW] = (g[ROW] & 0x7) + ((rgb_y - g_uv##UV_ROW) >> SCALEBITS_OUT);        \
        r[ROW] = (r[ROW] & 0x7) + ((rgb_y + r_v##UV_ROW) >> SCALEBITS_OUT);         \
        *(uint16_t *) (x_ptr+((ROW)*x_stride)+2) = C1(r[ROW], g[ROW], b[ROW]);

Листинг 2. Макрос из XviD'а, отвечающий за преобразование YUV в RGB.

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

Для борьбы с этим явлением разработчики видеокарт придумали такую штуку, как оверлей (overlay mode), позволяющую части экрана иметь цветовую схему, отличную от текущей. В overlay-mode видеоинформация проходит "транзитом" сквозь карту и поступает на монитор, не затрагивая остальные узлы, минуя видеопамять и... освобождая центральный процессор от необходимости выполнения преобразования одной цветовой схемы в другую. Вот только... монитор - он ведь на входе совсем не YUV ожидает увидеть и потому оверлей не снимает проблему конвертации, а просто перекладывает ее на плечи карты. Причем, если программный алгоритм преобразования цветовых пространств легко поменять (выбирая из всех самый удачный), то с железом не поспоришь и карта выдает то, что в нее заложено.

Часть карт вообще не поддерживает overlay-mode, часть - поддерживает, но выдает изображение такого скверного качества, что на него практически невозможно смотреть (в особенности это относится к картам NVIDIA). У почитаемого мной Matrox'а G450 с цветопередачей в режиме оверлея все нормально, но вот драйвера... при попытке перехода в overlay-mode они частенько обрушивают систему в голубой экран смерти, что совсем не добавляет оптимизма.

Стандартный Microsoft Media Player всегда стремится использовать оверлей и никакой возможности отключить эту функцию у него нет (может быт, и есть где-нибудь в глубине реестра, да и то навряд ли). Плееры сторонних производителей (и в частности, BSPlayer - http://www.bsplayer.org/) позволяют отключать оверлей установкой галочки "Force RGB mode" (см. рис. 2).

Форсирование RGB-режима

Рисунок 2. Форсирование RGB-режима в BSPlayer'е.

Ниже приводятся два кадра из одного и того же фильма. Первый получен в форсированном RGB-режиме, второй - в overlay-mode на карте NVIDA GeForce 6600. Как говорится, почувствуйте разницу!

Кадр, полученный в RGB-режиме

Рисунок 3. Кадр, полученный в RGB-режиме (с кодеком FFDShow).

Кадр, полученный в режиме оверлея

Рисунок 4. Кадр, полученный в режиме оверлея на карте NVIDIA GeForce 6600.

А разница такова, что в RGB-mode у мужика вид сильно поддатого грузчика. :-) Зато в overlay-mode море и сгустившийся над ним туман приобретают грязно-серый цвет, а низ каната (если присмотреться повнимательнее!) окашивается в зеленый цвет! Уж не водорослями он успел обрасти за это время?!

Уже упомянутый кодек FFDShow имеет функцию высококачественного преобразования YV12 в RGB, активируемую установкой флажка "High quality VY12 to RGB conversion". Она отнимает дополнительные такты, но дает значительно лучший результат (см. рис. 5):

Активирование функции высококачественного преобразования

Рисунок 5. Активирование функции высококачественного преобразования YV12 в RGB в кодеке FFDShow.

Лицо приобретает нормальный телесный оттенок (см. рис. 6), но вот океан... Впрочем, не видя оригинала, трудно сказать насколько (не)качественно выполнено преобразование. Но, по крайней мере, мы можем выбирать из всех вариантов преобразования тот, что наиболее приятен нашему глазу.

Форсированный RGB-режим

Рисунок 6. Форсированный RGB-режим, кодек FFDShow (функция высококачественного цветового преобразования).

На этой ноте разборки с цветовыми схемами будем считать законченными и приступим к по-настоящему серьезным вещам.

Дискретное косинусное преобразование

Фундаментом всех систем сжатия с потерями (JPEG, MP3, MPEG1/2/4) является дискретное косинусное преобразование (Discrete Cosine Transform или сокращенно DCT), представляющее собой разновидность косинусного ортогонального преобразования для вектора действительных чисел. Понять, что такое DTC, можно на примере широко известного дискретного преобразования Фурье - Discrete Fourier Transform или DFT (дискретное косинусное преобразование представляет собой гомоморфизм его векторного пространства).

В общем случае DTC-преобразование осуществляется умножением вектора на матрицу преобразования:

[Y] = [C]x[X]x[CT]

Формула 3. DTC-преобразование, записанное в матричной форме, здесь: [X] - начальная матрица, [C] и [CT] - матрицы с коэффициентами преобразования, где CT означает транспонированную матрицу.

Алгоритмы MPEG1, MPEG2 и MPEG4 разбивают каждый кадр (фрейм) на блоки по 8x8 пикселей, над которыми осуществляется DCT-преобразование - сначала для каждой строки, а затем для каждого столбца матрицы, поэтому такое преобразование часто обозначается как DCT8 (число "восемь" означает 8 векторов).

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

Наглядная демонстрация

Рисунок 7. Наглядная демонстрация DFT- и DCT-преобразований.

Обходя матрицу в зигзагообразном порядке от левого верхнего угла к правому нижнему, кодируем ее содержимое методом Хаффмана или Арифметическим кодированием или любым другим методом энтропийного кодирования, использующего коды переменной длины. Как уже несложно догадаться, наиболее короткие коды достаются коэффициентам, расположенным в левом верхнем углу. Уже за счет одного лишь DCT-преобразования мы добиваемся некоторого сжатия, причем это сжатие происходит без потерь, что, впрочем, не дает никаких оснований для радости, поскольку степень сжатия невелика и сопоставима с обычными архиваторами.

Чтобы увеличить сжатие, необходимо отсечь наименее значимые детали, практически не воспринимаемые человеческим глазом, но кодируемые наиболее длинными кодами. После выполнения DСT-преобразования эта задача выполняется элементарно, поскольку детали уже разделены на значимые и незначимые. Как говорится, "отсекай и властвуй". Операция отсечения осуществляется при помощи матрицы квантования, подробно описанной в одноименном разделе - там же, где описан процесс квантования, определяющий качество сжатия в целом.

Закодированная матрица (или, точнее - все, что от нее осталось, поскольку после квантования большинство коэффициентов правого нижнего угла обращаются в нули) помещается в сжатый MPEG-файл и кодировщик переходит к обработке следующего 8x8 блока.

Для вывода картинки на экран декодер, естественно, должен превратить совокупность волн в привычные нам пиксели, выполняя операцию обратного дискретного косинусного преобразования - Inverse Discrete Cosine Transformation или, сокращено, IDCT. Понятное дело, что она уже не будет соответствовать оригиналу и часть деталей окажется безвозвратно утеряна.

Матрица квантования

После выполнения DCT-преобразования мы получаем матрицу, наиболее значимые детали которой сосредоточены в левом вернем углу, а наименее значимые - в левом нижнем. Возникает естественное желание - отбросить незначимые детали, сократив размер целевого файла. Это достигается путем квантования.

Квантованием (применительно к обработке сигналов) называется деление величины сигнала на некоторое целое число, называемое квантом (quant), обычно обозначаемый буквой Q, а обратный ему процесс - деквантированием. С математической точки зрения X / Q = X * Q, но целочисленная арифметика "огрубляет" сигнал (см. рис. 8, 9), причем это "огрубление" тем сильнее, чем больше квант. При Q = 1 мы не теряем никаких деталей, при Q, превышающим половину амплитуды сигнала - теряем все.

Сигнал, переведенный в цифровую форму

Рисунок 8. Сигнал, переведенный в цифровую форму.

Оцифрованный сигнал после квантования

Рисунок 9. Оцифрованный сигнал после квантования.

Применительно к MPEG-сжатию операция квантования выполняется дважды - первый раз при наложении на DCT-матрицу специальной Матрицы Квантования (Quantization Matrix или QM) и второй раз - при квантовании коэффициентов матрицы, образующейся после наложения.

Стандартная MPEG-2 Матрица Квантования выглядит так (см. листинг 3):

08 16 19 22 26 27 29 34
16 16 22 24 27 29 34 37
19 22 26 27 29 34 34 38
22 22 26 27 29 34 37 40
22 26 27 29 32 35 40 48
26 27 29 32 35 40 48 58
26 27 29 34 38 46 56 69
27 29 35 38 46 56 69 83

Листинг 3. Стандартная MPEG-2 Матрица Квантования.

В литературе, посвященной сжатию, процесс наложения матрицы квантования обычно описывается слегка неточно. Утверждается, что коэффициенты исходной DCT-матрицы попарно сравниваются с коэффициентами матрицы квантования и если Y[i] < QM[i], то данный коэффициент отбрасывается и вообще не кодируется ([Y] - матрица, полученная при DCT-преобразовании). То есть, в грубом приближении, коэффициенты QM-матрицы как бы задают порог отсечения.

На самом деле квантование происходит так: X[i] = Y[i] / QM[i], где [X] - матрица, полученная после квантования (примечание: тот факт, что фреймы разбиваются на inter- и intra-блоки, квантование которых выполняется слегка различно, мы пока опускаем, т.к. для его объяснения требуется иметь представление о типах фреймов I, P, B и S, разговор о которых еще впереди и на всякий случай отметим, что сейчас мы разбираем кодирование intra-блоков).

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

Большинство MPEG-4 кодеков работают как минимум с двумя матрицами - MPEG-2 (резкое изображение, среднее сжатие) и H.263 (сглаженное изображение, высокое сжатие). Некоторые кодеки (и в частности, XviD) поддерживают пользовательские матрицы квантования, что открывает практически неограниченные перспективы для качественного сжатия, но об этом чуть позже, а пока разберемся с одним весьма щекотливым моментом, вызывающим путаницу и недопонимания.

Пример QM-матрицы, обеспечивающей большее сжатие за счет намного более агрессивного выбрасывания деталей, приведен ниже:

 20  20  20  20  31  63 127 255
 20  40  40  40  63 127 255 255
 20  20  31  63 127 255 255 255
 20  31  63 127 255 255 255 255
 31  63 127 255 255 255 255 255
 63 127 255 255 255 255 255 255
127 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255

Листинг 4. Нестандартная QM-матрица, обеспечивающая очень высокое сжатие, но вместе с ним намного более значительную потерю деталей.

Достоинство алгоритмов семейства MPEG в том, что они позволяют ужать видеофайл до любого требуемого размера. За счет чего этого достигается? А все за счет того же квантования. Матрица, образовавшаяся после наложения QM-матрицы, подвергается повторному квантованию, то есть делению на некоторое целое(!) число, называемое quantizer'ом и обозначаемое буквой Q.

В упрощенном виде процесс квантования (включающий в себя наложение QM-матрицы выглядит так):

#define DIV_DIV(a,b)	(((a)>0) ? ((a)+((b)>>1))/(b) : ((a)-((b)>>1))/(b))
#define VM18P 3
#define VM18Q 4

/* divide-by-multiply table
 * needs 17 bit shift (16 causes slight errors when q > 19) */
#define SCALEBITS 17
#define FIX(X)	((1UL << SCALEBITS) / (X) + 1)
static const uint32_t multipliers[32] =
{
	0,       FIX(2),  FIX(4),  FIX(6),
	FIX(8),  FIX(10), FIX(12), FIX(14),
	FIX(16), FIX(18), FIX(20), FIX(22),
	FIX(24), FIX(26), FIX(28), FIX(30),
	FIX(32), FIX(34), FIX(36), FIX(38),
	FIX(40), FIX(42), FIX(44), FIX(46),
	FIX(48), FIX(50), FIX(52), FIX(54),
	FIX(56), FIX(58), FIX(60), FIX(62)
};

/* quantize intra-block
 *
 * const int32_t quantd = DIV_DIV(VM18P*quant, VM18Q);
 * const uint32_t  mult = multipliers[quant];
 * uint32_t level = DIV_DIV(16 * data[i], default_intra_matrix[i]);
 * coeff[i] = ((level + quantd) * mult) >> SCALEBITS;
 */

Листинг 5. Псевдокод, иллюстрирующий наложение QM-матрицы и квантование заданным quantizer'ом (позаимствован из исходных текстов XviD'а).

Quantizer представляет собой целое число от 1 до 31 включительно. При Q = 1 мы сохраняем максимум деталей, а при Q = 31 - теряем все ("теряем все" - в пределах одного 8x8 блока, который заливается одним цветом, и мы получаем мозаику из 8x8 квадратов, из которой еще кое-что можно разобрать).

На самом деле 31 - это очень большое число и уже при Q > 6 на изображение без содрогания смотреть становится невозможно. С другой стороны, учитывая, что DVD-диски обычно записываются с Q = 2, становится ясно, что для большинства видеоматериалов имеет смысл использовать только Q от 2 до 6.

Ниже представлен ряд изображений, сжатых с разными quantizer'ами для сравнения:

Изображение

Рисунок 10. Изображение, сжатое с Q = 1.

Изображение

Рисунок 11. Левая половина - Q = 1, правая - Q = 6.

Изображение

Рисунок 12. Левая половина - Q = 1, правая - Q = 13.

Изображение

Рисунок 13. Левая половина -Q = 1, правая - Q = 31.

Откуда взялись эти числа - 1 и 31? Ну, с 1 все понятно. Поскольку на ноль делить нельзя, то 1 - это наименьший возможный quantizer, кстати говоря, не выполняющий никакого квантования, поскольку от деления на единицу коэффициенты матрицы не меняются. Но вот почему максимальный quantizer равен 31?

Ответ хранится в исходных текстах кодека MPEG-2, а точнее - в функции квантования quant_intra(), находящейся в файле \src\mpeg2enc\quantize.c, ключевой фрагмент которой приведен ниже.

for (i=1; i<64; i++)
{
        x = src[i];
        d = quant_mat[i];
        y = (32*(x>=0 ? x : -x) + (d>>1))/d; /* round(32*x/quant_mat) */
        d = (3*mquant+2)>>2;
        y = (y+d)/(2*mquant); /* (y+0.75*mquant) / (2*mquant) */
        
        /* clip to syntax limits */
        if (y > 255) if (mpeg1) y = 255; else if (y > 2047) y = 2047;
        
        dst[i] = (x>=0) ? y : -y;
}

Листинг 6. quant_intra (\src\mpeg2enc\quantize.c).

Немного подумаем. Максимальное значение индекса матрицы равно 255 (в MPEG-2 - 2047 или 7FFh). Минимальный коэффициент квантования в левом верхнем углу матрицы - 8. Тогда при quantizer >= 31 весь блок 8x8 гарантированно обращается в ноль, т.е. теряется вся информация, хотя как уже говорилось выше, использование таких высоких Q бессмысленно, разве что в экспериментальных целях, но не будем углубляться в теорию, а лучше вернемся обратно к практике.

Чем больше Q, тем выше степень сжимаемости видеоматериала, но и тем ниже его качество. Варьируя значение Q, можно получить файл заданного размера, например, ужать DVD до размеров одного CD. Но часто бывает так, что при Q = 4 файл на диск никак не влезает, а при Q = 5 влезает с большим запасом.

Практически во всех кодеках, которые мне только доводилось видеть, quantizer представляется дробным числом с несколькими знаками после запятой (см. рис. 14).

Задание дробного quantizer'a

Рисунок 14. Задание дробного quantizer'а в настройках XviD'a.

Не посвященному в тонкости кодирования это кажется вполне нормальным, но после разбора приведенных выше фрагментов исходных текстов кодеков MPEG-2 и XviD возникает резонный вопрос: как же quantizer может быть дробным, если он по жизни целый?! Дробных quantizer'ов не бывает!!! И ведь правда - не бывает. Просто не встречается в живой природе. Выбор нецелого quantizer'а приводит к тому, что часть фреймов кодируются с одним Q, а часть - с другим (см. рис. 15). Усредненное значение и даст нужное нам (псевдодробное) значение Q.

Результат использования дробного quantizer'а

Рисунок 15. Результат использования дробного quantizer'а - различные фреймы сжимаются с различным Q и все вместе они дают усреднение (по горизонтали откладывается Q, по вертикали - количество фреймов, сжатых с данным Q, типы фреймов [I/P/B] мы рассмотрим в следующий раз).

Психофизическая модель, используемая кодеками, отталкивается от того факта, что при быстром мелькании качественных (т.е. детализированных) и некачественных (т.е. с потерей деталей) кадров человеческий глаз, а точнее - мозг улавливает детали и игнорирует размытость, в результате чего при чередовании кадров с Q и Q+1, субъективное качество приближается к Q.

А вот это для кого как! Лично у меня субъективное качество в первую очередь обуславливается наименее качественными кадрами, вплотную приближаясь к Q+1 и даже становясь хуже его! Чередование Q и Q+1 создает некоторое, трудно передаваемое словами, ощущения "дрожания" изображения и фильм, сжатый с Q+1 субъективно (опять-таки субъективно!) воспринимается более приятно, чем с Q/Q+1. Но это - сугубо индивидуальные ощущения. Тем не менее, они подтверждаются большим количеством моих знакомых. К тому же, тут еще вот какое обстоятельство прослеживается: при просмотре фильма с потерянными деталями (о существовании которых мы даже не подозреваем), субъективное качество остается вполне приемлемым даже при завышенном quantizer'е, но... стоит только глазу показать несколько кадров, где эти детали сохранены, как он моментально перестраивается и меняет оценку с "приемлемой" до "неудовлетворительной". Это можно сравнить с тем, что газетный лист кажется белым до тех пор, пока рядом с ним не окажется кусок мелованной бумаги.

Отсюда вывод: выбор целого значения quantizer'а обеспечит лучшее качество изображения, чем дробное. А как же в этом случае "подгонять" сжатый файл под требуемый размер? Целочисленный quantizer - слишком уж грубое средство... Действительно грубое, ведь он квантует сигнал, уже подвергшийся квантованию!

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

Кстати говоря, в XviD'е имеется экспериментальный "Modulated QM", стремящийся выбрать наиболее адекватную матрицу квантования для данного Q. Увы, алгоритм его работы постоянно меняется. Сначала он использовал H.263 матрицы (обеспечивающие лучшее сжатие, но дающие более высокую размытость) для фреймов с Q <= 3 и MPEG-2 матрицы (выше резкость, хуже сжимаемость) для фреймов с Q >= 4, что вызывало массу негативных откликов. Действительно, зачем портить качество "мыльной" матрицей на низких Q и зачем подчеркивать резкость потерянных деталей при высоких Q?! В следующих версиях стратегия модулятора изменилась на прямо противоположную и теперь он стал выбирать MPEG-2 матрицы для фреймов с Q <= 3 и H.263 матрицы для фреймов с Q >= 4, что обеспечивает лучшее качество при большей степени сжатия (примечание: quantizer выбирается для каждого 8x8 блока индивидуально, хотя в подавляющем большинстве случаев весь блок кодируется с одним Q).

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

Битрейт - это просто количество битов в секунду. Зная размер (в битах) и частоту (в fps) кадров, не составит труда рассчитать размер конечного файла, равно как и наоборот - размер файла однозначно обуславливается его битрейтом. Величина самого битрейта, естественно, зависит от степени сжимаемости видеоматериала и поскольку кодек не пророк, он сжимает исходный видеоматериал за два прохода. В первом проходе никакого сжатия не выполняется, а лишь оценивается степень сжимаемости каждого фрейма, затем на основе полученной информации вычисляется необходимый quantizer, с которым видеоматериал реально сжимается во втором проходе.

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

Пример такого поведения продемонстрирован на рис 16. Из-за того, что кодек выделил некоторым сценам Q < 8, для достижения заданного размера, он оказался вынужден закодировать подавляющее большинство фреймов с Q = 10. Большое количество фреймов оказалось сжато с Q от 11 до 16 включительно, а некоторые фреймы кодировались с... Q = 22! И хотя средний Q = 12.15, при постоянном quantizer'е тот же самый фильм с теми же самыми настройками сжимается тем же самым кодеком за один проход с Q = 7, занимая даже чуть-чуть меньший размер и чудовищно выигрывая в качестве (и это без редактирования матрицы квантования и прочих шаманских ритуалов).

Попутно - чем уже "гора", образующаяся на диаграмме XviD'а - тем выше качество сжатия. Наличие "выбросов" (т.е. нескольких несмежных пиков) указывает на то, что в первом проходе кодек неверно выполнил расчет сжимаемости видеоматериала и на определенных сценах ему катастрофически не хватило битрейта, вот он и сжал их с неоправданно завышенным Q (другая возможная причина - выбор профиля, ограничивающего максимальный пиковый битрейт). Обычно увеличение битрейта позволяет удалить лишние пики, сузив ширину "горы" и увеличив тем самым качество.

Замечено, что XviD страдает хроническим оптимизмом - к концу фильма ему постоянно недостает битрейта и он вынужден увеличивать Q, сжимая финальные сцены с гораздо худшим качеством.

Диаграмма квантования

Рисунок 16. Диаграмма квантования фильма, сжатого с переменным битрейтом.

После многочисленных экспериментов, сжав в общей сложности свыше тысячи DVD-дисков, автор этой статьи полностью отказался от двухпроходного сжатия и теперь жмет фильмы в один проход с фиксированным Q.

Кодек FFDShow позволяет отображать в реальном времени quantizer для каждого из 8x8 блоков и строить диаграмму размеров сжатых фреймов, что невероятно полезно для объективной оценки качества видеоматериала (см. рис. 17). Чтобы задействовать этот режим, откройте FFDShow (Программы -> FDShow -> Video decoder configuration), найдите вкладку "Visualization" и взведите галочки "Quantizers" и "Graph", не забыв отметить и саму "Visualization" (или сделайте то же самое во время просмотра фильма, кликнув по иконке в системном трее, которую FFDShow будет отображать, если в графе "Try, Dialogs & Paths" взвести галочку напротив "Show tray icon".

Визуализация quantizer'а

Рисунок 17. Визуализация quantizer'а и построение диаграммы размера фреймов в реальном времени кодеком FFDShow.

Для покадрового просмотра фильма удобно использовать бесплатный видеоредактор AviDemux (http://fixounet.free.fr/avidemux). Качество соседних кадров, закодированных с различным Q, меняется весьма значительно. Особенно это хорошо заметно на крупных планах, когда отчетливо видны волосы, глаза, ресницы и прочие тонкие черты лица. То есть, предполагается, что они должны быть видны, но высокий Q все "замыливает"...

Лучше, чем DVD

Quantizer, равный 3, обладает одним очень интересным свойством - убирая наименее значимые детали, он действует как отличный "шумодав", что весьма актуально для очистки "зашумленных" DVD (а таких среди них - большинство). Ниже приведены два кадра. Один - с оригинального DVD, другой после сжатия XviD'ом с Q = 3 и H.263 матрицей.

Кадр с оригинального DVD

Рисунок 18. Кадр с оригинального DVD (обратите внимание на шум).

Тот же самый кадр после сжатия

Рисунок 19. Тот же самый кадр после сжатия (куда подевался шум?!)

https://nebka.ru/?uid=1&post=20967