Предупреждаю, это чисто технический псто! Периодически будет подвергаться правке. Цель написания самообразовательная. На всеобъемлемость не потяну, но тем, кто всё же решится, возможно, будет что-то из этого в новинку, а, возможно, будет и чем дополнить/исправить, за что был бы признателен. Итак...
Если вы сделали пару видео-клипов с красивыми переходами в мувимэйкере или Ulead Video Studio и решили, что "понимаете в цифровом микшировании видео и аудио" - вас, возможно, ожидает что-то новое. Потому что вряд ли вы задумывались, чем вы кодируете свои видео-клипы и что за формат аудио вы в них пихаете. Скажем, если я попрошу назвать три-четыре самых известных видеоформата, вашим ответом скорее всего будет рандомная последовательность вроде: mpeg, avi, mov, 3gp...
Так вот, это неверноТо, что сейчас я перечислил - это, на самом деле, медиа-контейнеры.
Пойдём далее. Как вы думаете, что представляет из себя Windows Media Player (далее - WMP) в winxp и выше? Вы можете смеяться, но на 90% это - графопостроитель. Остальные 10% приходятся на разные функции вроде рипания дисков и трансляции веб-контента через инет.
Туманно? Давайте тогда по порядку. Сначала поговорим о том, как же происходит процесс декодирования видео.
по ссылкам в тексте можно в принципе не ходить, если вам глубоко наплевать на детали, о которых я умолчу.
Значит, начнём с медиа-контейнеров. На примере AVI.
Итак, что же такое медиа-контейнер? Это файло, внутри которого может содержаться несколько потоков аудио и видео. Как правило, видео-поток там один, а вот аудио-потоков может быть несколько - это связано с тем, что, например, у фильма может быть несколько языковых дорожек. Однако, может быть и несколько видео-потоков. Например, у фильма могут быть субтитры, упакованные в контейнер отдельным видео-потоком.
Итак, чтобы узнать, что же у нас в контейнере, нам нужен так называемый сплиттер, который знает, как вскрыть этот контейнер. Например, для AVI в винде уже есть сплиттер - его отдельно качать не нужно.
Сплиттер вскрыл контейнер. Внутри оказались видео-поток MPEG-1, закодированный DivX'ом и аудио-поток MPEG-1, закодированный Fraunhofer MP3 Codec'ом.
Прекрасно. Откуда мы это узнали? Всё "просто": у каждого потока, что сплиттер нам вытащил, есть свой FOURCC. Это нечто вроде идентификатора формата, с помощью которого был закодирован этот поток. Медиа-плеер однако об этом умолчит.Если вы действительно хотите увидеть, чем закодирован тот или иной поток - раньше в таких случаях на помощь приходила программа с прекрасным названием GSpot. Но сегодня GSpot более не развивается и на смену ему пришла MediaInfo.
С другой стороны, поток может и не быть закодированным (что редкость, но встречается). В таком случае, что из себя представляет поток можно понять по его HEX-заголовку. Чаще всего незакодированное аудио - это PCM AUDIO, а видео.... хрен знает, я не встречал, но навскидку - RAW. Но об этом не будем
Итого, у нас есть видео и аудио, но они закодированны. Тут многие скажут: нам нужны кодеки! Это, конечно, верно, но, позвольте немного истории для общего развития...
Давным-давно смотреть видео на компе было возможно только через специальную программу (игру), которая умела это видео декодировать. Никаких общепринятых интерфейсов не было. И вот в Apple придумали способ просматривать видео на компе. Этот способ назвали QuickTime. Ну, в майкрософт не дураки сидят - они быстренько подсуетились и придумали свой интерфейс для проигрывания видео - Video for Windows (VfW). Так в винде и появились чудесные кодеки - программы, использующие интерфейс VfW для работы с видео - кодинг/декодинг. Так, чтобы раскодировать видео в формате DivX нам нужно было просто установить DivX decoder.
Что касается аудио - тут был разработан интерфейс ACM. Принцип тот же: ставим кодек, всё играется.
Однако через пару лет набрал популярность перспективный DirectX, вышел WinXP и интерфейсы VfW и ACM оставили как они есть и придумали новый единый - DirectShow (DS). Теперь, чтобы раскодировать/закодировать видео/аудио нам нужны уже DS-фильтры. Причём, бывает и такое, что для кодинга - отдельный фильтр, для декодинга - другой. Однако, это не означает, что VfW и ACM больше не работают. Правило такое:
Если для нужного формата нет DS-фильтра, используется кодек. Если и кодека нет - ашипка!
Итак, теперь мы выяснили, как в общем случае происходит декодирование медиа-контейнера:
- Плеер распознаёт контейнер и подставляет ему соответствующий сплиттер.
- Сплиттер вытаскивает все потоки, что есть в контейнере.
- Плеер распознаёт форматы потоков и подставляет им соответствующие декодеры (DS-фильтры или кодеки).
Перейдём к практике. Вот пихаете вы медиа-контейнер AVI в WMP. Что происходит? Всё просто: плеер, начинает строить график декодирования. Выглядит это примерно так:
Что мы видим здесь? А видим мы, что реально файл хоть и называется .avi, но это вовсе не контейнер AVI, а контейнер MPEG-1 - да, переименовывать файлы никто не запрещаетИтак, внутри контейнера у нас есть потоки видео и аудио, к ним подставляются соответствующие фильтры (в данном контексте - декодеры) и раскодированные потоки отправляются на соответствующие девайсы для воспроизведения.
Вывод: WMP ничего не декодирует. Он только позволяет нам перемещаться между сэмплами/кадрами в потоке.
Теперь о том, чего нет в WMP. Cитуация: у нас на компе установлено два DS-фильтра или кодека для одного и того же формата. Типичный случай: XviD и DivX. Так вот, открыл я в WMP плохого качества видео, закодированное DivX'ом и меня не устраивает функция удаления блочности в кадрах, которую использует DivX-декодер. Ну я и хочу, чтобы WMP декодировал это видео не DivX'ом, а XviD'ом, который делает это лучше (!просто для примера!). И что же мне делать? А ничего - WMP не позволяет настроить приоритет декодеров. Более того, в интерфейсе WMP сегодня до сих пор нельзя открыть список всех установленных фильтров, чтобы попасть в их конфигурационные диалоги и настроить эти фильтры. А нужно что-то вот такое:
В завершение позвольте пару слов о кодек-паках.
Несмотря на моральное и техническое устаревание кодеков, они по-прежнему собираются. Но, если раньше это была огромная солянка кодеков и сплиттеров, то сегодня большинство из них уже содержит основным компонентом ffdshow.
Что это? Это бесплатный универсальный DirectShow кодер/декодер, поддерживающий великое множество самых популярных на сегодня форматов. Состоит из:
- Фильтр аудио
После установки все самые популярные аудиоформаты можно декодировать им - больше никаких фильтров или кодеков не нужно. Вдовесок куча фильтров для пост-обработки вроде нормализации звука, микшер каналов и громкости, шумоподваление, эквалайзер и т.п. Также есть декодер Dolby и OSD (On-Screen Display - кому надо, тот знает зачем это).
- Фильтр видео
Аналогично, после установки все самые популярные видеоформаты можно декодировать им - больше никаких фильтров или кодеков не нужно. Вдовесок куча фильтров для пост-обработки вроде деинтерлейсинга, деблокинга, регулировки цвета, обрезка, субтитры, масштабирование видео и прочее. Также есть граббер экрана и OSD.
- Encoder для кодирования видео.
XviD и прочее популярное он умеет кодировать сам, без установки соответствующего кодера. Причём поддерживаются все самые популярные методы, в том числе и в два прохода! И всё это - бесплатно, чёрт побери!!!
В общем, это один из самых мощных GNU-проектов, что я когда-либо встречал.
Теперь о минусах из личного опыта:
- К сожалению, хоть ffdshow и умеет декодировать FLAC, но вот вытащить его из FLAC-container'а он не умеет - нужен отдельный сплиттер
- Интерфейс частично переведён на русский, но очень коряво - лучше пользуйте английский.
- Последний стабильный билд - 2010 года, но проект совсем не загнулся. Однако при тестировании этого билда у меня на Win7 в установщике есть проблемы с кодировкой, так что ставьте последний с SVNа! (тут моя благодарность destroyer
)
- Практически полное отсутствие документации, без которой порой очень сложно понять, на что влияют те или иные настройки фильтра или кодера.
Такие дела. Спонсор трансляции - википедия.
Если вам тоже кажется, что вас переполняют знания, вам срочно нужно поддержать спонсора!
P.S.: Далее планирую написать о непосредственно кодировании. Возможно, это даже будет новая запись....
-
Скрыть объявление
Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.
-
Скрыть объявлениеЕсли Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.
Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
- Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
- Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
- Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
- Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
С уважением, администрация форума Old-Games.RU
Комментарии