Видео кодеки доклад – Для чего нужны и как работают кодеки, как их установить и запустить, самые популярные пакеты кодеков

Содержание

Что такое кодеки и для чего они нужны | Аудио

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

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

Всё, что нужно знать о кодеках

Кодеком (от английского codec) называют программу, предназначенную для кодирования и декодирования данных мультимедиа (например, аудио- и видеопотоков). Каждый кодек «специализируется» только на одном типе данных. За обработку звуковых записей отвечают аудиокодеки (AAC, AIF, AU, MP3, RA, RAM, WMA, FLAC), с видео работают видеокодеки (DivX, AVI, H.261, H.263, H.264, MPEG, RM, RV, WMV). Над роликами, в которых содержится и звук, и видео, «колдуют» оба этих типа кодеков.

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

Как работают кодеки?

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

Кодеки принимаются за работу в тот самый момент, когда вы нажимаете кнопку записи на своей камере. Прямо во время съемки видеокодек сжимает и кодирует видеодорожку, а аудиокодек работает со звуковой дорожкой. Затем оба потока синхронизируются и сохраняются в одном медиаконтейнере, а если говорить проще – формате. Камеры могут вести запись как в популярных форматах типа AVI и MP4, так и в более экзотических.

Теперь, когда вы перенесли снятый клип на свой компьютер, в дело вступают кодеки, установленные на нем: видеокодек распаковывает изображение, аудиокодек – звуковую дорожку, а проигрыватель выводит эту информацию на экран и в колонки вашего компьютера.

Зачем все эти сложности?

Неужели нельзя обойтись без кодирования? Теоретически – можно, на практике – лучше не стоит. Дело в том, что кодеки выполняют очень важную функцию: они сжимают файлы до размеров, приемлемых для современных устройств.

Видеофайлы, создаваемые камерами в процессе записи, имеют слишком большой размер: пятиминутный ролик, снятый на современный смартфон, в несжатом состоянии может занимать несколько гигабайт памяти! Вспомните, сколько места есть на дисках вашего компьютера и мобильных устройств, и представьте, сколько несжатых видеороликов вы могли бы на нем хранить – вряд ли эта цифра будет слишком большой.

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

Как же кодеки уменьшают размер файлов?

Сжатие видео и аудио происходит за счет устранения так называемой избыточности данных. Как это происходит? Представьте, что вы в течение 5 минут снимали морской пейзаж – такой, как на картинке:

Допустим, ваша камера снимает со скоростью 30 кадров в секунду. Получается, за 1 секунду записи она сохраняет в своей памяти 30 уникальных изображений. А за 5 минут (300 секунд) она снимет целых 9000 кадров!

Но что может кардинально измениться в этом пейзаже за 1 секунду? Позеленеет небо? Испарится вода?

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

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

Компенсация движения – это всего лишь один из множества методов, применяемых видеокодеками при обработке записей с камер. Свои способы устранения избыточной информации используют и аудиокодеки. В результате работы кодеков из аудио- и видеопотоков удаляется большая часть «лишних» данных. За счет этого и происходит изменение объема закодированного файла.

Какой кодек выбрать?

Существует множество видео- и аудиокодеков, предназначенных для различных целей. Вот краткий список самых популярных кодеков:

— H.264 (MPEG-4)

MPEG-2

H.265 (MPEG-H, HEVC)

Flash

WMV

FLAC

APE

Чтобы вам не пришлось подолгу искать, какой кодек лучше подойдет вам, мы советуем скачать K-Lite Codec Pack – универсальный пакет для Windows, в котором есть все, что понадобится для проигрывания практически любого видео: самые хорошие кодеки для AVI, MKV, MP4 и других форматов.

Перейти на страницу K-Lite Codec Pack

А вдруг кодек сработает неправильно и удалит нужную информацию?
Можно ли обработать видеофайл без потерь?

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

 

Видеокодеки и воспроизведение медиа-файлов на ПК: ликбез • Обучение компьютеру

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

Видеокодеки – что это такое, для чего они предназначены? И как сделать так, чтобы можно было без каких-либо проблем спокойно смотреть видео на компьютере?

Об этом речь и пойдет ниже.

Что такое видеокодеки?

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

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

Зачем необходимо проводить кодировку данных?

Мультимедийные файлы имеют довольно большие размеры, особенно это касается видеофайлов хорошего качества. Да и по сети файлы большого размера передавать неудобно – это большее место, занимаемое на сервере в Интернете, это большее время выкладки и скачивания файлов. Кодеки и призваны решить эту проблему – при кодировании уменьшается исходный размер мультимедийных файлов, при этом исходное качество сохраняется. Таким образом, когда на компьютере не установлены необходимые видеокодеки, медиа-плееры либо отказываются воспроизводить, либо воспроизводят некорректно видеофайлы именно потому, что не в состоянии найти программу, которая бы провела раскодировку.

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

Какая разница между видеокодеком и обычным программным плеером?

Видеокодеки являются лишь вспомогательными программами, и сами по себе они не воспроизводят медиафайлы. Как и в случае, к примеру, с системными драйверами, которые только помогают операционной системе корректно работать с аппаратными составляющими компьютера или разными внешними устройствами, видеокодеки играют аналогичную роль помощников, благодаря которым как штатный медиа-плеер системы — Windows Media Player, так и медиа-плееры сторонних разработчиков могут воспроизводить видеофайлы различных форматов.

На рынке софта можно выбрать разные медиа-плееры с уже встроенными кодеками – например, KMPlayer или Light Alloy. Выбрав воспроизведение видео именно с их помощью, вы сможете избежать проблем, которые могут возникнуть с некоторыми форматами видео. И как результат, дополнительная установка кодеков по большей части не потребуется. Но стоит заметить, что только по большей части – например, с не особо популярными форматами видеофайлов могут все же возникнуть проблемы при воспроизведении. Так что кодеки лучше установить отдельно заранее.

Какими бывают видеокодеки?

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

Видеокодеки и воспроизведение медиа-файлов на ПК: ликбез

Рядом с названием форматов, в которые видео можно конвертировать посредством программы ВидеоМАСТЕР, в скобках виднеются названия видеокодеков — MPEG-4, H.264, DivX и т.п. И это только популярные форматы и кодеки, все их не имеет смысла перечислять. По сути, вряд ли и существует сейчас настолько функциональный конвертер, который бы охватывал все существующие медиа-форматы данных на базе всех возможных кодеков.

В дополнение к проблеме огромного количества различных кодеков, а вместе с тем и их несовместимости, со временем добавилась еще одна головная боль – это несовместимость самих версий кодеков. Например, если медиа-плеер читает видео-формат AVI, закодированной одним кодеком (например, DivX), это не значит, что он прочитает формат AVI на базе другого кодека (например, H.264). То же самое касается и различных версий кодеков – например, H.263 и H.264.

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

К примеру, скачанный в Интернете фильм в том формате, который такой медиа-плеер не воспроизводит, придется конвертировать в тот, который он поддерживает.

Как и где найти видеокодеки?

Но вернемся к воспроизведению видео на компьютере. Чтобы определить, какие из видеокодеков установлены на вашем компьютере в данный момент, и какие из них желательно установить, существует специальный тип софта. Такие программы проводят анализ содержимого компьютера и выдают отчет об имеющихся кодеках. К примеру, программа CodecInstaller. Она не только выдает отчет о наличии кодеков по результатам своего сканирования, но также предлагает прямо из своего окна скачать в Интернете необходимые кодеки.

Видеокодеки и воспроизведение медиа-файлов на ПК: ликбез

Правда, этот способ подойдет скорее для энтузиастов, не представляющих свою жизнь без изучения и тестирования различного софта. Поскольку для установки на ПК всех необходимых кодеков существует специальный программный пакет — K-Lite Codec Pack. Программа автоматически установит все необходимые кодеки, одним махов решив проблему с воспроизведением мультимедийных файлов. Более того, это бесплатное программное обеспечение, которое предустанавливается во многие кустарные сборки Windows. В любом случае, со скачиванием K-Lite Codec Pack вряд ли у вас возникнут проблемы.

Просто зайдите на официальный сайт разработчика и загрузите файл-установщик.

Видеокодеки и воспроизведение медиа-файлов на ПК: ликбез

У K-Lite Codec Pack есть несколько версий, которые различаются набором кодеков. Если вы не используете компьютер профессионально для работы с мультимедийным контентом, стандартного пакета программы – вам более чем достаточно.

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

Как работает видеокодек. Часть 2. Что, для чего, как / Edison corporate blog / Habr

Первая часть: Основы работы с видео и изображениями


Что? Видеокодек — это часть программного/аппаратного обеспечения, сжимающая и/или распаковывающая цифровое видео.

Для чего? Невзирая на определённые ограничения как по пропускной способности так

и по количеству места для хранения данных, рынок требует всё более качественного видео. Припоминаете, как в прошлом посте мы подсчитали необходимый минимум для 30 кадров в секунду, 24 бита на пиксель, с разрешение 480×240? Получили 82,944 Мбит/с без сжатия. Сжатие — это пока единственный способ вообще передавать HD/FullHD/4K на телевизионные экраны и в Интернет. Как это достигается? Сейчас кратко рассмотрим основные методы.



Перевод сделан при поддержке компании EDISON Software.

Мы занимаемся интеграцией систем видеонаблюдения, а также разрабатываем микротомограф.

Кодек vs Контейнер

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

Обычно расширение видеофайла указывает на разновидность контейнера. Например, файл video.mp4, вероятно всего, является контейнером MPEG-4 Part 14, а файл с именем video.mkv — это, скорее всего, матрёшка. Чтобы быть полностью уверенным в кодеке и формате контейнера, можно воспользоваться FFmpeg или MediaInfo.

Немного истории

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

Видеокодек H.261 появился в 1990 году (технически — в 1988) и был создан для работы со скоростью передачи данных 64 Кбит/с. В нём уже использовались такие идеи, как цветовая субдискретизация, макроблоки и т.п. В 1995 году был опубликован стандарт видеокодека H.263, который развивался до 2001 года.

В 2003 году была завершена первая версия H.264/AVC. В том же году компания «TrueMotion» выпустила свой бесплатный видеокодек, сжимающий видео с потерями под названием VP3. В 2008 году Google купил эту компанию, выпустив VP8 в том же году. В декабре 2012 года Google выпустил VP9, ​​и он поддерживается примерно на ¾ рынка браузеров (включая мобильные устройства).

AV1 — это новый бесплатный видеокодек с открытым исходным кодом, разработанный Альянсом за открытые медиа (AOMedia), в состав которого входят известнейшие компании, как-то: Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel и Cisco. Первая версия кодека 0.1.0 была опубликована 7 апреля 2016 года.

Рождение AV1

В начале 2015 года Google работал над VP10, Xiph (который принадлежит Mozilla) работал над Daala, а Cisco сделала свой бесплатный видеокодек под названием Thor.

Затем MPEG LA сначала объявила годовые лимиты для HEVC (H.265) и плату, в 8 раз выше, чем за H.264, но вскоре они снова изменили правила:

без годового лимита,

плата за контент (0,5% от выручки) и

плата за единицу продукции примерно в 10 раз выше, чем за H.264.

Альянс за открытые медиа был создан компаниями из разных сфер: производителями оборудования (Intel, AMD, ARM, Nvidia, Cisco), поставщиками контента (Google, Netflix, Amazon), создателями браузеров (Google, Mozilla) и другими.

У компаний была общая цель — видеокодек без лицензионных отчислений. Затем появляется AV1 с гораздо более простой патентной лицензией. Тимоти Б. Терриберри сделал сногсшибательную презентацию, ставшей источником текущей концепции AV1 и её модели лицензии.

Вы будете удивлены, узнав, что можно анализировать кодек AV1 через браузер (заинтересовавшиеся могут перейти по адресу aomanalyzer.org).

Универсальный кодек

Разберём основные механизмы, лежащие в основе универсального видеокодека. Большинство из этих концепций полезны и используются в современных кодеках, таких как VP9, AV1 и HEVC. Предупреждаю, что многие объясняемые вещи будут упрощены. Иногда будут использоваться реальные примеры (как в случае с H.264) для демонстрации технологий.

1-й шаг — разбиение изображения

Первым шагом является разделение кадра на несколько разделов, подразделов и далее.

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

Обычно кодеки организуют эти разделы в секции (или фрагменты), макроблоки (или блоки дерева кодирования) и множество подразделов. Максимальный размер этих разделов варьируется, HEVC устанавливает 64×64, в то время как AVC использует 16×16, а подразделы могут дробиться до размеров 4×4.

Припоминаете разновидности кадров из прошлой статьи?! Это же можно применить и к блокам, так что, у нас могут быть I-фрагмент, B-блок, P-макроблок и т.п.

