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

NebKa

Отделка стен - шикарно и необычно!

  Нашла в "Одноклассниках" парня (Alexei Cotelea), который делает изумительные вещи!  



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

Фонтан своими руками

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



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

МК Гербера из фоамирана

2. Начинаем с шаблонов.Рисуем вот такие заготовочки: №1 радиус около 12 см, №2 около 13см, №3- 8-9см, №4 около 4,5-5см. Количество,толщину,форму лепестков можно изменять. У меня они такие.Вырезаем заготовочки. 3. Далее работаем с утюгом. Нагреваете по 1 лепестку



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

Шьем прикольную подушку БАБОЧКУ

                                                                     



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

Мой совет:

Серебряные, посеребренные и мельхиоровые изделия можно освежить, промыв их в теплой воде с питьевой содой (50 г на 1 литр воды) или в теплой мыльной воде с нашатырным спиртом (1 столовая ложка на 1 литр).


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

Как сшить шарф с оборками

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



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

История

Во время извержения вулкана Везувия 24 августа 79 года помимо всем известного города Помпеи погибли также города Геркуланум и Стабии.


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

Гребешок для племяшки из фоамирана. МК

Добрый вечер! Сегодня хочу поделиться своей первой работой с фоамираном. Об этом материале я узнала из интернета и мне стало очень интересно с ним поработать. В магазине купила основу "гребешок" и сам материал. Вот такое


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

Анекдот

- Этого, этого и этого расстрелять!- Ой, меня не надо, пожалуйста!- Этого не надо, он не хочет.


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

Кармашки для деток. Только идеи

Вот такие чудесные кармашки для мелочей порадуют ваших деток и приучат их к порядку! источник: http://s30893898787.mirtesen.ru/blog/43998511223/Karmashki-dlya-detok.-Tolko-idei



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

шедевры из картона

Не могла пройти мимо... такие шедевры для вдохновения!!! Картинок о-оооочень много! Marie K"rtonne         процесс сборки   Источник - http://www.mariekrtonne.com/



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

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



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

Цветочки ЙО-ЙО из ткани. Мастер-класс

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



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

Как сшить домашние сапожки

Не хотите к Новому году сшить домашние сапожки? Для того чтобы сшить новогодние домашние сапожки своими руками вам потребуются: лоскуты шерстяных тканей, ткань основа (любая х/б ткань), синтепон, бязь для подкладки, полоска меха, кусочек войлока или



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

Вазочки и сундучки из плетеных газетных трубочек. МК

Вот такие вазочки и сундучки получаются посредством плетения широких газетных полосок Источник: http://www.forum-grad.ru/



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

Мой совет:

Пятна от чая на столовой клеенке легко выводятся соком лимона.


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

Мастер-класс: Ежедневник с вышивкой бисером

Доброго всем дня. В последнее время меня затянули вышитые бисером блокноты и ежедневники, потому и спешу поделиться своими открытиями со всем миром. Возможно, кому-то как раз не хватает красивой обложки на блокнотик, ежедневник, или ещё



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

Как сделать приспособление для сбора вишни

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



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

Украшение балеток. Цветок из молнии. МК

   



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

Вышивка лентами. ИДЕИ

 



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

Блузки+выкройка

  http://moldesedicasmoda.blogspot.ru/p/blusas.html



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

Семь вещей, которые полезно знать о программистах

Как-то знакомый преподаватель английского языка рассказал, что вчера был на вечеринке и услышал анекдот:— Ложась спать программист ставит рядом на столик 2 стакана. — Один с водой — если захочет пить, второй пустой — если не


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

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



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

География

В Японии считается очень неприличным целоваться при свидетелях.


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

Анекдот

Новая примета: две дуры в квартире - к новому альбому в контакте


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

Как уложить длинные волосы самой. Часть 3

Как уложить длинные волосы самой. Часть 3 Гламурная причёска своими руками Если вечером Вам предстоит пройти строгий фейс-контроль, выбирайте эту гламурную причёску, которую можно сделать своими руками - не ошибётесь.Такой вариант причёски идеально подходит для круглого и



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

Мой совет:

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


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

Украшения из газетных трубочек. Мастер-класс

Роскошные новогодние украшения из газетных трубочек! Делаем все по фото и у нас все получится.



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

Подвесные грядки своими руками

Висячие сады давно будоражат воображение огородников, сегодня про то,как сделать подвесные грядки своими рукамиГрядки из водосточных желобов отличный способ использовать пространство вокруг дома для выращивания  цветов или чего-нибудь съедобного, кроме того это стильно выглядит, создает



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

Простая и легкая в вязании юбка крючком

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



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

Животные

Страус ест камешки, чтобы помочь пищеварению путем перемалывания принятой пищи.


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

Биологи выявили у воронов память о друзьях и врагах

Чёрные птахи помнят конкретных сородичей, по меньшей мере, в течение трёх лет. При этом они запоминают и характер сложившихся отношений (дружеские или враждебные). К такому выводу пришли исследователи после длительного наблюдения за группой воронов. Зоологи из университета Вены (Universität


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

Объемные узоры на стене. Пошаговый мастер-класс внутренней отделки

Для объемной отделки стены вам нужно немного свободного времени и терпение, ведь декорирование стен – занятие трудоемкое. Интересным способом объемной отделки стен является нанесение узора по трафарету и его дальнейшее окрашивание. Можно купить готовую массу для



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

Цветочки из одноразовых ложек

Не сразу догадалась, что цветочки из одноразовых ложек....забавно....      источник: http://s30893898787.mirtesen.ru/



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

Керамическая флористика по созданию Новогоднего венка.

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



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

Фото мастер-класс по вышивке веточки мимозы

   



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

Животные

Акула единственная рыба, которая может моргать обеими глазами


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

Очень нарядная кофточка спицами



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

Космос

Атмосфера земного шара весит 5 300 000 000 000 000 тонн.


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

Яйца бенедикт. Видео рецепт.


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

Журнальный столик с балясинами из бутылок

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



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

Мастер-Класс, сумка своими руками

Автор мастер-класса:  FunnyGirl  Добрый день. После пошива юбки у меня осталась ткань, и я решила, что ее обязательно надо на что-нибудь использовать. Так как материала осталось совсем чуть-чуть моим решением было сшить маленькую сумочку-клатч. Сегодня я хочу вам



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

Украшение с применением техники мидзухики

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



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

Анекдот

Приходит в магазин мужчина, не умеющий выговаривать цифру 6. Подходит к продавщице и говорит: "Дайте 7 пачек масла, а одну не надо."


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

Пасхальные яйца в перьях

Еще один вариант декорирования пасхальных яиц, на этот раз перьями и искусственными цветочками Источник byfema24.blogspot.com



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

Самый простой и самый весенний веночек

Вот я в прошлом году намучилась с пасхальными веночками! Как вспомню что сначала искала ветки, потом размачивала их, скручивала, закрепляла, пыталась украшать и всячески сделать красиво... Вся взмокшая, в царапинах, проволоке, сухой траве, каких-то цветочках



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

Лилия из фоамирана.

Мастер-класс Юлии Балагуровой. В этом мастер-классе я покажу, как сделать лилию из фоамирана своими руками. Фото 1. Что нам понадобится для работы. Фото 2. Маленькая заготовка из картона это лепесток лилии — 2.5 см на 1.5 см. Большая заготовка — листик размер



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

Анекдот

- Товaрищ прaпорщик, a сможете провести урок aстрономии в школе юных aстронaвтов? - Смогу. - И вопросов учеников не боитесь? Они ребятa умные и въедливые. - Нет. После урокa. - Ну что, вопросы были? - Только один. Кaкой-то умник спросил: \"С


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

Причёска "Ракушка" своими руками.

Причёска "Ракушка" своими руками.  Причёска "Ракушка" своими руками.  1. Начинается прическа, как Вы уже поняли с того, что волосы нужно тщательно расчесать. 2. Далее хорошо расчесываем волосы по всей длине по направлению назад. Собираем их в пучок. Классический вариант, когда



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

Вышивка лентами.

Идеи от Suzana Mustafa   Источник http://diariann.blogspot.com/



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

Династии Древнего Египта

Провел большую работу по обновлению генеалогии царских домов Египта. В последний раз я заьросил эту тему более 3-х лет назад. Вот появилось немного свободного времени и обновил эту работу. Это до сих пор черновик - много


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

Мой совет:

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


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

Есть племя, которое вообще не контактирует с цивилизацией

Оказывается, на свете есть племя, которое вообще не контактирует с цивилизацией. Никак. А потому что не хочет. Эти люди живут на острове North Sentinel (Северный Часовой), который относится к Андаманскому архипелагу. Про них практически ничего не



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

Топиарий из вязаных крючком цветочков.

Топиарий из вязаных крючком цветочков. Серединка цветочков сделана из помпонов. Ствол топиария - ветка дерева, горшочек - из коры дерева. Топиарий полностью декорирован мхом или сухой травой



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

МИШКА

http://tamatama.gallery.ru/watch?a=bk4J-fMMQ



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

Как сделать браслеты шамбала

Как сделать браслет шамбала (фото инструкция) Вам понадобится: - бусинки - атласная нить - клейкая лента (скотч, изолента) 1. Приготовьте нить длиной примерно 1,30-1,40 м и сложите ее пополам. 2. Отрежьте еще 2 части атласной нити длиной 50 см и одну



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

КОКОСОВО-ВАНИЛЬНАЯ ПЛИТКА

Состав: 10 гр натертого пчелиного воска50 гр масла какао50 гр масла ши20 гр масла кокоса10 мл масла жожобащепотка ванилина20 капель эфирного масла апельсина и 8 капель мускатного шалфея   1. Расплавьте на водяной бане воск и твердые масла.2.


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

Анекдот

Попал мой друган в другой город. Садится в маршрутку. Тут на остановке заваливается огромнейшая женщина, садится напротив моего товарища и сразу грозно так спрашивает: "по маленькому или по большому?" Друг офигел и молниеносно ответил: "Я


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

Как очистить стиральную машину от накипи?

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


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

СТИЛЬ «БОХО-ШИК»

Стиль «бохо-шик» (от «богемный») - женский стиль, возродившийся в Америке и Великобритании в начале 2000-х годов Стиль «бохо-шик» (от «богемный») - женский стиль, возродившийся в Америке и Великобритании в начале 2000-х годов и сочетающий в себе



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

Одуванчик из ленты. Вариант второй.

Автор: GalinaVenikova Здравствуйте, дорогие соседи Страны Мастеров! Предлагаю второй вариант одуванчиков из атласных лент в технике Цумами Канзаши. С первым вариантом, который из-за «высоты» все-таки больше подходит для корзинок из цветов, можно ознакомиться здесь http://stranamasterov.ru/node/771298. А новые одуванчики



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

Наука

Газообразный водород - самое неплотное вещество на Земле, а жидкий водород - самое плотное.


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

Overclock мозга или Внутренняя виртуализация сознания

Я попробую рассказать еще об одной возможности использовать свой мозг чуточку эффективнее. Одна из слабо задокументированных возможностей, которую мы используем каждый день, но не всегда даже об этом вспоминаем. Все описанное проверялось на мне. Если



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

Простое болеро крючком



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

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