Кодеки, контейнеры, форматы, битрейты.. Масса путающихся терминов и обозначений, куча параметров, в которых приходится разбираться и конечным пользователям, не понимающим, почему у них не проигрывается видео из Интернета или с диска, и контент-провайдерам, определяющим, как подготовить файлы так, чтобы их получили и смогли посмотреть максимальное количество пользователей. Неужели нельзя, наконец, выбрать какой-то один вариант, устраивающий всех, и больше не мучиться никогда? Давайте попробуем разобраться.
Во время съемки видео на цифровую камеру прямо при записи происходит оцифровка изображения и отбрасывание части информации - например, того, что человеческий глаз все равно не увидит. То есть определенное сжатие происходит практически сразу. Профессиональные камеры пишут поток видео с битрейтом от 50 Мбит/c. Например, при съемке на камеру Panasonic в формате DVCproHD битрейт составляет 100 Мбит/с, и 10 минут видео займет места порядка 7 Гбайт. Этот объем информации потом пригодится для монтажа, но "впихнуть" такой поток в каналы эфирного или кабельного ТВ без дополнительного сжатия (кодирования) не получится. При съемке на обычную бытовую камеру информации отбрасывается побольше - например, DV-камера записывает со скоростью порядка 25 Мбит/с, но все равно без дополнительного сжатия на DVD-болванку получится записать около 20 минут видео, а вовсе не 4 фильма по 2 часа.
Хранить записанные видеоматериалы - будь это домашнее видео или архив телекомпании - лучше всего в исходном формате. А вот для распространения видео придется дополнительно сжимать - кодировать. Для этого разрабатываются разнообразные математические алгоритмы сжатия и соответствующие устройства или программы, которые в соответствии с этими алгоритмами сжимают видео (кодеры), а потом на том устройстве, на котором происходит, например, просмотр, разжимают его (декодеры). Чаще всего кодирование занимает больше времени и ресурсов, кадр просматривается и пересчитывается несколько раз, зато декодирование - процесс, который должен происходить "на лету", обычно в десятки раз быстрее кодирования. Кодек H.264 устроен еще более "несимметрично" - в нем жестко не определен процесс кодирования, зато стандартизирован процесс декодирования. Компании-производители могут придумывать свои собственные способы кодирования видеосигнала; главное, чтобы стандартный декодер смог потом с ним справиться. В результате один и тот же по названию кодек H.264, реализованный разными компаниями, будет давать разную картинку.
Существуют кодеры, которые не сжимают видео, а только преобразуют его в другой вид/формат файла - например, для хранения файла на специфическом носителе. Этот вариант называется lossless - без потери качества.
Технологии кодирования
По способу обработки изображения кодеки делятся на две группы. Можно сжимать видео покадрово - когда каждая картинка-фрейм обрабатывается отдельно (intra-frame compression). Такое кодирование применяется, если видеоматериал в дальнейшем планируется монтировать и редактировать. Примеры таких кодеков - DV, MPEG2 (IMX), AVC-Intra, JPEG-2000, Avid DNxHD
Существует несколько вариантов отбрасывания "лишней" информации внутри кадра. Известно, например, что человеческий глаз хорошо различает оттенки яркости, а вот оттенки цвета видит хуже. Поэтому информацию о яркости можно хранить для каждой точки кадра, а по цветности - через одну (из кадра 4.4.4. получится кадр 4.2.0 -это преобразование понятно описано на codec.ru и подробнее в Википедии). Можно разбить цвет на меньшее количество уровней и хранить информацию о цвете не в 10, а в 8 битах. Можно отказаться от высокочастотных изменений цвета. (Подробно прочитать о том, какие бывают математические методы и алгоритмы сжатия для статических графических изображений и видео можно в книге Методы сжатия данных)
Если видеоматериал предполагается не редактировать, а распространять по "узким" каналам связи, используются технологии сравнения кадров между собой и хранения информации об изменении между кадрами (inter-frame compression). При этом целиком передаются только отдельные кадры (i-фреймы), а для остальных передаются описание изменений по сравнению с i-фреймами. Примеры таких кодеков - H.264, VP6, WMV, MPEG-2 LongGOP.
MPEG-2 LongGOP - это, кстати, кодек, который используется в большинстве проектов спутникового ТВ.
Профили и уровни
Одни и те же алгоритмы кодирования с разным набором параметров дадут на выходе сигнал с разной степенью сжатия и качества. Кроме того, в зависимости от времени, которое есть у кодера на обработку изображения, можно воспользоваться дополнительными алгоритмами или сделать кодирование в несколько проходов (multi-pass), тогда даже с тем же битрейтом качество изображения будет лучше. Но и декодирование в этом случае может оказаться более сложным, так что у декодирующего устройства может попросту не хватать мощности или памяти.
Таким образом, при кодировании приходится постоянно иметь в виду и ширину канала, по которому сигнал нужно будет распространять, и ресурсы декодируюшего устройства. Чтобы производители кодеров и декодеров могли договориться, у кодеков есть дополнительные характеристики - профиль, определяющий применяемые технологии сжатия, и уровни, характеризующие степень сжатия, то есть размер кадра и битрейт. Например, для того же самого кодека H.264 существует множество вариантов профилей (см подробнее), для видео в Интернете обычно используется Baseline Profile (BP) для более слабых устройств и MP (Main Profile) для обычных современных компьютеров. Соответственно, производители кодеров H.264 должны заранее продумать, какие устройства будут потом работать с видеосигналом и по каким каналам он будет распространяться, и оптимизировать свои решения под эти конкретные применения.
Ряд интересных побочных следствий: |
1)Если вы пытаетесь посмотреть видео из Интернета в высоком качестве на полном экране (например, с vimeo.com), канал у вас хороший, а видео показывается рывками, посмотрите на загрузку CPU - может быть, вам пора менять компьютер. |
2)Нельзя сравнить качество видео или оценить эффективность кодеков по битрейту получившегося сигнала. По битрейту качество видео в принципе трудно оценить из-за того, что передаваемые биты могут содержать в себе просто шум. Именно поэтому для качественного результата исключительно важно использовать хороший сигнал на входе кодера и проводить дополнительную его обработку для уменьшения шума. Иначе драгоценные ресурсы будут потрачены на кодирование и распространение "мусора". Автоматически анализировать качество видео тоже очень трудно, разрабатываются и патентуются сложные способы оценки качества видеосигнала с помощью системы экспертных оценок. Но даже если мы подадим совершенно одинаковый чистый сигнал на вход нескольких кодеров, может получиться, что на выходе сигнал боле высокого качества имеет более низкий битрейт. |
3)А вот тут приводится еще более интересный пример несоответствия битрейта и качества. Видео скачано и перекодировано с уменьшением битрейта в 4 раза, но это не привело к ухудшению изображения - возможно, оно стало даже четче. |
Контейнеры
Итак, видео мы закодировали с помощью одного кодека, аудио - с помощью другого, а еще у нас есть субтитры, они в отдельном текстовом файле, или анимация, тоже в отдельном файле. Теперь все это нужно объединить ("завернуть", мультиплексировать) в один общий файл, который называется контейнером. Задача контейнера - правильно синхронизировать заложенный в него разнообразный контент. Ясно, что это непростая задача. Считается, что подавляющее большинство ошибок при проигрывании файлов связано именно с контейнерами. Их примеры - MOV, AVI, MPEG (MPEG-2 TS и MPEG-2 PS), VOB, MKV, WMV, 3GPP, 3G2. Сравнительную таблицу контейнеров можно найти в Википедии.
Мультиплексировать можно по-разному. Если предполагается, например, менять субтитры или добавлять аудио, удобнее, если звук, видео и текст расположены в отдельных файлах, а файл-контейнер содержит только ссылки для их синхронизации (reference file). Если же предполагается просто передавать контент для просмотра конечным пользователем, то контейнер - это, обычно, один файл, в котором подряд положены "нарезанные" кусочки файлов звука, видео, субтитров. По названию догадаться нельзя. Например, контейнер Quicktime MOV поддерживает оба варианта и умеет конвертировать один в другой.
В Интернете часто используются контейнеры, в которых все хранится внутри (self-contained), но, например, потоковое вещание в решении Adobe dynamic streaming предполагает, что видео хранится отдельно от информации о синхронизации, и за счет этого пользователю можно непрерывным потоком отдавать видео с разной степенью сжатия, подстраиваясь под его полосу пропускания. |
Контейнеры тоже бывают двух типов - потоковые и файловые, в зависимости от задач.
1) В файловом контейнере вся описательная информация о видео-, аудио- и прочих данных хранится в одном месте (начало или конец файла). Плюс - минимальная избыточность, минус - если описательная информация потеряна, повреждена или еще не получена, то воспроизведение или любая другая обработка файла будет невозможна или крайне затруднена. Если информация о файле хранится в начале, то его можно начать проигрывать или обрабатывать с начала, не дожидаясь полной загрузки файла на компьютер (progressive download).
2) В потоковом контейнере описательная информация постоянно присутствует в потоке данных с определенной периодичностью. Плюс - воспроизведение или обработка данных возможна практически с любого момента, минус - избыточность описательной информации.
Потоковые контейнеры используются, например, при организации цифрового эфирного телевизионного вещания. Для нас естественно, когда телевизор начинает показывать видео почти сразу, а не ждет, когда начнется новая передача или полностью загрузится текущая. Ну, может, видео чуть притормозит, пока телевизор будет ждать получения очередного i-фрейма в потоке. Потоковые контейнеры важны и в профессиональной области, потому что позволяют начать обработку видео: например, транскодирование - с начала получения потока мультимедиа данных, и в результате задержка между, например, трансляцией футбольного матча и его реальным ходом на стадионе будет меньше. Подробно устройство такого широко используемого в телевещании потокого контейнера как MPEG-2 TS описывалось в статье Цифровое кабельное ТВ.
Точно такое же потоковое вещание бывает и через Интернет - например, так обычно устроено в сети радио. Даже если исходно вся программа вещания была составлена из отдельных файлов с видео или аудио, вещательный сервер в соответствии с плей-листом "склеивает" их и выдает одним потоком.
Поток не обязательно должен быть бесконечным и вещаться один для всех. В Интернете это может быть и видео ограниченной длины, которое сервер проигрывает специально для вас. Но поскольку служебная информация присутствует в потоке повсюду, такое видео можно смотреть практически с любого места и проматывать вперед и назад. Считается, что если ролик длиннее 10 минут, его лучше вкладывать в потоковый контейнер. Интернет-вещатели все шире используют потоковые контейнеры, возможно, потому что при потоковом вещании на пользовательском устройстве не создается копии видео, а сохраняется только небольшой его кусочек - буфер, необходимый для равномерного проигрывания; да и на вещательном сервере нет, собственно, файла с видео, который мог бы быть скачан интернет-пиратами.
1)Интересное применение контейнеров - защита вложенной информации. Аудиофайл, например, можно выложить в Интернете и без контейнера - в mp3-файле. Но в такой файл не добавить контроль доступа, поэтому раз скачанный файл будет доступен пользователю на любом устройстве и всегда. Если провайдер хочет ограничить прослушивание, к примеру, несколькими днями, потребуется вложить файл mp3 в контейнер, например, в WMA (Windows Media Video/Audio) вместе с файлами DRM, несущими информацию о правилах доступа. |
2)На сайте adobe.com в статье Dynamic streaming on demand with Flash Media Server 3.5 можно найти пример того, как для определенного контейнера связаны вместе кодеки, размер кадра и битрейт для распространенных размеров кадра в случае вещания в Интернете с использованием технологии Adobe dynamic streaming, т.е. кодека H.264 и потокового контейнера F4V |
Форматы
И, наконец, формат - это некая совокупность описаний контейнеров, набора кодеков и дополнительных метаданных. Вся структура вместе получается достаточно сложной.
Пример формата и его составляющих, который приводит Rozhet : | ||
M2TS c H.264 (HP) видео и MPEG-1 Layer 2 аудио, например, может соответствовать: | ||
контейнер M2TS | ||
H.264 видеокодек с параметрами: | ||
кадр 720x480, 29.97 fps (кадров в секунду), верхнее поле - первое | ||
CBR 3Mbps, т.е. кодер выдает сигнал с постоянным битрейтом 3 Мбит/с | ||
High profile, 3,2 Level, ATSC closed-captionning - профиль кодека HP, уровень 3,2, определенный способ вывода текста | ||
... и еще более 50 других параметров | ||
MPEG-1 Layer 2 аудио | ||
Стерео, 16-битное кодироание, частота дискретизации 48кГц | ||
битрейт аудио - 128 кбит/c |
А чтобы все неспециалисты совершенно запутались, одни и те же названия часто используются для кодеков, контейнеров и форматов. Поэтому, о чем идет речь в данный момент - о формате или контейнере MPEG-2, и если о контейнере, то о каком из двух, или, может, собеседник подразумевает кодек H.262, применяемый для видео в этом формате, придется догадываться по контексту разговора. А, например, формат MPEG-4 включает описание двух разных видеокодеков - MPEG-4 Part 2 и MPEG-4 Part 10 (он же MPEG-4 AVC, он же H.264). При этом они оба широко применяются. MPEG-4 Part 2 - используется в контейнерах DivX(DivX Media Format) и QuickTime 6; MPEG-4 Part 10, AVC/H.264 - используется при записи HD DVD и Blu-ray дисков, и в QuickTime 7, Flash 9 и др., в том числе и в вещательном ТВ.
Выбор
Как ясно из сказанного выше, для подготовки видеоматериала и для распространения потребуются, скорее всего, разные способы кодирования видео. И даже если речь идет только о распространении видеоролика по сетям с низкой пропускной способностью, для подготовки спортивных трансляций потребуется другое кодирование, отличное от кодирования для видеомедицины. В одном случае нужно обрабатывать быстро двигающиеся изображение, в другом важно сохранить мелкие детали. А, например, для видеоконференцсвязи кодек должен работать быстро - иначе образуются большие задержки при общении. Поэтому при выборе формата/контейнера/кодека нужно точно понимать, для чего он будет использоваться, универсального решения не существует.
Дополнительное чтение и благодарности:
Помимо ссылок, приведенных в тексте, интересные материалы о кодеках, контейнерах и форматах для начинающих можно найти, например, на сайте компании Rhozet в разделе White Papers.
Компания Rhozet продает транскодеры - программы, преобразующие файлы одного формата в другой, и поэтому очень хорошо разбирается во всем, связанном с файловыми контейнерами. При подготовке статьи я также пользовалась материалами доклада, который сделал вице-президент Rhozet David Trescot на вебинаре .
Rhozet - компания, работающая с файловыми контейнерами. Возможно, именно этот факт привел к некоторому перекосу в статье в сторону файловой обработки видео. Специалисты российской компании "Элекард", разрабатывающей кодеки и программы для анализа структуры MPEG-потока, обратили мое внимание на этот перекос, и я очень благодарна Владиславу Марченко за замечания. Надеюсь когда-нибудь вникнуть в особенности потоковых контейнеров более глубоко.
Отдельное большое спасибо за советы и правки Дмитрию Кашину, руководителю отдела контроля качества телекомпании "Первый ТВЧ".