Для желающих попрактиковаться — посмотрите как изображение разобъётся на разделы и подразделы. Для этого можно воспользоваться уже упоминаемой в прошлой статье Intel Video Pro Analyzer (тот, что платный, но с бесплатный пробной версией, имеющей ограничение на первые 10 кадров). Здесь проанализированы разделы VP9:

2-й шаг — прогнозирование

Как только у нас появились разделы, мы можем составлять астрологические прогнозы по ним. Для INTER-прогнозирования необходимо передать векторы движения и остаток, а для INTRA-прогнозирования передаётся направление прогноза и остаток.

3-й шаг — преобразование

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

Хотя есть и другие методы, рассмотрим более подробно дискретное косинусное преобразование (DCT — от discrete cosine transform). Основные функции DCT:

  • Преобразует блоки пикселей в одинаковые по размеру блоки частотных коэффициентов.
  • Уплотняет мощность, помогая устранять пространственную избыточность.
  • Обеспечивает обратимость.

2 февраля 2017 года Синттра Р.Дж. (Cintra, R.J.) и Байер Ф.М. (Bayer F.M.) опубликовали статью про DCT-подобное преобразование для сжатия изображений, требующее только 14 дополнений.

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

Давайте возьмем такой блок пикселей 8×8:

Этот блок рендерится в следующее изображение 8 на 8 пискелей:

Применим DCT к этому блоку пикселей и получаем блок коэффициентов размером 8×8:

И если отрендерим этот блок коэффициентов, получим такое изображение:

Как видим, это не похоже на исходное изображение. Можно заметить, что первый коэффициент сильно отличается от всех остальных. Этот первый коэффициент известен как DC-коэффициент, представляющий все выборки во входном массиве, нечто похожее на среднее значение.

У этого блока коэффициентов есть интересное свойство: он отделяет высокочастотные компоненты от низкочастотных.

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

Частота означает, насколько быстро меняется сигнал.

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

Сначала конвертируем его в частотную область.

Далее отбрасываем часть (67%) коэффициентов, в основном нижнюю правую часть.

Наконец, восстанавливаем изображение из этого отброшенного блока коэффициентов (помните, оно должно быть обратимым) и сравниваем с оригиналом.

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

Каждый коэффициент формируется с использованием всех пикселей

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

Вы также можете попытаться визуализировать DCT, взглянув на простое формирование изображения на его основе. Например, вот символ A, формируемый с использованием каждого веса коэффициента:

4-й шаг — квантование

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

Как можно квантовать блок коэффициентов? Одним из самых простых методов будет равномерное квантование, когда берём блок, делим его на одно значение (на 10) и округляем то что получилось.

Можем ли обратить этот блок коэффициентов? Да, можем, умножив на то же значение, на которые делили.

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

5 шаг — энтропийное кодирование

После того, как мы квантовали данные (блоки изображений, фрагменты, кадры), все еще можем сжимать их без потерь. Существует много алгоритмических способов сжатия данных. Мы собираемся кратко познакомиться с некоторыми из них, для более глубокого понимания вы можете прочитать книгу «Разбираемся со сжатием: сжатие данных для современных разработчиков» («Understanding Compression: Data Compression for Modern Developers»).

Кодирование видео с помощью VLC

Предположим, у нас есть поток символов: a, e, r и t. Вероятность (в пределах от 0 до 1) того, как часто встречается каждый символ в потоке, представлена в этой таблице.Мы можем присвоить уникальные двоичные коды (предпочтительно малые) наиболее вероятным, а более крупные коды — менее вероятным.Сжимаем поток, предполагая, что в итоге потратим 8 бит на каждый символ. Без сжатия на символ понадобилось бы 24 бита. Если каждый символ заменять на его код, то получается экономия!

Первый шаг заключается в кодировании символа e, который равен 10, а второй символ — это a, который добавляется (не математическим способом): [10] [0], и, наконец, третий символ t, который делает наш финальный сжатый битовый поток равным [10] [0] [1110] или же 1001110, для чего требуется всего 7 бит (в 3,4 раза меньше места, чем в оригинале).

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

И кодер, и декодер должны иметь доступ к таблице символов со своими бинарными кодами. Поэтому также необходимо отправить во входных данных и таблицу.

Арифметическое кодирование

Предположим, у нас есть поток символов: a, e, r, s и t, и их вероятность представлена этой таблицей.С этой таблицей построим диапазоны, содержащие все возможные символы, отсортированные по наибольшему количеству.

Теперь давайте закодируем поток из трёх символов: eat.

Сначала выбираем первый символ e, который находится в поддиапазоне от 0,3 до 0,6 (не включая). Берём этот поддиапазон и снова делим его в тех же пропорциях, что и ранее, но уже для этого нового диапазона.

Давайте продолжим кодировать наш поток eat. Теперь берём второй символ a, который находится в новом поддиапазоне от 0,3 до 0,39, а затем берём наш последний символ t и, повторяя тот же процесс снова, получаем последний поддиапазон от 0,354 до 0,372.

Нам просто нужно выбрать число в последнем поддиапазоне от 0,354 до 0,372. Давайте выберем 0,36 (но можно выбрать и любое другое число в этом поддиапазоне). Только с этим числом сможем восстановить наш оригинальный поток. Это как если бы мы рисовали линию в пределах диапазонов для кодирования нашего потока.

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

С первым диапазоном замечаем, что наше число соответствует срезу, следовательно, это наш первый символ. Теперь снова разделяем этот поддиапазон, выполняя тот же процесс, что и раньше. Тут можно заметить, что 0,36 соответствует символу a, и после повторения процесса мы пришли к последнему символу t (формируя наш исходный кодированный поток eat).

И для кодера и для декодера должна быть в наличии таблица вероятностей символов, поэтому необходимо во входных данных отправить и её.

Довольно элегантно, не так ли? Кто-то, придумавший это решение, был чертовски умён. Некоторые видеокодеки используют эту технику (или, во всяком случае, предлагают её в качестве опции).

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

6 шаг — формат битового потока

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

Мы поверхностно ознакомимся с битовым потоком H.264. Нашим первым шагом является создание минимального битового потока H.264 (FFmpeg по умолчанию добавляет все параметры кодирования, такие как SEI NAL — чуть дальше узнаем, что это такое). Можем сделать это, используя наш собственный репозиторий и FFmpeg.

./s/ffmpeg -i /files/i/minimal.png -pix_fmt yuv420p /files/v/minimal_yuv420.h364

Данная команда сгенерирует необработанный битовый поток H.264 с одним кадром, разрешением 64×64, с цветовым пространством YUV420. При этом используется в качестве кадра следующее изображение.

Битовый поток H.264

Стандарт AVC (H.264) определяет, что информация будет отправляться в макрокадрах (в понимании сети), называемых NAL (это такой уровень абстракции сети). Основной целью NAL является предоставление «дружественного к сети» представления видео. Этот стандарт должен работать на телевизорах (на основе потоков), в Интернете (на основе пакетов).

Существует маркер синхронизации для определения границ элементов NAL. Каждый маркер синхронизации содержит значение 0x00 0x00 0x01, за исключением самого первого, который равен 0x00 0x00 0x00 0x01. Если запустим hexdump для сгенерированного битового потока H.264, то идентифицируем по крайней мере три паттерна NAL в начале файла.

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

Обычно первым NAL битового потока является SPS. Этот тип NAL отвечает за информирование об общих переменных кодирования, таких как профиль, уровень, разрешение и прочее.

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

Например, первый байт после маркера синхронизации равен 01100111, где первый бит (0) находится в поле forbidden_zero_bit. Следующие 2 бита (11) сообщает нам поле nal_ref_idc, которое указывает, является ли этот NAL ссылочным полем или нет. И остальные 5 бит (00111) сообщает нам поле nal_unit_type, в данном случае это блок SPS (7) NAL.

Второй байт (binary=01100100, hex=0x64, dec=100) в SPS NAL — это поле profile_idc, которое показывает профиль, который использовал кодер. В данном случае использовался ограниченный высокий профиль (т.е. высокий профиль без поддержки двунаправленного B-сегмента).

Если ознакомиться со спецификацией битового потока H.264 для SPS NAL, то обнаружим много значений для имени параметра, категории и описания. Например, давайте посмотрим на поля pic_width_in_mbs_minus_1 и pic_height_in_map_units_minus_1.

Если выполнить некоторые математические операции со значениями этих полей, то получим разрешение. Можно представить 1920 x 1080, используя pic_width_in_mbs_minus_1 со значением 119 ((119 + 1) * macroblock_size = 120 * 16 = 1920). Опять же, экономя место, вместо кодирования 1920 сделали это со 119.

Если продолжить проверку нашего созданного видео в двоичном виде (например: xxd -b -c 11 v/minimal_yuv420.h364), то можно перейти к последнему NAL, который является самим кадром.

Здесь видим его первые 6 байтовых значений: 01100101 10001000 10000100 00000000 00100001 11111111. Поскольку известно, что первый байт указывает на тип NAL, в данном случае (00101) это IDR фрагмент (5), и тогда получится дополнительно исследовать его:

Используя информацию спецификации, получится декодировать тип фрагмента (slice_type) и номер кадра (frame_num) среди других важных полей.

Чтобы получить значения некоторых полей (ue(v), me(v), se(v) или te(v)), нам нужно декодировать фрагмент, используя специальный декодер, основанный на экспоненциальном коде Голомба. Этот метод очень эффективен для кодирования значений переменных, особенно, когда если есть много значений по умолчанию.

Значения slice_type и frame_num этого видео равны 7 (I-фрагмент) и 0 (первый кадр).

Битовый поток можно рассматривать как протокол. Если желаете узнать больше о битовом потоке, стоит обратиться к спецификации ITU H.264. Вот макросхема, показывающая, где находятся данные изображения (YUV в сжатом виде).

Можно исследовать и другие битовые потоки, такие как VP9, H.265 (HEVC) или даже наш новый лучший битовый поток AV1. Все ли они похожи? Нет, но разобравшись хотя бы с одним — гораздо проще понять остальные.

Хотите попрактиковаться? Исследуйте поток битов H.264


Можно сгенерировать однокадровое видео и использовать MediaInfo для исследования потока битов H.264. Фактически, ничто не мешает даже поглядеть исходный код, который анализирует поток битов H.264 (AVC).

Для практики можно использовать Intel Video Pro Analyzer (я уже вроде говорил, что программа платная, но есть бесплатная пробная версия, с ограничением на 10 кадров?).

Обзор

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

Ранее рассчитали, что потребуется 139 Гб дискового пространства для хранения видеофайла длительностью один час при качестве 720p и 30 fps. Если использовать методы, которые разобрали в этой статье (межкадровые и внутренние прогнозы, преобразование, квантование, энтропийное кодирование и т.п.), то можно достичь (исходя из того, что тратим 0,031 бит на пиксель), видео вполне удовлетворительного качества, занимающее всего 367,82 Мб, а не 139 Гб памяти.

Как H.265 достигает лучшей степени сжатия, чем H.264?

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

Если сравнивать AVC и HEVC, стоит не забывать, что это почти всегда выбор между большей нагрузкой на CPU и степенью сжатия.

HEVC имеет больше вариантов разделов (и подразделов), чем AVC, больше направлений внутреннего прогнозирования, улучшенное энтропийное кодирование и многое другое. Все эти улучшения сделали H.265 способным сжимать на 50% больше, чем H.264.


Первая часть: Основы работы с видео и изображениями

Видеокодек — это… Что такое Видеокодек?

Видеокодек — программа/алгоритм сжатия (то есть уменьшения размера) видеоданных (видеофайла, видеопотока) и восстановления сжатых данных. Кодек — файл-формула, которая определяет, каким образом можно «упаковать» видеоконтент и, соответственно, проиграть видео. Также возможно кодирование кроме видео и аудиоинформации, добавления субтитров, векторных эффектов и т. п.

Принцип работы простейшего кодека

Сперва рассмотрим кодирование статического изображения (или, одиночного кадра). Каждый кодируемый кадр видеопотока состоит из точек (пикселей), образующих матрицу (растр). Кодек может отслеживать похожие массивы точек с одинаковыми атрибутами (например, синий цвет фона на изображении неба) и, вместо того, чтобы запоминать информацию о каждой точке (яркость и цвет) в следующих кадрах отдельно, записать лишь первую (ключевую) точку и счётчик с количеством повторений этой точки до момента изменения цвета данной точки. То есть вместо описания, например, 1000 точек, может оказаться достаточно описать всего 1 точку + счётчик повторения. Качеством здесь можно управлять, задавая величину, такую, что если отличие между точками меньше, то они считаются одинаковыми. Это самый простой из методов сжатия.

В JPEG для кадра производится поблочное дискретное косинусное преобразование с последующим кодированием с использованием алгоритма Хаффмана или арифметического кодирования.

Дополнительные сведения: LZ77
Дополнительные сведения: JPEG

Для построения динамического изображения (видеоряда) используются различные типы кадров — кроме I-кадров (которые также называются ключевыми (англ. keyframes) или «опорными») которые могут содержать только независимо сжатые макроблоки, добавленные P-кадры («разностные» кадры) могут содержать как независимо сжатые макроблоки, так и макроблоки со ссылкой на другой кадр.

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

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

См. также

Для чего нужны и как работают кодеки, как их установить и запустить, самые популярные пакеты кодеков

Многие пользователи компьютеров сталкивались с проблемами при просмотре видео или прослушивании аудио в разных плеерах. То есть звук и нет видео, то просто возникают помехи. Зачастую дело не в том, что файл попался битый, а в том, что у вас недостаёт подходящих кодеков. Так что же такое кодеки, как они работают и можно ли без них обойтись? Рассказываем!

Что такое кодеки и зачем они нужны

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

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

Зачем вообще нужны такие сложности? Кодирование, шифрование, воспроизведение сжатого формата. Конечно, посмотреть видео можно в оригинальном формате, без сжатия, в отличном качестве. Можно. А теперь вспомните, как вы записывали короткое видео на свой смартфон. Сколько оно в итоге заняло внутренней памяти? Много. Для всего контента в оригинальных форматах у вас банально не хватит места на жёстком диске. Поэтому контент сжимается, шифруется и транслируется в плеер уже из этого состояния. Без кодеков, как ни крути, не обойтись.

Как работают кодеки

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

  • Запускается запись, а с ней и установленные на камере кодеки. Начинается кодирование в режиме реального времени.
  • Если одновременно пишутся и видео, и аудио, кодеки на разные форматы также работают одновременно.
  • После записи выполняются синхронизация и сведение в сжатый формат.
  • После переноса файла на жёсткий диск, с ним работают кодеки, установленные на компьютере.
  • Кодеки распаковывают зашифрованную информацию, а затем выводят сведённые потоки видео и аудио на проигрыватель медиа-файлов.

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

Установка и запуск кодеков

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

Установка кодеков

Установка кодеков

Обычно установкой или скачиванием более актуальной версии пакета кодеков пользователи занимаются, когда припрёт: если начинает капризничать какой-то из файлов, запускающийся у других пользователей нормально. Установка пакетов предельно простая, инсталлятор на компьютере всё делает автоматически. Но для корректной работы рекомендуется совершить перезагрузку после установки. И в целом периодически проверять наличие обновлений кодеков.

Для чего нужны видеокодеки. Установка видео кодеков.

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

 

Что такое видеокодеки

Если говорить простым и понятным языком, это такие специальные программы, которые перед тем как воспроизвести фильм распаковывают его. Зачем же его распаковывать? Все видео файлы имеют сжатие. Поэтому перед тем как будет показан фильм, должно произойти его декодирование. Именно для этой цели и нужны видеокодеки. С их помощью происходит поддержка компьютеров и преобразование сжатого видео в поток, который потом распознает и показывает любой плеер. Заказать такую программу можно на любом сайте в разделе компьютерное обслуживание в Москве и выбрать среди имеющихся видеокодеков нужный. Некоторые популярные видео кодеки:

  • DivX
  • AVI
  • Cinepak
  • H.261
  • H.263
  • H.264
  • Indeo
  • MPEG-1
  • MPEG-2
  • MPEG-4

Проводить их установку лучше не по отдельности, поскольку это накладно, а целым сборником кодеков, при этом пользователь значительно экономит время. Вполне достаточно выполнить установку одного приложения. На сегодняшний день наилучшим сборником кодеков считается K-Lite Mega Codec Pack. Его можно скачать бесплатно на одном из сайтов поддержка компьютеров или же посетить компьютерный магазин вашего города.

 

Установка видео кодеков

1 Скачать K-Lite Mega Codec Pack, также подойдет другой аналогичный сборник кодеков.

2 Установить его.

3 Перезапустить видео файл. Стоит обратить внимание на то, что некоторые плееры могут определить кодек только после того как произошла перезагрузка. Поэтому желательно ее провести. Помимо этого после того, как вы установили пакет K-Lite Mega Codec Pack, все видео файлы будут постоянно открываться по умолчанию с помощью плеера Media Classic Homecinema.

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

Уличная магия сравнения кодеков. Раскрываем секреты / Habr

В этом году исполняется юбилей — 16 лет, как был запущен сайт compression.ru, на котором автор и сотоварищи организуют сравнения видеокодеков и кодеров изображений. За это время были проведены десятки сравнений с отчетами от 23 до 550+ страниц, количество графиков в последнем сравнении перевалило за 7000, а количество разных феерических случаев за это время окончательно превысило все разумные пределы. Поскольку следующая круглая дата (32 года) наступит еще нескоро, есть желание рассказать в честь юбилея малую толику феерического.

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

При этом тема сжатия весьма популярна. В сериале «‎Кремниевая долина»‎ стартап главного героя разработал гениальный алгоритм, который в последней серии первого сезона показал невероятное сжатие 3D видео и в итоге теперь миллионы стартаперов (и инвесторов) мира знают, что главное — это чтобы коэффициент Вайсмана был побольше и ещё гения надо найти, а остальное — фигня-вопрос. Чудо будет! Это естественным образом увеличивает ожидание чудес и, конечно (КОНЕЧНО!) эти чудеса радостно демонстрируются компаниями! В том числе с использованием последних достижений уличной магии.

DISCLAIMER: Любые совпадения имен и названий компаний ниже с реальными именами и названиями абсолютно случайны.

Усаживайтесь поудобнее! Обещаем, что к концу рассказа вы сможете показывать подобные фокусы сами, как, впрочем, и раскрывать многие из них. Поехали!

Level 1, фокусы для начинающих

Начнем с самого простого, ибо, как ни странно, эти методы вполне в современной (не сериальной, а настоящей!) Кремниевой долине прокатывают.

Итак, почтеннейшая публика, фокусы с демонстрацией сверхсильного сжатия начинаются!

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

Сказано — сделано!

Компания заявляет на 30% лучшее сжатие (все совпадения случайны!). А картинки выглядят совершенно одинаково! Даже профессионально наметанный взгляд не находит различий. Возникает желание посмотреть детальнее. Лезем в код страницы и видим, что слайдер для первой и второй картинки берет данные из одного файла! Получаем преимущества сразу по нескольким параметрам — во-первых, идеально демонстрируется лучший результат, во-вторых, не отвлекали инженера от работы, и, наконец, это место страницы сайта грузится вдвое быстрее. Сплошной profit!!!

Случай, не поверите, реальный. Теперь вы знаете, куда стоит посмотреть!

В другом месте — тоже слайдер и опять замечательный результат. Заглядываем в код слайдера — грузятся разные файлы. Наученные горьким опытом скачиваем их — они не просто до байта одного размера, они совпадают побитно! В общем — все плюсы предыдущего способа, но фокус раскрывается чуть сложнее, правда за счет замедления загрузки страницы (за все приходится чем-то платить…). И, главное, не нужно привлекать дорогих специалистов в сжатии.

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

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

Вспоминается встреча с русским стартапом 6 лет назад. Их директор прямо с порога сказал: «‎Вы должны нам все сделать на совесть. У нас инвесторы из «‎Северстали»‎, и, если что, к вам выедут спортивные бритые ребята с паяльниками.»‎ Как вы понимаете, в таких суровых условиях качество исследовательской работы волшебным образом возрастает, а количество фокусов разного уровня — падает… При работе с такими кейсами у нас, на родине слонов, возникает непреодолимое чувство жалости к западным инвесторам. Правда не все наши инвесторы такие чисто конкретные, и свои фокусники и в наших палестинах тоже находятся. Причем регулярно. Но про это в другой раз…

Level 7, резонансный

Эта история не про видеокодек, а про сжатие картинок, но в ней многое было по всем законам жанра «‎честных фокусов»‎.

Как-то довольно известная компания М решила, что им к своим форматам Windows Media Video (WMV) и Windows Media Audio (WMA) нужно добавить Windows Media Photo (WMP). Чисто для комплекта, как вы понимаете.

Молодой человек на галёрке! Ну не надо так громко кричать, не вас одного осенило! Культурные люди (посмотрите на первый ряд) максимум — понимающе усмехнулись в усы…

Сказано — сделано!

Далее внимательно следим за руками:

Т.е. у WMP больше деталей, чем у JPEG и JPEG 2000 при том же уровне сжатия (мягко уравниваются JPEG и JPEG 2000 и задается уровень 24 раза), а в следующем абзаце:

Т.е. обычно только в 6 раз сжимают, а было 24. Вау, пахнет тремя разами! И вообще мы лучше в 2 раза точно. СМИ понесли благую весть в массы (некоторые написали, что в 2 раза лучше JPEG 2000), даже на Хабре повторили эту новость.

Чуть позднее появился график из этой презентации:

Как интерпретировать такие графики?
По вертикали обычно идет качество (какая-то из метрик в зависимости от моды в этот момент времени), по горизонтали — так или иначе — размер. Обычно с увеличением размера качество растет (хотя на практике всякое бывает). По линии одинакового качества (красная горизонтальная) можно прикинуть, что «‎пурпурный»‎ кодек примерно в 2 раза проигрывает по размеру «‎синему»‎ при том же качестве на этом диапазоне битрейтов.

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

У нас к тому моменту как раз было годичной давности сравнение 9 реализаций JPEG 2000

Да-да-да! Как не все йогурты одинаково полезны, так и не все реализации стандарта жмут одинаково хорошо. Стандарт оговаривает только битовый поток, положить в который данные (и, кстати, вынуть!) можно сильно по-разному, это порождает отдельный рынок кодеков со своей жесткой конкуренцией по доброму десятку параметров. Простой пипл этого, как правило, не знает, что позволяет безнаказанно ездить ему по ушам практически на бульдозере («‎Наш видеорегистратор поддерживает новейший H.265/HEVC, больше его ни у кого нет!»‎). И никто (никто!) КРАЙНЕ вероятной подставы не замечает.

Мы радостно вставили в предыдущий отчет 3 линии для WMP. Получилось как-то так:

Видно, что линии реализаций JPEG 2000 идут довольно кучно и у жирной синей (лучшая реализация WMP) результаты где-то посередине, т.е. ПРОИГРЫВАЕТ JPEG 2000. Если взять JASPER за ноль и все по вертикали относительно него показать, то видно, что WMP с худшим параметром проигрывает почти всем, кроме двух последних (одна из них KDU, запомним это), а с лучшим — лежит где-то по центру, проигрывая многим реализациям:

Поскольку сравнение было выложено публично и наделало шуму в узких кругах, то разработчик даже ответил на него в официальном блоге. Заметка была вежливая: похвалили, покритиковали, а дальше, если продраться сквозь текст, человек чистосердечно признался, что они использовали самую худшую реализацию JPEG 2000 нашего сравнения (опубликованного за полгода до того) в своем сравнении, правда «‎совершенно случайно»‎. Мы, конечно, им поверим. Компания уважаемая и все такое.

Дальше название технологии было изменено с WMP на HD Photo, впрочем в сети остался такой вердикт:


В качестве вишенки на торт. Наши коллеги пошли дальше: взяли больше картинок и показали, что HD Photo проигрывает не только JPEG 2000, но и хорошей реализации JPEG (в 7 случаях из 14). И проигрывает конкретно. Есть основания полагать, что они подбирали картинки, но они откровенно закопали HDPhoto, ибо кому нужен формат, который в половине случаев проигрывает древнему JPEG — непонятно:

Итого, секреты этого фокуса:

  • Берем худшую реализацию основного конкурента, сравниваем с ней.
  • Создаем рекламную шумиху (в стиле «‎мы всех сильно обогнали»‎).
  • Когда шумиха отходит на второй план, делаем релиз и надеемся, что никто не проверит, что там было на самом деле.

Дети! Никогда так не делайте и не обманывайте других! Ваша компания может потерять миллионы долларов и доверие специалистов.

Level 10, свежий! С нейросетями!

Вообще подобных случаев — очень много. Даже в России я сталкиваюсь с подобными ситуациями примерно пару раз в год (к нам, как к хозяевам compression.ru, информация стекается). На западе разводят лохов инвесторов примерно ежемесячно. А сейчас еще и Китай к этому развлечению подключился. Мощность компьютеров растет, сложность и возможности алгоритмов — тоже. Разбираться в этом все сложнее. Как следствие — бурное веселье продолжается!

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

Сказано — сделано!

В ноябре прошлого года очередная благая весть с подачи самого «Уолл Стрит Джорнал» облетела мир. Создан видеокодек на основе машинного обучения, который всех порвал! Вот пруф:

Вообще я лично крайне скептически воспринимаю все новости с упоминанием нейросетей. И вам советую (ОСОБЕННО, если вы инвестор). Нейросети устроены таким образом, что грамотно подбирая обучающую выборку под тестовую можно показать любой (для непонятливых — ЛЮБОЙ!) желаемый результат. Нейросети — идеальный инструмент для постановки на поток маркетинговых чудес. Одно чудеснее другого!

В общем график есть, картинки есть. Согласитесь — убедительно. Специально для скептиков господа привели еще несколько графиков на известных тестовых наборах:


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

Вас в них ничего не смущает?

Ответ

Из них следует, что за десять лет с принятия стандарта H.264 до принятия H.265 особого развития кодеков не происходило! Эти тупые исследователи 10 лет топтались на месте и делали более медленные кодеки, которые сжимают так же!!! Разница — 20% максимум, а то и меньше!!! 8-\

Они даже под это подводят базу, типа классические кодеки уперлись в предел и уже особо не развиваются (и тут на сцену выходят они, все в белом). И вы знаете, такая наглая ложь прекрасно работает! Причем ладно «The Wall Street Journal» — они (хотелось бы верить) только в финансах разбираются, ладно «MIT Technology Review» — эти джентльмены джентльменам Кремниевой долины верят на слово, но как некритически воспринял новость такой уважаемый ресурс, как Хабр — ума не приложу! Чего уж говорить про массово перепечатавших новость …

В реальности картина развития кодеков, к счастью, заметно отличается. Во-первых, на графике ниже, построенном нами на том же наборе видео xiph, можно увидеть, что H.265 на 25−31% лучше, чем H.264. Т.е. 10 лет развития кодеков таки не прошли даром! (Уфф, прямо от сердца отлегло…) Во-вторых, свежий AV1 показывает практически двукратное улучшение по сравнению с H.264, и ступенька его преимущества, прямо скажем, весьма заметна:

Соответственно на глаз видно, что если наложить график AV1 на 45% левее H.264 на графике авторов — он покроет новый кодек как… [вырезано цензурой]. Хорошо покроет, короче. Потому с ним и «‎забыли»‎ сравниться. Реальный расклад выглядит как-то так (сильно менее кучно, согласитесь):

Чтобы было понятно — у кодеков есть стандартные пресеты, которые позволяют варьировать скорость в значительных пределах (часто десятки раз), но при этом достигать большего сжатия при том же качестве (часто больше 2 раз). У x265 (очень неплохой open-source реализации стандарта HEVC) они называются: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo. Если взять medium за 1, то по скорости и размеру файла при том же качестве они для конкретного файла могут располагаться, например, как на графике ниже. Можно говорить, что относительно medium можно сделать файл на 40% больше или меньше, варьируя скорость в 10 раз:
Заметим, что для некоторых видео стандартные опции не обязательно идут монотонно (в данном случае по качеству). Также иногда «‎нестандартные»‎ опции могут дать большой выигрыш по размеру, в частности на примере выше потеряв 20% по скорости по сравнению с medium можно наиграть 30% по размеру — практически как при переходе на стандарт следующего уровня, но при прежней невысокой сложности декодера. Но это уже более сложный level, о нем в другой раз.

Как легко заметить выше, господа взяли для сравнения «slower». Хорошо, что не «veryfast», ведь могли бы и его! ) И не важно, что у них у самих кодек феерически медленный. Люди в массе своей, глядя на график, не вспоминают о том, что скорость работы кодека может на пару порядков отличаться в зависимости от параметров. Поэтому такой прием вполне прокатывает. Хотя на нашем графике выше («Bitrate/quality…») их пачка линий была в районе красной (которая самая плохая). Заодно оправдывая топтание на месте в развитии кодеков. Ага-ага!

Есть и более тонкие подтасовки, например, господа пишут: «To remove B-frames, we use H.264/5 with the bframes=0 option, VP9 with -auto-alt-ref 0 -lag-in-frames 0, and use the HM encoder lowdelay P main.cfg profile.» То есть они не смогли побить обычные кодеки в честном соревновании и выбрали low-latency режим с низкой задержкой, который используется обычно для реального времени, например, для видеоконференций. Результаты кодека в нем хуже, естественно. При этом их декодер (про энкодер промолчим) работает 2 секунды на кадр, то есть ни о каком low-latency даже близко говорить нельзя. Зато еще несколько процентов наиграли.

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

Понятно, что, чтобы фокус выглядел правдоподобно, нужны еще дополнительные штрихи, которые придают реализма. Например, эти господа опубликовали статью на https://arxiv.org/abs/1811.06981. Сегодня развитие алгоритмов идет настолько быстро, что ждать, пока выйдет статья в журнале становится нестерпимо, поэтому многие сильные авторы публикуют результаты сначала на arxiv.org. Для уличных магов этот сайт удобен тем, что там можно разместить абсолютно любой материал — в отличие от рецензируемых журналов и конференций никто не задаст неприятных вопросов и не зарубит публикацию (нет kill reviewing серьезных мест). А про то, что, например, на 1 апреля на arxiv.org принято публиковать разного рода пародии на научные статьи, в том числе высмеивая его как место публикаций, широкая публика не знает, поэтому для широкой публики публикация там выглядит типа даже солидно.

Идем дальше. Статья на хабре про них называлась «‎Первый видеокодек на машинном обучении кардинально превзошел все существующие кодеки, в том числе H.265 и VP9»‎. Очередной прикол заключается в том, что машинное обучение в сжатии не только активно исследуется, чему уже посвящаются отдельные треки конференций (то есть статей много), но и активно используется, например, в AV1 (специально привожу гугловый запрос). Но, если бы они честно сказали: «‎Мы выпустили второй кодек с использованием машинного обучения, при этом проиграв первому и по скорости, и по сжатию»‎, то Wall Street Journal мог про них и не написать… И MIT TechReview не написал бы… И даже Хабр… Очевидно, не вынеся последнего, в компании чуть-чуть поправили подачу. При этом особенностью современного интернета является то, что люди не проверяют информацию, что позволяет спокойно провозглашать себя первыми много кому (начиная с известных компаний). Наглость, как известно, города берет! А фактчекинг не моден.

— Загугли!

— Это как это?

[пример запроса дан выше)))]

И еще про ML/DL. В далекие-далекие времена, когда дискеты были большими, а винчестеры маленькими, одним из приемов «‎уличной магии для архиваторов»‎ было сохранить часть сжимаемого файла куда-нибудь подальше в директорию со временными файлами и таким образом показать рекорд. С тех пор времена изменились. Винчестеры — выросли, дискеты совсем пропали, а данные стало модно прятать вглубь нескольких сотен мегабайт коэффициентов сетки. Можно сохранить «‎авторский знак»‎ в сетке, можно — пасхалку, а можно фейковый рекорд сжатия поставить. Глубокие нейросети — однозначно сила, короче!

Резюмируя данный путь к успеху:

  • Игнорируем современного лидера так, будто его вообще нет.
  • Аккуратно формулируем все так, чтобы читалось будто мы первые использовали какую-нибудь новую технологию (и даже если первый это сделал лидер — никто проверять не будет).
  • У стандартов 5− и 15−летней давности откручиваем ручки так, чтобы они работали хуже нас.
  • Побольше наглости — обосновываем то, что они легли кучно позади нас тем, что они уперлись в предел и уже не развиваются.
  • Публикуемся в «The Wall Street Journal» и на Хабре…

И… (барабанная дробь!)… вам дают еще несколько миллионов долларов! Или не дают… Я бы не давал… Инвесторы! Не спать! А то потом опять будете на воду дуть…

А теперь мастер-класс!

Как я и обещал выше, к концу этого текста вы сможете легко блистать на подмостках условного pikabu.

Сейчас, о почтеннейшая публика, я покажу вам фокус, позволяющий сравнивать, что угодно с чем угодно с любым заранее заданным результатом. Т.е. если надо, чтобы кодек А был лучше кодека Б — значит покажем это, если нужно, чтобы Б был лучше А, хорошо, можем показать и это. Исполним любой каприз отдела маркетинга за ваши деньги совершенно бесплатно!

Давайте сами проверим, как эти самые кодеки жмут. Как говорится — не верь никому, проверь сам. А то, может, и правда эти стандарты не развиваются и нас просто дурят, заставляя зря платить заработанные непосильным трудом деньги непонятно за что?

Возьмем «‎Аватар»‎ в формате 480p24 и сожмем его кодеком x264 c настройками «-preset superfast -x264-params «nal-hrd=cbr» -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M» и кодеком xvid с настройками «-preset superfast -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M» (две очень неплохие open-source реализации стандартов H.264 и MPEG-4). Почему взяты эти кодеки и настройки будет объяснено позднее.

У нас получились два файла почти одного размера:

avatar_x264_cbr1M_superfast.mkv — 1402 MB

avatar_xvid_cbr1M_superfast.mkv — 1401 MB

А теперь, дамы и господа! Внимательно следите за руками!!!

Смотрим, вот новый стандарт и старый:

Смотрим другой кадр:

Без комментариев! А если быстрое движение?

Согласитесь! Прогресс явный и неумолимый! Все развивается и становится все лучше и лучше! А жизнь — краше и веселее!

Хотя…

Боже, что это??? Новый стандарт совсем слил…

А-а-а-а! Люди! Знайте! Корпорации вас обманывают!!! Кодеки уже давно не развиваются, но вам сообщают что все идет хорошо!

Вы видите? Все, чему они научились за 10 лет — это размывать блочность! Причем делают это просто отвратительно! Стало хуже, чем было! Вас водят за нос все эти годы!!!!!!!11

А теперь разберемся, как это сделано.

На самом деле полный кадр выглядит так:


Когда кодек работает, особенно в режиме постоянного битрейта, качество кадров достаточно сильно колеблется. Вот начало фильма, например — качество по классической метрике PSNR (сомнений кто лучше, кто хуже, кстати, нет, видно что зеленый xvid проигрывает в среднем):

Картинка кликается

Если вычесть один график из другого (на рисунке ниже, другое место в файле) — то видно, что в целом кодек более старого стандарта будет проигрывать, однако местами он может вполне уходить на +5 dB (PSNR удобна тем, что она обратно логарифмически пропорциональна среднеквадратичному отклонению, за счет чего, обычно, работает правило: на диапазоне средних и низких битрейтов на глаз видна разница в 1.5 dB). И тут же виден кадр, где в другую сторону разница 20 dB:

Картинка кликается

Теперь вы понимаете, почему ваш покорный слуга всегда с искренним умилением смотрит на приведенные в маркетинговых материалах компаний отдельные кадры, как на доказательство более высокого качества на видео (особенно когда нет графиков)… И ведь так до сих пор иногда приводят!

Чтобы отбирать кадры было проще, мы больше 10 лет назад сделали режим сравнения в нашей тулзе MSU VQMT, при котором сравнивались сразу 3 файла — оригинал, кодек-1 и кодек-2 и сразу сохранялись, например, 30 лучших пар кадров в одну или в другую сторону. Главное — взять файл подлиннее!

А MPEG-4 с низким битрейтом был взят, чтобы с блочностью было все нагляднее.

Итого, путь к успеху:

  • Выбираем режим, при котором колебание качества у кодеков максимально (обычно, однопроходный CBR).
  • Уменьшаем разрешение исходника в 2 раза (ибо скорее всего придется увеличивать фрагменты, например выше фрагменты были увеличены в 3 раза)
  • Берем какую-нибудь метрику (PSNR, SSIM, модную в этом сезоне VMAF).
  • Берем в качестве сравнения старый стандарт с блочностью или отключаем внутренний деблокинг у конкурента опциями.
  • И последнее, не забываем взять файл подлиннее: 3 часа фильма — самое оно!

И БИНГО! У вас несколько примеров насколько вы лучше конкурента!

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

Теперь вы знаете, какие вопросы задавать, когда видите сравнение с кадрами в материалах компаний! Может хоть пореже, наконец, они будут встречаться…

Вместо заключения

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

А людей, обычно, интересуют простые ответы. Самый популярный ответ в Ответы@Mail.ru на вопрос ‎«Какой самый лучший видеокодек?»‎ — «K-Lite Mega Codec Pack». И это для массового зрителя действительно самый короткий, понятный и точный ответ. А вы говорите — кодеки, стандарты…

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

Спасибо за внимание, дамы и господа! Всем — технической грамотности!

БлагодарностиХотелось бы сердечно поблагодарить:

  • Лабораторию Компьютерной Графики ВМК МГУ им. М.В.Ломоносова за вклад в развитие компьютерной графики в России и не только,
  • наших коллег из видеогруппы, в том числе Сергея Звездакова, Анастасию Анциферову и Романа Казанцева, чьи примеры использованы выше,
  • персонально Константина Кожемякова, который сделал очень много для того, чтобы эта статья стала лучше и нагляднее,
  • и, наконец, огромное спасибо Сергею Лаврушкину, Егору Склярову, Ивану Молодецких, Евгению Ляпустину, Дмитрию Куликову, Александре Анзиной, Виталию Людвиченко, Михаилу Ерофееву и Георгию Осипову за большое количество дельных замечаний и правок, сделавших этот текст намного лучше!

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *