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

Автор: Lucy

Печать

Бездна ссылок - Фильмы, клипы и другое видео

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


***Проблемы с просмотров различных видеофайлов в большинстве случаев связаны с установленным в системе кодеками или их набором (кодек-паком, например, 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.

***Для извлечения из контейнера потоков видео, аудио и субтитров и их разделения используются специальные библиотеки 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 (аудио) - описывают формат сжатия картинки и звука, а также определяют, что нужно для их декодирования. Однако для воспроизведения видеоряда не обязательно должен применяться тот же кодек, что и для компрессии. Пример XviD воспроизводится DivX -ом даже лучше чем родным кодеком.  

Форматы сжатия видео


***Наиболее популярным является 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 и ведется б0льшая часть спутникового вещания. По сравнению с 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, для видео иногда требуются декодеры 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 Codec" находится необходимая нам информация. Теперь стоит заглянуть в настройки FFDshow (ярлык "Video decoder configuration"), поскольку по умолчанию включена поддержка только самых основных форматов (из полусотни 'знакомых' программе). Если нужного там не окажется, то узнать, какому кодеку соответствует полученный FourCC-код, можно в уже упомянутой программе GSpot, выбрав в меню "Tables" пункт "Video Codecs". Если и это не поможет, то просматриваем большой список FourCC-кодов, расположенный по адресу, там же есть и ссылки на страницы закачки описанных кодеков. 

Кодек-паки


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

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

Непрошенные кодеки


***Читатель, последовавший моим советам, может задать вопрос: "А откуда возьмется неправильный декодер, если я его не инсталлировал?" Это происходит из-за того, что некоторые приложения считают своим долгом установить различные кодеки и сплиттеры, даже не спрашивая разрешения у пользователя. В первую очередь этим грешат программы для обработки видео в 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..." контекстного меню. В появившемся окне перемещаем ползунок вниз до значения "0200000" (don't use) (можно и ниже, но нежелательно). После данной операции этот кодек будет использоваться, только если программа явно к нему обратится.

***Последняя группа недоразумений при воспроизведении видео связана с возможной несовместимостью декодеров/сплиттеров с видеоплеерами, ошибками самих декодеров и случаями повреждения видеофайлов. Первую ситуацию диагностировать просто: достаточно открыть файл в другом проигрывателе (или даже в 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". После окончания этой процедуры идем в меню "File", "Save As", указываем новое имя для исправленного файла и внизу окна в пункте "Video Mode" выбираем "Direct Stream Copy". В результате получаем рабочий файл с частями видео, которые не были повреждены и были восстановлены