Файл AVI, структура файла, понятие кодека

История контейнеров — мифы и рифы

В 1985 году знаменитая фирма-производитель видеоигрушек Electronic Arts совместно с фирмой Commodore, выпустившей прославленный игровой компьютер Amiga, специально для этой платформы разработали стандарт — Interchange File Format, формат файлов обмена, IFF. Это был первый медиаконтейнер, который мог содержать звук, графику, анимацию, текст и т. п. (о видео тогда, видимо, речь еще не шла). Структура файлов в этом стандарте предполагала разбиение их на блоки (названные создателями chunks — ломти), каждый из которых состоял из заголовка и собственно данных. Заголовок определял, как следует интерпретировать данные: не давал алгоритма их обработки, про который предполагалось, что он уже имеется где-то в системе, а лишь указывал, какой из алгоритмов следует в данном случае использовать и в какой конкретной его интерпретации.

Идеология построения контейнеров из таких кирпичиков с легкой руки создателей IFF стала потом общепринятой. На основе канонического IFF созданы такие известные форматы, как Microsoft Word, MIDI, DjVu или PNG. Созвучный по названию растровый формат TIFF также заимствовал общий принцип, хотя от канонического IFF отличается. Наиболее известен вариант IFF под названием RIFF (Resource Interchange File Format), который стал базовым для представления потоковых медиаданных — среди наиболее популярных RIFF-контейнеров AVI и WAV. Канонический RIFF имеет ограничение по размеру файла в 2 Гбайта (из-за того, что для указания позиции в файле используется 32-битное число со знаком, которое и дает максимальное положительное значение 2 147 483 648 байт), чего в принципе хватает для большинства нужд, кроме видео. Для поддержки видеофайлов большого размера формат AVI был расширен до AVI-DV, но, как утверждает «Википедия», это уже не совсем RIFF.

Audio Video Interleave — AVI

Формат AVI можно представить как чередование видео и аудио. Мы познакомились с ним, когда Microsoft в ноябре 1992 года впервые выпустила пакет Video for Windows. С тех пор AVI стал базовым для хранения видео в Windows.

AVI (вместе с QuickTime Apple и развиваемой «опенсорсниками» системой Matroska) относится к числу наиболее универсальных контейнеров: в нем может встречаться почти любое сочетание форматов хранения видео и аудио. В этом его отличие от таких более специализированных контейнеров, как, например, MP4 (предназначенного для представления видео в MPEG-4 в сочетании с различными форматами звука ). В этом же объяснение его долголетия и одновременно его недостаток — не все устройства воспроизведения одинаково хорошо «разбираются» в вариантах AVI.

Простые аудио- и видеопотоки могут содержаться в AVI-файле без какого-либо сжатия, и такой формат до сих пор используется для небольших (менее минуты) клипов с невысоким разрешением. Для полноформатных AVI-видеороликов в настоящее время особой популярностью пользуется такая пара: DivX (для видео) и WMA (для аудио). Информация о кодеке может содержаться в AVI-файле, и при открытом доступе в Интернет последние версии Windows Media Player умеют сами обращаться на сайт Microsoft и скачивать (при его наличии там) необходимый кодек. В частности, по этой причине воспроизведение разноформатного видео программными плеерами в компьютерах обычно доставляет меньше хлопот, чем запуск роликов через «железные» плееры, в которых нужного кодека может попросту не оказаться.

В первых байтах AVI-файла всегда содержится информация о контейнере: «RIFF <размер области данных> AVI». После них должно идти как минимум два блока, начинающихся со слова LIST: блок заголовка ‘hdrl’ и блок данных ‘movi’. В заголовке хранятся данные, определяющие форматы потоков, располагающихся в области ‘movi’.

Канонический AVI был заточен под хранение видео в отдельных кадрах, к каждому из которых полагалось свое звуковое сопровождение. Такой кадр мог храниться в виде обычного несжатого изображения в формате BMP, а звук — также несжатого WAV. Конечно, кроме BMP, предусмотрено и хранение со сжатием (если использовался JPEG, то такая последовательность кадров образует формат Motion JPEG). Но применение форматов сжатия MPEG, где на отдельные кадры картинка не разбивается, заставило отойти от этой простой схемы.

Фотокамеры, способные работать в режиме съемки видео, часто используют нестандартные контейнеры, потому снятые ролики приходится перекодировать с помощью различных программ. Так, некоторые DVD-проигрыватели воспроизводят видео в MPEG-4 только в контейнере AVI и «не понимают» контейнеры MP4, применяющиеся, например, в некоторых камерах Olympus, Sanyo или Sony. Есть и другие случаи несовместимости. Для перекодировки в «нормальный» формат годится любая «продвинутая» программа видеомонтажа (например Ulead VideoStudio), есть и специализированные бесплатные программы, такие, как MP4Cam2AVI или Avi2DVD.

Cплиттеры, кодеки и их коды

Распаковкой файлов-контейнеров занимается программа-сплиттер. Когда она доходит до конкретной реализации аудио- или видеопотока, в дело вступают кодеки — методы представления аудио- или видеопотока в различных форматах. Кодеком также называют не только сам метод кодирования, но и программу-драйвер, которая реализует этот метод. Кодеки не следует путать с собственно форматами сжатия: так, конвертировать аудио в формат MP3 можно с помощью абсолютно разных кодеков. Другой пример — единый стандарт MPEG-4, есть реализация разных возможностей в рамках этого стандарта, например DivX и AVC/H.264 (реализующие MPEG-4 Part 2 и Part 10, соответственно), а есть конкретные кодеки, которые это и делают на практике, но по-разному.

Как вы поняли из этого примера, различных кодеков, что в принципе делают одно и то же, встречается множество, и разобраться в них часто не под силу даже знатоку. Иногда сжатие может делаться разными кодеками, а вот воспроизводится результат практически любым того же назначения; реже кодеки оказываются несовместимыми и по воспроизведению. Положение усугубляется тем, что производители очень любят давать собственные наименования кодекам, которые по сути ничем не отличаются от более распространенных. Например, DIVX, DVX3, SAN3, XVID — кодеки, которые при воспроизведении файлов MPEG-4/DivX в подавляющем большинстве случаев дадут идентичный результат.

А вот программа-плеер запросто может «не понять», что от нее хотят. В используемом контейнере всегда указывается так называемый FourCC-код используемого кодека, например, в AVI он находится, начиная с байта номер 188 (BCh в шестнадцатеричной форме) от начала файла. Этот код всегда состоит из четырех знаков, на что указывает его название — Four Character Code (служебные слова в RIFF-контейнерах, такие, как LIST или собственно RIFF, это тоже FourCC-коды). Большинство встречающихся на практике FourCC-кодов для видеокодеков и некоторых других форматов можно найти на сайте http://fourcc.org. Причем для правильного распознавания кодека важен даже используемый регистр букв — так, DIVX и divx, формально говоря, относятся к разным кодекам.

Если видео в каком-то формате никак не желает воспроизводиться, то положение иногда может спасти универсальный кодек FFDshow, который не только поддерживает форматы DivX/XviD, H.264, WMV, MPEG 1 и 2 и еще кучу других, но и позволяет осуществлять тонкие настройки. Хорошую инструкцию по применению FFDshow можно найти на http://forum.sharereactor.ru/showthread.php?t=62337. Для тех, кто вообще не желает возиться с кодеками, отличным выбором может также стать «опенсорсный» Media Player Classic, отличающийся строгим «классическим» оформлением (по образцу старинного Windows Media Player 6), работающий в любой Windows, начиная с 95-й, не требующий инсталляции и воспроизводящий без проблем почти любое видео и аудио. Причем использовать такие универсалы предпочтительнее, чем скачивать наборы кодеков, вроде популярного K-Lite Codec Pack, в котором все доступные кодеки попросту свалены в кучу, и никогда точно неизвестно, насколько хорош сделанный вашей программой выбор. К тому же, если появился какой-то новый кодек, то K-Lite Codec Pack приходится опять скачивать и устанавливать целиком.

Наконец, есть программы, позволяющие попросту подменить название кодека (например, XVID на DIVX или DIVX на divx). К самым популярным из них относится заточенная под контейнер AVI программа FourCC Code Changer. А программа GSpot, скачать которую можно по адресу http://gspot.headbands.com, позволит диагностировать проблему: открыв в ней файл, можно узнать FourCC-код, название кодека и его наличие/отсутствие в системе.

Ссылки