Что такое профиль кодека
Рассказываем про сущность видеокодеков. Зачем нужны и что с ними делать?
Как определить формат видео и используемый видеокодек?
Вводная часть: профили
Настроек и параметров у H264 такое количество, что сами разработчики для того, чтобы в них не запутаться, решили сделать список профилей — «хороших» конфигураций для разных целей. Стандартных профилей определили много; дополнительно, устанавливая собственные параметры кодирования, вы, фактически, создаёте собственный профиль, запутывая всех окончательно. Так что, к сожалению, получилось как всегда.
Изначально профили создавались для определения, будет ли проигрываться итоговое видео на нужном типе устройств, однако сейчас какого-то однозначного разделения проигрывателей по типам устройств и профилям нет.
На практике я бы выделил, по уровню ресурсоёмкости декодирования, три группы параметров:
Теперь к отдельным параметрам.
В Windows
Воспроизведите файл в проигрывателе, затем щелкните на него в библиотеке правой кнопкой мыши и выберите пункт "Свойства". В открывшейся вкладке вам нужны пункт "Видеокодек".
В чем суть кодека?
Когда мы снимаем видео, то оно в своем исходном виде прилично весит.
Представьте записываете вы 3-х минутный видос, а он весит 11 гигабайт.
В таких случаях нужен отдельный чемоданчик с картами памяти, иначе материал попросту не поместится.
Чтобы не таскаться с таким чемоданом и все файлы вмещались на карточку — нужен кодек.
Он сжимает данные файла для хранения или отправки, а затем разжимает их для воспроизведения или редактирования. По сути, это компьютерный код, который активируется каждый раз, когда запускается файл.
Но тут не всё так прекрасно. Из-за того, что видео сжимается, из него пропадает часть данных.
Это не так критично, как может показаться. В основном пропадают незначительные, идентичные кадры, записанные камерой.
А если происходят какие-то изменения в снимаемом материале, то кодек их плавно накладывает на предыдущие кадры.
Цель таких кодеков с потерей данных — уменьшить размер файла.
Есть кодеки без потери данных. Их цель улучшить качество медиа файла, одновременно с этим не увеличить его размер.
3. Монтажные кодеки.
Для производства и обработки видео. Задача кодека - освободить ресурсы компьютера для более эффективной работы.
Вот несколько для примера : DnxHD; Apple ProRes; CineForm.
Кстати, говоря о монтаже. Нужно учитывать кодек видео, которое вы собираетесь монтировать, особенно если оно большое.
Видео будет тормозиться, рендер станет дольше, а эффекты вряд ли вы вообще сможете применить. Но если это маленький проект, то вполне возможно использовать какой-нибудь не монтажный кодек.
Я рендерил видео в After Effects CS5, и когда я форматировал его, я выбрал кодек H.264, и в этом формате у него был профиль Baseline, Main и High.
Поэтому я провел небольшой тест - рендеринг обоих файлов с помощью Baseline и High. Единственное, что я заметил, было то, что размер видео был меньше, чем High, тем меньше размер файла.
Я просто хотел знать, в чем разница, в которой будет лучше всего по качеству и лучше всего по размеру файла.
Фреймрейт
Если ваш источник — не стримы игр или экшн-видео, то имеет смысл ограничить верхнее значение фреймрейта 25-30 кадрами — чем их меньше, тем больше остаётся данных для описания отдельного кадра. Уменьшать это значение лучше кратно — так, чтобы пропуск кадров был равномерным, иначе от видео может возникнуть ощущение подтормаживания.
Есть ещё такая вещь, как переменная частота кадров. Работать с VFR неудобно по двум причинам: во-первых, это даёт пики битрейта на участках с высокой частотой, которые мгновенно опустошают буфер; во-вторых, VFR усложняет составление плана конвертации, заставляя использовать Q-параметры (о них я писал в первой статье).
Чересстрочность
Чересстрочность придумали для удвоения воспринимаемой частоты кадров минимальными затратами — битрейт и разрешение те же, а частота выше. Однако, при быстром движении становятся заметны зубцы — строки предыдущего кадра. Избавиться от эффекта, не отбрасывая кадры и не уменьшая вертикальное разрешение, можно фильтрами, но они уменьшат чёткость. Если видео будет проигрываться в браузере, чересстрочность лучше отфильтровать при кодировании, т.к. реалтайм-фильтрация на клиенте даст не лучшие визуальные результаты.
Какое это имеет отношение к качеству?
Профиль только косвенно влияет на качество. Некоторые функции более высоких профилей могут позволить вам получить то же качество с меньшими размерами файлов по сравнению с более низкими профилями.
Например, энтропийное кодирование CABAC (Main и High) более эффективно, чем CAVLC (Baseline). Это также вычислительно более интенсивно. Таким образом, если вы предоставите кодировщику определенную скорость передачи данных, он сможет создавать видео лучшего качества с CABAC, чем с CAVLC, поскольку он обеспечивает гораздо лучшее сжатие.
Это также объясняет, почему вы достигли меньшего размера файла с Высоким профилем - очевидно, вы каким-то образом установили постоянный уровень качества, и кодировщик мог бы использовать более продвинутые методы сжатия для создания видеофайла такого же качества, что и базовый профиль, но с меньшим размер.
Продолжаю раскрывать особенности работы видео сервисов. Сегодня заметки про параметры кодирования и их выбор.
Большинство кодеков предлагают достаточно сбалансированные значения по умолчанию, позволяя получить нормальный результат без долгого подбора параметров. Однако, когда речь идёт о большом архиве видеоматериала, об ограничениях на битрейт, соображениях совместимости с оборудованием клиента и разумном желании сохранить качество оригинала, всё становится интереснее.
К сожалению, волшебной кнопки «скодировать совсем хорошо» не предусмотрено. Как и аналога caniuse для параметров кодирования. Придётся разбираться в особенностях работы кодеков.
Как кодек связан с видеоформатом?
Формат файла состоит из сжатых кодеком данных. Бывает так, что формат файла и название кодека — одинаковые.
Тут главное не запутаться, поэтому приводим примерчики:
- Есть формат — Windows Media Audio , он содержит данные, сжатые кодеком — Windows Media Audio . Названия могут и отличаться.
- Есть формат — AVI ( Audio Video Interleaved ), он может содержать данные, сжатые любым кодеком ( MPEG-2 , DivX , XviD ). Так же AVI-файлы могут содержать данные, которые вообще не сжаты никаким кодеком.
Следовательно, в зависимости от того, какие кодеки установлены в вашей системе, одни файлы AVI у вас будут нормально воспроизводится, а другие файлы AVI, несмотря на одинаковое расширение файла, воспроизводится не будут.
Также это затрагивает аудио. Часто бывает ситуация, когда при воспроизведении видео, звук воспроизводится, а вот видео нет. Это значит, на вашем устройстве ну установлен соответствующий видеокодек.
GOP size
Группы изображений — блоки, в пределах которых одни изображения могут ссылаться на данные других. Увеличение размера GOP повышает эффективность кодека в обмен на повышение требований к памяти. Большие значения особо эффективны для файлов с однотипными, циклическими движениями (вы же понимаете, о чём я). Также, при больших значениях могут возникнуть проблемы с перемоткой видео, т.к. нужно будет восстановить больший объём данных.
Название параметра, также, как и единицы измерения, могут отличаться от кодека к кодеку — смотрите документацию.
Формат пикселей
Формат и битность сильно влияют на то, как сжимаются и разжимаются файлы, в каком виде теряется качество. Основные параметры, которые описывает пиксельный формат:
- способ разложения цвета на компоненты — YUV, RGB;
- параметры цветовой субдискретизации (о как! chroma subsampling привычнее), когда некоторые цветовые компоненты сохраняются с меньшим разрешением;
- глубина цветовых компонентов в битах.
- не все кодеки (и, главное, декодеры) поддерживают возможные форматы;
- работа с некоторыми форматами требовательнее к ресурсам — Hi10P отличается от просто high-профиля именно этим;
- работа с субдискретизированными форматами может дать заметное повышение эффективности сжатия, однако регулировать потери качества сложнее.
Собираем всё вместе
Пример для x264:
Разумеется, в одной статье всё охватить не получилось, но уверен, этого материала будет достаточно для улучшения качества многих видео.
Читайте документацию и экспериментируйте.
В дополнение к примеру из прошлой статьи, я узнал о ещё одной инсталяции моего кода — клик. Примеры в статье постарался брать с этих сайтов, но не смотря на это:
*Я не имею прямого отношения к авторам упоминаемых сайтов и могу не разделять их взгляды и мнение. Решения о том, кому и как предоставляется доступ к коду я комментировать не могу.
Готов ответить на вопросы.
Станете ли вы платить за хостинг вашего видеоматериала при наличии там инструментов управления качеством и доступом к видео?
Facebook Если у вас не работает этот способ авторизации, сконвертируйте свой аккаунт по ссылке ВКонтакте Google RAMBLER&Co ID
Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal
February 27th, 2010
В ближайшее время хочу выложить заметку про HD плеер WD TV Live, поэтому коснусь больной для железных плееров темы – почему возникают проблемы с проигрыванием видео. Зачастую причина в в неоправданно навороченном H.264 потоке. Стандарт H.264 предусматривает множество механизмов компрессии сигнала, вот таблица, в которой каждому профилю ставится в соответствие набор возможностей, которые могут быть задействованы в потоке. Профили бывают например такие - Constrained Baseline Profile (CBP), Baseline Profile (BP), Main Profile (MP), High Profile (HiP) и др. Еще есть понятие уровня, который определяет численные ограничения в рамках конкретного профиля. Уровни обозначаются парой чисел от 1.0 до 5.1. Профиль принято записывать в виде @L, например можно встретить такие обозначения – HP@L4.0 или High@L5.1.
За эталон качества принято считать поток с Blu-Ray диска, его видеопоток соответствует профилю HP@L4.1. По данным таблицы HP@L4.1 накладывает максимальное ограничение на поток – 62500 Kbps и обеспечивает следующие режимы (привожу самые высокие): 1,280×720@68.3 (9), 1,920×1,080@30.1 (4), 2,048×1,024@30.0 (4). Число после @ – это частота кадров, а число в скобках – количество reference frames (или reframes). Reframes – это количество кадров на которые может ссылаться текущий в процессе декодирования. Этот параметр накладывает требования на объем памяти декодера и возможно его увеличение еще влечет некоторую дополнительную нагрузку на декодер. Так вот для Blu-Ray в full hd разрешении этот параметр равен всего лишь 4-ем. На тех blu-ray, что были под рукой проверил – это действительно так, как и соответствие данному профилю. Однако видео скачанное из сети нередко имеет выставленные более высокие профили, а количество reframes иногда достигает 19! Посмотреть свойства потока можно бесплатной утилитой Mediainfo. Я проделал это и обнаружил что порядка 20% имеющихся фильмов имеет завышенные reframes и завышенные профили. В этом подмножестве достаточно типичен профиль HP@L5.1. Для информации приведу его характеристики: поток до 300000 Kbps (!), максимальные режимы: 1,920×1,080@120.5 (16), 4,096×2,048@30.0 (5), 4,096×2,304@26.7 (5). Такой безумный битрейт физически не поддерживается blu-ray диском (максимальный битрейт – 48 Mbit) и он не пролезает через 100 Mbps сетку, судя по максимальным разрешениям профиль предназначен для кодирования видео для цифровых кинотеатров. Почему так происходит понятно – люди просто выставляют все на максимум и сжимают, совершенно не включая голову, а в итоге имеем проблемы, с которыми к счастью героически борются создатели HD плееров, но с переменным успехом. Скоро напишу о том, как получается у них бороться.
А что за кодеки вообще бывают?
Их очень много, но мы разделим их на три группы для лёгкого восприятия.
Что делают разные профили?
Для получения подробного списка см. Профили H.264 в Википедии.
Как правило, базовый профиль ограничивает кодер только некоторыми базовыми функциями. Видео, закодированные с базовым профилем, можно легко воспроизводить даже на устройствах с меньшей вычислительной мощностью, таких как старые смартфоны. Например, телефоны Android и iOS официально воспроизводят только видео, закодированное с базовым профилем, но не High или Main. Это немного изменилось за последние годы, когда все больше и больше телефонов могут воспроизводить основное или громкое видео, но официальные рекомендации не упоминают об этом.
В основном для недорогих приложений, этот профиль чаще всего используется в видеоконференцсвязи и мобильных приложениях. Он соответствует подмножеству функций, общих для базового, основного и верхнего профилей.
Main и High просто добавляют к этому новые функции. Особенно высокий профиль часто используется в вещании:
Основной профиль для приложений вещания и хранения дисков, особенно для телевизионных приложений высокой четкости (например, это профиль, принятый форматом хранения дисков Blu-ray и службой вещания DVB HDTV).
Ломтики B являются, например , разрешено только в главном профиле и выше. Их можно использовать для экономии пропускной способности, но их сложнее декодировать, поэтому некоторые устройства могут не поддерживать их.
Прикольный сайт! Все полезно сделано.
Спасибо, очень интересная заметка.
Прикольный сайт! Все прикольно сделано.
Сори за оффтоп, просто искал причину почему многие мои HW-плееры - не моглут нормально проигрывать часть видео, в 2017 всё еще актуально )
Собственно даже L 4.1 избыточен как по мне, так-же проблемы наблюдаю с MKV контейнерами
H.264 — стандарт сжатия видео. И он вездесущ, его используют для сжатия видео в интернете, на Blu-ray, телефонах, камерах наблюдения, дронах, везде. Все сейчас используют H.264.
Нельзя не отметить технологичность H.264. Он появился в результате 30-ти с лишним лет работы с одной единственной целью: уменьшение необходимой пропускной способности канала для передачи качественного видео.
С технической точки зрения это очень интересно. В статье будут поверхностно описаны подробности работы некоторых механизмов сжатия, я постараюсь не наскучить с деталями. К тому же, стоит отметить, что большинство изложенных ниже технологий справедливы для сжатия видео в целом, а не только для H.264.
Видео в несжатом виде это последовательность двумерных массивов, содержащих информацию о пикселях каждого кадра. Таким образом это трёхмерный (2 пространственных измерения и 1 временной) массив байтов. Каждый пиксель кодируется тремя байтами — один для каждого из трёх основных цветов (красный, зелёный и синий).
1080p @ 60 Hz = 1920x1080x60x3 => ~370 Мб/с данных.
Этим практически невозможно было бы пользоваться. Blu-ray диск на 50Гб мог бы вмещать всего около 2 мин. видео. С копированием так же будет не легко. Даже у SSD возникнут проблемы с записью из памяти на диск.
Поэтому да, сжатие необходимо.
Обязательно отвечу на этот вопрос. Но сперва я покажу кое-что. Взгляните на главную страницу Apple:
Я сохранил изображение и приведу в пример 2 файла:
Нет, с размерами всё в порядке. Видео H.264 с 300 кадрами весит 175 Кб. Один единственный кадр из видео в PNG — 1015 Кб.
Кажется, мы храним в 300 раз больше данных в видео, но получаем файл весом в 5 раз меньше. Получается H.264 эффективнее PNG в 1500 раз.
А приёмов очень много! H.264 использует все приёмы о которых вы догадываетесь (и уйму о которых нет). Давайте пройдёмся по основным.
Представьте, что вы готовите машину к гонкам и вам нужно её ускорить. Что вы сделаете в первую очередь? Вы избавитесь от лишнего веса. Допустим, машина весит одну тонну. Вы начинаете выбрасывать ненужные детали… Заднее кресло? Пфф… выбрасываем. Сабвуфер? Обойдёмся и без музыки. Кондиционер? Не нужен. Коробка передач? В мусо… стойте, она еще пригодится.
Таким образом вы избавитесь от всего, кроме необходимого.
Этот метод отбрасывания ненужных участков называется сжатием данных с потерями. H.264 кодирует с потерями, отбрасывая менее значимые части и сохраняя при этом важные.
PNG кодирует без потерь. Это означает, что вся информация сохраняется, пиксель в пиксель, и поэтому оригинал изображения можно воссоздать из файла, закодированного в PNG.
Существует несколько очевидных способов урезания изображения. Возможно, верхняя правая четверть картинки бесполезна, тогда можно удалить этот угол и мы уместимся в ¾ исходного веса. Теперь машина весит 750 кг. Либо можно вырезать кромку определенной ширины по всему периметру, важная информацию всегда ведь по середине. Да, возможно, но H.264 всего этого не делает.
H.264, как и все алгоритмы сжатия с потерями, уменьшает детализацию. Ниже, сравнение изображений до и после избавления от деталей.
Видите как на сжатом изображении исчезли отверстия в решётке динамика у MacBook Pro? Если не приближать, то можно и не заметить. Изображение справа весит всего 7% от исходного и это при том, что сжатия в традиционном смысле не было. Представьте машину весом всего лишь 70 кг!
Для начала немного математики.
Мы подходим к самому интересному! Если вы посещали теорию информатики, то возможно вспомните про понятие информационной энтропии. Информационная энтропия это количество единиц для представления некоторых данных. Заметьте, что это вовсе не размер самих данных. Это минимальное количество единиц, которое нужно использовать, чтобы представить все элементы данных.
Например, если в виде данных взять один бросок монеты, то энтропия получится 1 единица. Если же бросков монетки 2, то понадобятся 2 единицы.
Предположим, что монета весьма странная — её подбросили 10 раз и каждый раз выпадал орёл. Как бы вы кому нибудь рассказали об этом? Вряд ли как-то вроде ОООООООООО, вы бы сказали «10 бросков, все орлы» — бум! Вы только что сжали информацию! Легко. Я вас спас от многочасовой утомительной лекции. Это, конечно же, огромное упрощение, но вы преобразовали данные в некое короткое представление с той же информативностью. То есть уменьшили избыточность. Информационная энтропия данных не пострадала — вы только преобразовали представление. Такой способ называется энтропийным кодированием, который подходит для кодирования любого вида данных.
Теперь, когда мы разобрались с информационной энтропией, перейдем к преобразованию самих данных. Можно представить данные в фундаментальных системах. Например, если использовать двоичный код, будут 0 и 1. Если же использовать шестнадцатеричную систему, то алфавит будет состоять из 16 символов. Между вышеупомянутыми системами существует взаимно однозначная связь, поэтому можно легко преобразовывать одно в другое. Пока всё понятно? Идём дальше.
А представьте, что можно представить данные, которые изменяются в пространстве или времени, в совершенно иной системе координат. Например, яркость изображения, а вместо системы координат с x и y, возьмём частотную систему. Таким образом, на осях будут частоты freqX и freqY, такое представление называется частотным пространством[Frequency domain representation]. И существует теорема, что любые данные можно без потерь представить в такой системе при достаточно высоких freqX и freqY.
freqX и freqY всего лишь другой базис в системе координат. Так же как можно перейти из двоичной системы в шестнадцатеричную, можно перейти из X-Y в freqX и freqY. Ниже изображён переход из одной системы в другую.
Мелкая решётка MacBook Pro содержит высокочастотную информацию и находится в области с высокими частотами. Таким образом мелкие детали имеют высокую частоту, а плавные изменения, такие как цвет и яркость низкую. Всё, что между, остаётся между.
В таком представлении, низкочастотные детали находятся ближе к центру изображения, а высокочастотные в углах.
Потому что теперь, можно взять изображение, представленное в частотных интервалах, и обрезать углы, иными словами применить маску, понизив тем самым детальность. А если преобразовать изображение обратно в привычное, можно будет заметить, что оно осталось похожим на исходное, но с меньшей детализацией. В результате такой манипуляции, мы сэкономим место. Путём выбора нужной маски, можно контролировать детализацию изображения.
Ниже знакомый нам ноутбук, но теперь уже с, применёнными к ней, круговыми масками.
В процентах указана информационная энтропия относительно исходного изображения. Если не приближать, то разница не заметна и при 2%! — машина теперь весит 20 кг!
Именно таким образом нужно избавляться от веса. Такой процесс сжатия с потерями называется Квантованием.
Человеческий глаз не особо хорошо различает близкие оттенки цвета. Можно легко распознавать наименьшие различия в яркости, но не цвета. Поэтому должен существовать способ избавления от лишней информации о цвете и сэкономить ещё больше места.
В телевизорах, цвета RGB преобразуются в YCbCr, где Y это компонента яркости (по сути яркость черно-белого изображения), а Cb и Cr компоненты цвета. RGB и YCbCr эквиваленты в плане информационной энтропии.
Во времена чёрно-белых телевизоров, была только компонента Y. А с началом появления цветных телевизоров у инженеров встала задача о передаче цветного RGB изображения вместе с чёрно-белым. Поэтому вместо двух каналов для передачи, было решено кодировать цвет в компоненты Cb и Cr и передавать их вместе с Y, а цветные телевизоры уже сами будут преобразовывать компоненты цвета и яркости в привычный им RGB.
Но вот в чём хитрость: компонента яркости кодируется в полном разрешении, а компоненты цвета лишь в четверть. И этим можно пренебречь, т.к. глаз/мозг плохо различает оттенки. Таким образом можно уменьшить размер изображения в половину и с минимальными отличиями. В 2 раза! Машина будет весить 10 кг!
Данная технология кодирования изображения со снижением цветового разрешения называется цветовой субдискретизацией. Она используется повсеместно уже давно и относится не только к H.264.
Это самые значительные технологии в уменьшении размера при сжатии с потерями. Нам удалось избавиться от большинства детализации и сократить информацию о цвете в 2 раза.
Да. Обрезание картинки это лишь первый шаг. До этого момента мы разбирали отдельно взятый кадр. Пришло время взглянуть на сжатии во времени, где нам предстоит работать с группой кадров.
H.264 стандарт, который позволяет компенсировать движения.
Представьте, что вы смотрите теннисный матч. Камера зафиксирована и снимает с определенного угла и единственное что движется это мячик. Как бы вы закодировали это? Вы бы сделали что и обычно, да? Трёхмерный массив пикселей, две координаты в пространстве и один кадр за раз, так?
Но зачем? Большая часть изображения одинакова. Поле, сетка, зрители не меняются, единственное что движется это мячик. Что если определить единственное изображение фона и одно изображение мячика, движущегося по нему. Не сэкономило бы это значительно места? Вы видите к чему я клоню, не так ли? Компенсация движения?
И это именно то, что H.264 делает. H.264 разбивает изображение на макроблоки, обычно 16х16, которые используются для расчёта движения. Один кадр остаётся статичным, обычно его называют I-кадр [Intra frame], и содержит всё. Последующие кадры могут быть либо P-кадры [predicted], либо B-кадры [bi-directionally predicted]. В P-кадрах вектор движения кодируется для каждого макроблока на основе предыдущих кадров, таким образом декодер должен использовать предыдущие кадры, взяв последний из I-кадров видео и постепенно добавляя изменения последующих кадров пока не дойдёт до текущего.
Ещё интереснее обстоят дела с B-кадрами, в которых расчёт производится в обоих направлениях, на основании кадров идущих до и после них. Теперь вы понимаете почему видео в начале статьи весит так мало, это всего лишь 3 I-кадра, в которых мечутся макроблоки.
При такой технологии кодируется только различия векторов движения, тем самым обеспечивая высокую степень сжатия любого видео с перемещениями.
Мы рассмотрели статическое и временное сжатия. С помощью квантования мы во много раз уменьшили размер данных, затем с помощью цветовой субдискретизации ещё вдвое сократили полученное, а теперь еще компенсацией движения добились хранения лишь 3х кадров из 300, которые были первоначально в рассматриваемом видео.
Теперь мы подведём черту, используя традиционное энтропийное кодирование без потерь. Почему нет?
После этапов сжатия с потерями, I-кадры содержат избыточные данные. В векторах движения каждого из макроблоков в P-кадрах и B-кадрах много одинаковой информации, так как зачастую они двигаются идентично, как это можно наблюдать в начальном видео.
От такой избыточности можно избавиться энтропийным кодированием. И можно не переживать за сами данные, так как это стандартная технология сжатия без потерь, а значит всё можно восстановить.
Вот теперь всё! В основе H.264 лежат вышеупомянутые технологии. В этом и заключаются приёмы стандарта.
Исходное видео было снято в нестандартном разрешении 1232x1154. Если посчитать, то получится:
5 сек. @ 60 fps = 1232x1154x60x3x5 => 1.2 Гб
Сжатое видео => 175 Кб
Если соотнести результат с оговорённой массой машины в одну тонну, то получится вес равный 0.14 кг. 140 граммов!
Да, это магия!
Конечно же я в очень упрощённом виде изложил результат десятилетних исследований в этой сфере. Если захотите узнать больше, то страница в википедии вполне познавательна.
Что такое профиль?
Профиль H.264 более или менее определяет, какие "навороты" кодер может использовать при сжатии вашего видео - и существует множество функций H.264, которые кодировщик может включить. Какие из них разрешено включать, определяется профилем. Профили обеспечивают совместимость между устройствами, которые имеют разные возможности декодирования. Что касается профилей, кодер и декодер согласовывают набор функций, который они могут обрабатывать.
1 ответ 1
Цветовое пространство
Выбор цветового пространства практически не влияет на эффективность кодирования; этот параметр можно было бы оставить на выбор кодека (он важен при обработке сырых, некодированных данных), если бы не одна особенность: многие плееры весьма специфически обрабатывают информацию о цветовом пространстве, так что у большой части пользователей видео может отображаться с искажениями цвета (в основном зелёного).
Чтобы сохранить цвета для большинства плееров, разные H264 видео нужно кодировать в разных пространствах:
Контроль битрейта
Есть три основных режима работы кодеков, связанных с битрейтом:
- постоянный битрейт, CBR, когда качество падает пропорционально сложности сцены;
- постоянное качество, const Q VBR, когда пропорционально сложности сцены растёт битрейт;
- ограниченные битрейт и качество — классический VBR.
Для онлайн проигрывания (да и для стриминга) хорошо подходит constrained VBR, т.к. он даёт лучшее, чем CBR, качество и позволяет уместить поток в интернет-канал.
Выбор maxrate/minrate зависит от канала клиента, разброс больше 20% лучше не делать.
В MACos
Выберите файл и откройте его свойства. Во вкладке найдете пункт "Видеокодек".
Многопроходное кодирование
Распределение данных по файлу в VBR-режиме предсказать сложно, кодекам приходится угадывать, что получается не всегда. В многопроходном режиме кодек сперва составляет карту требующегося битрейта, а потом кодирует. Таким способом улучшается качество видео в сложных и динамических сценах (пример. Обратите внимание на количество «муарных» элементов и количество переходов между сценами). Так как при первом проходе кодек только анализирует исходный файл, вопреки распространённому мнению, обработка в таком режиме требует времени больше не в два раза, а только на 10-15%.
Для разных типов исходного материала подготовлено несколько пресетов, подстраивающих некоторые базовые параметры кодирования — такие, как уровни деблокинг-филитра, параметры психовизуальной оптимизации. Использование этих пресетов улучшает восприятие видео и хорошо работает, если вы заранее знаете тип источника, или у вас структурированный набор видео (в случае массовой обработки).
- film — для фильмов и всего со сложной структурой кадра. Это — однозначно film;
- animation — для видео с большими однотонными областями. То есть, это лучше кодировать с пресетом animation, а это — film, несмотря на то, что анимация;
- stillimage — для видео, где почти нет движения; хорошая оптимизация для тех песен в формате mp4, где в течение всего видео фоном — обложка альбома (кто-нибудь, скажите им, что даже flac на 10 минут не может весить 300MB!);
- grain — для кодирования «шумных» источников, вроде камер наблюдения;
- psnr/ssim — для оценки эффективности остальных параметров кодека;
- fastdecode — форсированный main-профиль для слабых устройств;
- zerolatency — как и следует из названия, для стриминга с низкой задержкой.
1. Камерные кодеки.
Для записи видео на самой камере. Характерна высокая скорость кодирования, но низкая скорость декодирования.
Пример : XDCAM; REDCODE; Cinema DNG.
Для потребления контента. В интернете или просто в проигрывателях на компьютере/телефоне.
Эти кодеки медленно записывают видео, но быстро его воспроизводят из-за быстрого декодирования.
Очень малы по объему и ресурсоемкие для монтажа.
Пример : H.264; Mpeg 1,2,4; DivX.
Comments:
Они просто пытаются играть. На reframes у программных похоже нет особых ограничений, во всяком случае этот предел должен быть большим. А что касается битрейтов, то на Core2Duo E8500 ffdshow начинает заикаться при битрейтах более 35 Mbps. Аппаратные вроде как до 100 Mbps точно должны переваривать, видел в сети примеры таких роликов. По битрейтам думаю крайне редко бывает превышение, а вот по reframes не редкость. Есть фильм с помоему 16-ю reframes, там иногда квадратики железный плеер показывает, так вот и ffdshow mpc-hc dxva и powerdvd8 dxva тоже также работают, видимо что-то там совсем уж резко выскакивает за пределы. Там ведь кроме как на reframes (для них просто память нужна) уровень профиля накладывает ограничения на емкость кадра и объем данных по motion vectors, короче видимо что-то такое случается, что не предусмотрено в существующих чипах. Еще вариант - задействованы фичи AVC, которые вообще не декодируются, там есть навороты которые в blu-ray вообще не используются. Такой пример правда пока единственный.
Надо было назвать: "незнание матчасти - главная проблема отечественных риперов". хотя не только риперов.
Пардон, не читал комменты.
Но ведь более высокие значения рефреймов и т.п. позволяют иметь высокое качество при куда меньшем размере.
Или я не прав, м?
Размер конечно становится меньше, но эффект от этого скорее всего уменьшается со временем. Сжатие обеспечивается целым набором методов, одним из которых является данный, поэтому его вклад конечно заметный, но все-же ограничен. Т.е. если рисовать график уменьшения объема кадра в зависимости от числа reframes, то скорее всего будет наблюдаться резкий спад, который потом сменяется замедляющимся процессом постепенного уменьшения размера.
В конце концов задача кодека обеспечить заданные рамки объема данных при заданных параметрах кодера и декодера. Если ловить какие-то проценты, то плата за это будет расти значительно быстрее эффекта от него.
Кстати некую аналогию можно провести с параметром "размер словаря" в rar-е. Суть примерно та-же - увеличиваем объем данных на которые можем ссылаться, причем размер этого словаря можно делать очень большим. С большим словарем архив становится немного поменьше, но за это придется заплатить временем сжатия.
Анаморфные пиксели
Прямоугольные пиксели появляются тогда, когда соотношение сторон и отношение пиксельной ширины к высоте отличаются — широкоформатные DVD, где 16:9 видео имеет разрешение 704×480 (3:2 с аналоговым НДС и поправкой на ветер). Проигрывание таких видео проблем не вызовет, однако при кодировании нужно учитывать одновременно и разрешение и соотношение сторон, иначе легко преобразовать анаморфные либо в стандартные квадратные пиксели с потерей эффективности (до ~35%!), либо вообще получить что-то сплющенное по горизонтали.
Slices
Для ускорения декодирования (и кодирования) видео можно разделить на части более низкого разрешения. Идея в том, что обработать четыре видео с разрешением, например, 1280x720 проще, чем одно, но 2560x1440. Имеет смысл при разрешениях выше FHD. Чем больше частей, тем ниже эффективность кодека. Также, использование такого разделения упрощает многопоточную обработку.
Читайте также: