1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

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

Автор: Goblinit · 21 янв 2012 · ·
  1. Предупреждаю, это чисто технический псто! Периодически будет подвергаться правке. Цель написания самообразовательная. На всеобъемлемость не потяну, но тем, кто всё же решится, возможно, будет что-то из этого в новинку, а, возможно, будет и чем дополнить/исправить, за что был бы признателен. Итак...

    Если вы сделали пару видео-клипов с красивыми переходами в мувимэйкере или Ulead Video Studio и решили, что "понимаете в цифровом микшировании видео и аудио" - вас, возможно, ожидает что-то новое. Потому что вряд ли вы задумывались, чем вы кодируете свои видео-клипы и что за формат аудио вы в них пихаете. Скажем, если я попрошу назвать три-четыре самых известных видеоформата, вашим ответом скорее всего будет рандомная последовательность вроде: mpeg, avi, mov, 3gp...
    Так вот, это неверно :yes: То, что сейчас я перечислил - это, на самом деле, медиа-контейнеры.

    Пойдём далее. Как вы думаете, что представляет из себя Windows Media Player (далее - WMP) в winxp и выше? Вы можете смеяться, но на 90% это - графопостроитель. Остальные 10% приходятся на разные функции вроде рипания дисков и трансляции веб-контента через инет.



    Туманно? Давайте тогда по порядку. Сначала поговорим о том, как же происходит процесс декодирования видео.
    по ссылкам в тексте можно в принципе не ходить, если вам глубоко наплевать на детали, о которых я умолчу.

    Значит, начнём с медиа-контейнеров. На примере AVI.
    Итак, что же такое медиа-контейнер? Это файло, внутри которого может содержаться несколько потоков аудио и видео. Как правило, видео-поток там один, а вот аудио-потоков может быть несколько - это связано с тем, что, например, у фильма может быть несколько языковых дорожек. Однако, может быть и несколько видео-потоков. Например, у фильма могут быть субтитры, упакованные в контейнер отдельным видео-потоком.
    Итак, чтобы узнать, что же у нас в контейнере, нам нужен так называемый сплиттер, который знает, как вскрыть этот контейнер. Например, для AVI в винде уже есть сплиттер - его отдельно качать не нужно.
    Сплиттер вскрыл контейнер. Внутри оказались видео-поток MPEG-1, закодированный DivX'ом и аудио-поток MPEG-1, закодированный Fraunhofer MP3 Codec'ом.
    Прекрасно. Откуда мы это узнали? Всё "просто": у каждого потока, что сплиттер нам вытащил, есть свой FOURCC. Это нечто вроде идентификатора формата, с помощью которого был закодирован этот поток. Медиа-плеер однако об этом умолчит.
    С другой стороны, поток может и не быть закодированным (что редкость, но встречается). В таком случае, что из себя представляет поток можно понять по его HEX-заголовку. Чаще всего незакодированное аудио - это PCM AUDIO, а видео.... хрен знает, я не встречал, но навскидку - RAW. Но об этом не будем :yes:

    Итого, у нас есть видео и аудио, но они закодированны. Тут многие скажут: нам нужны кодеки! Это, конечно, верно, но, позвольте немного истории для общего развития...


    Давным-давно смотреть видео на компе было возможно только через специальную программу (игру), которая умела это видео декодировать. Никаких общепринятых интерфейсов не было. И вот в Apple придумали способ просматривать видео на компе. Этот способ назвали QuickTime. Ну, в майкрософт не дураки сидят - они быстренько подсуетились и придумали свой интерфейс для проигрывания видео - Video for Windows (VfW). Так в винде и появились чудесные кодеки - программы, использующие интерфейс VfW для работы с видео - кодинг/декодинг. Так, чтобы раскодировать видео в формате DivX нам нужно было просто установить DivX decoder.
    Что касается аудио - тут был разработан интерфейс ACM. Принцип тот же: ставим кодек, всё играется.
    Однако через пару лет набрал популярность перспективный DirectX, вышел WinXP и интерфейсы VfW и ACM оставили как они есть и придумали новый единый - DirectShow (DS). Теперь, чтобы раскодировать/закодировать видео/аудио нам нужны уже DS-фильтры. Причём, бывает и такое, что для кодинга - отдельный фильтр, для декодинга - другой. Однако, это не означает, что VfW и ACM больше не работают. Правило такое:
    Если для нужного формата нет DS-фильтра, используется кодек. Если и кодека нет - ашипка!

    Итак, теперь мы выяснили, как в общем случае происходит декодирование медиа-контейнера:
    1. Плеер распознаёт контейнер и подставляет ему соответствующий сплиттер.
    2. Сплиттер вытаскивает все потоки, что есть в контейнере.
    3. Плеер распознаёт форматы потоков и подставляет им соответствующие декодеры (DS-фильтры или кодеки).

    Перейдём к практике. Вот пихаете вы медиа-контейнер AVI в WMP. Что происходит? Всё просто: плеер, начинает строить график декодирования. Выглядит это примерно так:
    [​IMG]

    Что мы видим здесь? А видим мы, что реально файл хоть и называется .avi, но это вовсе не контейнер AVI, а контейнер MPEG-1 - да, переименовывать файлы никто не запрещает ;) Итак, внутри контейнера у нас есть потоки видео и аудио, к ним подставляются соответствующие фильтры (в данном контексте - декодеры) и раскодированные потоки отправляются на соответствующие девайсы для воспроизведения.

    Вывод: WMP ничего не декодирует. Он только позволяет нам перемещаться между сэмплами/кадрами в потоке.
    Теперь о том, чего нет в WMP. Cитуация: у нас на компе установлено два DS-фильтра или кодека для одного и того же формата. Типичный случай: XviD и DivX. Так вот, открыл я в WMP плохого качества видео, закодированное DivX'ом и меня не устраивает функция удаления блочности в кадрах, которую использует DivX-декодер. Ну я и хочу, чтобы WMP декодировал это видео не DivX'ом, а XviD'ом, который делает это лучше (!просто для примера!). И что же мне делать? А ничего - WMP не позволяет настроить приоритет декодеров. Более того, в интерфейсе WMP сегодня до сих пор нельзя открыть список всех установленных фильтров, чтобы попасть в их конфигурационные диалоги и настроить эти фильтры. А нужно что-то вот такое:
    [​IMG]


    В завершение позвольте пару слов о кодек-паках.
    Несмотря на моральное и техническое устаревание кодеков, они по-прежнему собираются. Но, если раньше это была огромная солянка кодеков и сплиттеров, то сегодня большинство из них уже содержит основным компонентом ffdshow.
    Что это? Это бесплатный универсальный DirectShow кодер/декодер, поддерживающий великое множество самых популярных на сегодня форматов. Состоит из:
    1. Фильтр аудио
      [​IMG]
      После установки все самые популярные аудиоформаты можно декодировать им - больше никаких фильтров или кодеков не нужно. Вдовесок куча фильтров для пост-обработки вроде нормализации звука, микшер каналов и громкости, шумоподваление, эквалайзер и т.п. Также есть декодер Dolby и OSD (On-Screen Display - кому надо, тот знает зачем это).

    2. Фильтр видео
      [​IMG]
      Аналогично, после установки все самые популярные видеоформаты можно декодировать им - больше никаких фильтров или кодеков не нужно. Вдовесок куча фильтров для пост-обработки вроде деинтерлейсинга, деблокинга, регулировки цвета, обрезка, субтитры, масштабирование видео и прочее. Также есть граббер экрана и OSD.

    3. Encoder для кодирования видео.
      [​IMG]
      XviD и прочее популярное он умеет кодировать сам, без установки соответствующего кодера. Причём поддерживаются все самые популярные методы, в том числе и в два прохода! И всё это - бесплатно, чёрт побери!!!

    В общем, это один из самых мощных GNU-проектов, что я когда-либо встречал.

    Теперь о минусах из личного опыта:
    • К сожалению, хоть ffdshow и умеет декодировать FLAC, но вот вытащить его из FLAC-container'а он не умеет - нужен отдельный сплиттер :(
    • Интерфейс частично переведён на русский, но очень коряво - лучше пользуйте английский.
    • Последний стабильный билд - 2010 года, но проект совсем не загнулся. Однако при тестировании этого билда у меня на Win7 в установщике есть проблемы с кодировкой, так что ставьте последний с SVNа! (тут моя благодарность destroyer :rolleyes:)
    • Практически полное отсутствие документации, без которой порой очень сложно понять, на что влияют те или иные настройки фильтра или кодера.



    Такие дела. Спонсор трансляции - википедия.
    Если вам тоже кажется, что вас переполняют знания, вам срочно нужно поддержать спонсора!


    P.S.: Далее планирую написать о непосредственно кодировании. Возможно, это даже будет новая запись....

Комментарии

  1. hobot
    А я обрадовался - думал конкурс на лучшее название какого-нибудь проекта )))
  2. Goblinit
    Всё верно, это проект по самоуничтожению. Присылайте ваши рисунки, победитель отправится со мной на экскурсию в преисподнюю :crazy:
  3. INHELLER
    А чё. Мне понравилось. Тем более, это для меня тёмный лес (но про то что это контейнеры, я знал!). Знаю только что нужно рендерить последовательность изображений в формате tif (32 bit float), для дальнейших извращений.
      Goblinit нравится это.
  4. Goblinit
    INHELLER, отлично, это стимул)

    Вот это несовсем понял, можешь подробней? Вероятно, до этого я ещё не докопался))
  5. Лорд Лотар
    Занятно, интересный пост. Но к сожалению, для меня практической ценности не представил, ибо работа с видео лежит за моей сферой интересов. Хотя старания тов. Гоблинита достойны восхищения, ага.
  6. INHELLER
    Goblinit
    Тут всё очень просто. Цвет кодируется не от 0 до 255 (8 бит на канал), а от 0 до... и так: 1 это 100% канала. А больше 1 уже более высокие значения. Используется 32 бита на канал. В виде float переменных.
    Сами рендеры (если они не древность) рендерят именно так и только потом конвертируют картинку в привычный вид. А Рендермен совместимые вообще в 64 битном цвете.
    Это всё даёт гарантию, что информация не потеряется.
      Goblinit нравится это.
  7. Teron Lifeslayer
    Устройте годный философский срач диспут на тему десятибитной глубины цвета :crazy:
  8. Goblinit
    Лучше о медиа-плеерах. Давайте я начну:

    Winamp - гавно!!!
  9. Teron Lifeslayer
    GOM кстати тоже тот еще изврат =) Они еще не пофиксили маразм с вылетом при попытке открыть ifo'шку?
  10. Goblinit
    > Teron Lifeslayer
    Вобы открываются, ифошки пока не проверял) Но в списке поддерживаемых расширений :) они есть.
    В ГОМе бесит другое: после установки mp3- и wma-файлы по прежнему играются через WMP - и поменять это через настройки GOM нельзя!!! приходится заниматься рукоприкладством. Ну и русский у корейцев неочень ;) , а как английский там выставить я тоже не увидел...

    Хорошо, какой по-твоему, хороший плеер?
Чтобы оставить комментарий просто зарегистрируйтесь и станьте участником!
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление