Обзоры
Все что нужно знать о кодеках

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


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

Теория

Обычный видеофайл содержит в себе видеодорожку, одну или несколько дорожек со звуком, одну или несколько дорожек с субтитрами, служебную информацию об используемых форматах сжатия, так называемый индекс (блок с адресами расположения конкретных участков записи, применяется во время «перемотки»), набор текстовых полей. Формат, в котором хранится эта информация в файле, именуется контейнером. Наиболее популярным на данный момент является контейнер AVI (Audio and Video Interleaved), достаточно распространены MPEG1/2 (расширения файлов – mpg/mpe/vob), Advanced Streaming Format (asf), OGG Media (ogg), Matroska (mkv), Real Media (rm/rv/ram), QuickTime (mov/qt), начал завоевывать аудиторию контейнер MPEG4 (mp4). Кроме того, существует еще DivX Media (divx), появившийся вместе с шестой версией одноименного кодека и представляющий собой расширенный, но обратносовместимый вариант контейнера AVI. Сейчас DivX Media жалуют немногие, и, скорее всего, он не приживется.

Для извлечения из контейнера потоков видео, аудио и субтитров и их разделения используются специальные библиотеки Windows – сплиттеры, или демультиплексоры. По умолчанию в Windows (начиная с Win2000) имеются сплиттеры для AVI, MPEG1/2 и ASF. Все остальные необходимо устанавливать отдельно, что будет подробно описано ниже.

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

Видеокодеки бывают нескольких типов – Video for Windows (VfW), DirectShow (DSH) и DirectX Media Object (DMO). Практически во всех плеерах при воспроизведении применяется DirectShow; а кодеки VfW используются некоторыми программами для сжатия видео, в частности очень популярной VirtualDub/VirtualDubMod. Кодеки типа DMO являются скорее подвидом DirectShow и отличаются тем, что часть их функций перекладывается на приложение, воспроизводящее видео, и по этой причине подобный тип не особо популярен. Аудиокодеки также делятся на несколько видов – Audio Compression Manager (ACM), использующийся в паре с VfW, и аналогичные видео DirectShow и DirectX Media Object. Специальные коды – FourCC (видео) и TwinCC (аудио) – описывают формат сжатия картинки и звука, а также определяют, что нужно для их декодирования. Однако для воспроизведения видеоряда не обязательно должен применяться тот же кодек, что и для компрессии.

Вернемся к форматам сжатия видео. Наиболее популярным является MPEG4, представленный в виде нескольких слегка различающихся кодеков. Сам стандарт состоит из 19 частей, каждая из которых описывает определенные возможности кодека, и еще 3 находятся в процессе разработки. Все имеющиеся сейчас кодеки MPEG4, за исключением принадлежащих к стандарту H.264, представляют собой реализацию MPEG4 Part 2. Кодеки стандарта H.264 являются реализацией MPEG4 Part 10. Наиболее известными кодеками формата MPEG4 являются DivX, XviD и Windows Media Video. Кроме обычных, существуют и так называемые HD-версии, которые отличаются большим поддерживаемым разрешением – до 1920×1080 точек.

Второй по популярности (но первым по качеству) – это формат MPEG2. В нем кодируется видео на дисках DVD-Video и ведется бóльшая часть спутникового вещания. По сравнению с MPEG4 для кодирования информации с тем же качеством формату MPEG2 необходим больший битрейт. Преимущество же MPEG2 состоит в том, что ему доступны более высокие битрейты (вплоть до 25 Mbps), а кроме того, видео в MPEG2 не страдает некоторыми «болезнями» MPEG4 (вроде ступенчатости на плавном цветовом переходе).

Формат MPEG1 на данный момент практически исчез из обихода, его можно встретить разве что в старых роликах или на Video-CD. Средства его декодирования уже давно встроены в систему.

Как было сказано выше, информация о том, каким именно кодеком упаковано видео в файле, представляется в виде FourCC-кода, состоящего из четырех символов. Каждый кодек имеет свой уникальный FourCC-код, однако в целях совместимости иногда при кодировании указывается «чужой» FourCC-код. Допустим, если видео планируется смотреть на стационарном плеере, то при сжатии его с помощью FFDshow стоит указать FourCC не FFDS, а DivX или XviD, иначе файл почти наверняка не воспроизведется.

Теперь перейдем к форматам сжатия аудио. Бесспорным (пока) лидером здесь является MP3 (полное название – MPEG1 Layer 3). Основной его недостаток – поддержка всего двух каналов аудио. Такого ограничения нет у созданного на его основе формата AAC, а также у технологий AC3 (Dolby Digital) и DTS. Формат Windows Media Audio, затевавшийся как конкурент MP3 и дающий возможность добиться лучшего качества на низких битрейтах, к настоящему времени обзавелся поддержкой многоканального звука и выступает уже как конкурент AAC. Достаточно популярен и OGG Vobris, который позволяет получить качество, сравнимое с MP3, на более низких битрейтах, или более высокое – на равных. Информация о формате аудио хранится в TwinCC-коде, представляющем собой комбинацию из четырех цифр, к примеру 0055 для MP3.

Практика

От теории перейдем к практике. Начнем со сплиттеров: по умолчанию (здесь и далее речь идет о Windows XP) в системе установлены сплиттеры для avi, mpg, mpe, vob и asf. Сплиттеры для Real Media, QuickTime и DivX идут в комплекте с соответствующими проигрывателями от компаний-разработчиков. Для ogg, mkv/mka/mks и mp4 существует несколько различных сплиттеров, но наилучшим выбором является Haali Media Splitter, поддерживающий все эти контейнеры. В случае если по каким-то причинам он не подходит, необходимо устанавливать отдельные сплиттеры для каждого из контейнеров. Взять их можно, к примеру, с сайта.

С кодеками дела обстоят намного хуже. Из видеокодеков по умолчанию имеются декодер MPEG1, декодер и энкодер Windows Media Video, достаточно старая версия MPEG4 от Microsoft и еще несколько штук для устаревших и практически не используемых форматов. С аудио ситуация получше – наличествуют декодеры и энкодеры MP3 (с ограничением у энкодера до 56 Kbps), Windows Media Audio и пара почти списанных в утиль кодеков. Обычно проблема ограниченного количества кодеков решается с помощью кодек-пака, но мы предлагаем сделать по-другому – установить FFDshow. После его инсталляции будем иметь поддержку практически всех необходимых форматов, включая новейший H.264. Однако по умолчанию она распространяется только на DirectShow-приложения. Кодек формата VfW в систему устанавливается, но изначально он декодирует только собственные форматы FFDS/FVFW. Для использования же других в VfW-приложениях необходимо запустить VFW codec configuration и на вкладке Decoder в разделе Кодеки самостоятельно выбрать нужные форматы.

Все что нужно знать о кодеках
Настройки видеодекодера ffdshow по-умолчанию

Кроме FFDshow, для видео иногда требуются декодеры RealMedia и QuickTime. Можно, конечно, установить родные программы от Real Networks и Apple, но они громоздки и весьма неудобны. Мы рекомендуем обратить внимание на альтернативные пакеты – Real Alternative и QuickTime Alternative, которые представляют собой извлеченные из оригинальных программ необходимые сплиттеры и кодеки, причем использовать их способен любой проигрыватель формата DirectShow. В комплекте с кодеками идет также Media Player Classic, наиболее удобный для просмотра видео в этих форматах (у ряда других плееров есть проблемы с воспроизведением звука).

От видео ненадолго перейдем к аудио. Аудиодекодер FFDshow поддерживает все более-менее распространенные форматы аудио, и для просмотра фильмов ничего, кроме него, устанавливать уже не надо. Однако если вам понадобится сжимать звук в формат MP3, то необходимо будет заменить стандартный энкодер MP3 от Microsoft на Lame MP3 Encoder, скачать который также можно с сайта.

Решение проблем

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

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

Если файл отказывается воспроизводиться, необходимо выяснить, какого именно системного компонента не хватает для нормальной работы. В первую очередь – определить тип контейнера у данного файла и убедиться, установлен ли в системе соответствующий сплиттер. Если да, то, скорее всего, загвоздка в отсутствии кодека. Узнать его FourCC-код поможет программа GSpot, скачать которую можно по адресу. Открываем в ней проблемный файл, и в правой верхней части окна видим FourCC-код, название кодека и его наличие/отсутствие в системе. К сожалению, GSpot работает только с контейнерами AVI и MPEG1/2, потому в случае новых ogg, mkv или mp4 придется действовать иначе. Открываем файл в VirtualDubMod, в меню File выбираем пункт File Information – в строке FourCC Code находится необходимая нам информация. Теперь стоит заглянуть в настройки FFDshow (ярлык Video decoder configuration), поскольку по умолчанию включена поддержка только самых основных форматов (из полусотни «знакомых» программе). Если нужного там не окажется, то узнать, какому кодеку соответствует полученный FourCC-код, можно в уже упомянутой программе GSpot, выбрав в меню Tables пункт Video Codecs. Если и это не поможет, то просматриваем большой список FourCC-кодов, расположенный по адресу, там же есть и ссылки на страницы закачки описанных кодеков.

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

Перейдем к следующей проблеме, которая встречается намного чаще. Файл открывается, начинается воспроизведение, однако изображение отсутствует или выводится неправильно. Причиной этого обычно является использование неподходящего декодера или, что бывает намного реже, ошибка в декодере. И тут надо объяснить, почему не стоит применять кодек-паки – чаще всего виновниками подобных недоразумений оказываются именно они. В качестве примера возьмем достаточно популярный K-Lite Codec Pack. Его полная версия представляет собой свалку всего, что попало под руку составителю. Отметим самые яркие проявления подобного подхода: в K-Lite Codec Pack Full имеются три кодека для MPEG2 (не считая FFDshow), столько же сплиттеров для MPEG2, по три кодека для MP3, AAC и AC3, из кодеков MPEG4, кроме последних версий DivX, XviD и FFDshow, есть редко встречающийся 3ivX Pro и старые версии MS MPEG4 и DivX 3.11. После установки подобной «солянки» вероятность того, что для декодирования будет использован не самый подходящий кодек, многократно возрастает. Да, бывают и достаточно сбалансированные кодек-паки, но им присущ еще один недостаток: как только обновляется один из компонентов кодек-пака, приходится закачивать заново весь сборник.

Все что нужно знать о кодеках
Для декодирования файла в системе может использоваться не обязательно лучший видеокодек, к счастью, в этой системе наибольший приоритет у ffdshow
Все что нужно знать о кодеках
Источник проблем с видео найден, это установивший себе наибольший приоритет декодер Nero

Вернемся к проблеме неправильного декодера. Читатель, последовавший советам практической части нашей статьи, может задать вопрос – а откуда возьмется неправильный декодер, если я его не инсталлировал? Это происходит из-за того, что некоторые приложения считают своим долгом установить различные кодеки и сплиттеры, даже не спрашивая разрешения у пользователя. В первую очередь этим грешат программы для обработки видео в MPEG2/4, ПО для тюнеров, DVD-плееры и даже Nero Burning ROM – последний при установке добавляет в систему больше десятка своих кодеков и сплиттеров для форматов MPEG2/4 и QuickTime; при инсталляции InterVideo WinDVD 7 без спроса устанавливаются кодеки DivX 6. Имеют такое свойство и игры: к примеру, демо-версия Mayabin3 без спроса внедряет в систему кодек XviD и предлагает добавить еще ogg splitter неизвестно какой давности. К тому же штатной возможности удалить такой кодек игра не предоставляет, так что после ее деинсталляции чистить систему приходится вручную. Стоит отметить, что проблемы с воспроизведением видео возникают не из-за простой установки дополнительных продуктов, а из-за того, что подобные программы назначают своим кодекам бóльшие приоритеты, то есть подменяют ими уже имеющиеся в системе.

Бороться с «нелегалами» достаточно легко. Например, файлы кодеков можно просто удалить. Однако некоторые из них бывают нужны для нормального функционирования инсталлировавших их программ, и потому лучше оставить новые кодеки в системе, но не давать их использовать никаким приложениям, кроме «родного». Сделать это можно с помощью уже упоминавшейся программы GSpot. Открываем в ней файл, при воспроизведении которого задействуется неправильный кодек, и в разделе Proposed Codec Solutions and Test нажимаем кнопку 1 под надписью A/V. В текстовом поле справа появится информация о кодеках, которые будут использоваться для проигрывания данного файла. Узнав название «лишнего» кодека, идем в меню Options и выбираем пункт Settings. Активируем Expert Mode: Enable codec management functions on menus, что позволит управлять приоритетом кодеков прямо из программы. Закрываем окно настроек, выбираем в меню System команду List Codecs and Other Filters. В появившемся списке находим необходимый кодек, щелкаем на нем правой кнопкой и останавливаемся на опции Set Filter Merit… контекстного меню. В появившемся окне перемещаем ползунок вниз до значения 0×200000 (можно и ниже, но нежелательно). После данной операции этот кодек будет использоваться, только если программа явно к нему обратится.

Последняя группа недоразумений при воспроизведении видео связана с возможной несовместимостью декодеров/сплиттеров с видеоплеерами, ошибками самих декодеров и случаями повреждения видеофайлов. Первую ситуацию диагностировать просто: достаточно открыть файл в другом проигрывателе (или даже в GSpot), и если проблема исчезла, то ее источник – именно несовместимость плеера и кодека. Когда воспроизведение файла затруднено и в другом проигрывателе, скорее всего виновником этого является ошибка в кодеке, и стоит либо обновить его, либо, наоборот, вернуться к более старой версии, на которой подобных ошибок не наблюдалось. Если же файл поврежден, его можно попытаться исправить с помощью VirtualDubMod. Данный способ годится только для файлов в контейнерах avi, mkv или ogg. В меню File выбираем команду Open, ставим внизу окна галочку возле пункта Ask for extended options after this dialog, находим нужный файл и нажимаем Открыть. В появившемся окне отмечаем птичкой пункт Re-derive keyframe flags и жмем OK. По завершении операции выбираем в меню Video в пункте Scan video streams for errors подпункт Scan. После окончания этой процедуры идем в меню FileSave As, указываем новое имя для исправленного файла и внизу окна в пункте Video Mode выбираем Direct Stream Copy. В результате получаем рабочий файл с частями видео, которые не были повреждены.


Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: