NeveR_Mind Теорией MJPEG не интересовался, а вот по поводу остального - следующее:
Цитата: Второй тип кодеков производит сравнение двух соседних кадров. При точном совпадении кадров, считается, что записывать второй кадр не нужно. При каких-то незначительных изменениях, производится запись только изменившейся части, остальная часть забирается из предыдущего кадра.
По этому алгоритму работают все Mpeg кодеки и их клоны: XviD, DivX, WMV, Quick Time и др...
Не совсем правильно. Не ст0ит путать принципы работы алгоритмов сжатия цифрового видео собственно с этими алоритмами, как они есть на самом деле.
Да, стандарт MPEG подразумевает что при кодировании используется несколько типов кадров: ключевые (K-frames) - кодируются полностью, промежуточные (I-frames) - содержат данные о смещении и видоизменении изображения по отношению к ключевому кадру, а в MPEG-4 также - двунаправленные (B-frames), т.е. I-frames, использующие часть информации не предыдущего, а следующего за ними ключевого кадра.
Во всех алгоритмах сжатия MPEG используется разбиение картинки на макроблоки (8х8 пикселов) и описание данных по блокам, поэтому размер картинки должен быть кратным 8 по вертикали и по горизонтали, и характерный артефакт при нехватке битрейта - собственно, отображение границ этих самых блоков.
Только вот MPEG-1 и MPEG-2, в отличие от MPEG-4, не подразумевают усовершенствованного алгоритма абстрактного описания кадра с помощью объектов (цветовых областей) и 4-х векторов движения на каждый макроблок (отсюда и произошло название стандарта, ведь МР3 - это не "MPEG-3", это MPEG-1 Audio Layer-3). Есть и еще ряд других принципиальных усовершенствований, благодаря которым при том же битрейте MPEG-4 позволяет получить едва ли не на порядок более выскокое качество (при правильной настройке кодировщика).
Но вернемся к существу вопроса. Итак, стандарт - это одно, а его реализация (конкретный алгоритм) - совсем другое. Поэтому и существуют различные кодеки и DShow-фильтры для разных форматов; универсальные фильтры, такие как ffdshow - тоже используют индивидуальные алгоритмы для декодирования разных форматов, просто "движок" декодера, не зависящий от формата - клиентский модуль DShow (сама подсистема DShow тоже представляет собой объединеннную реализацию функций декодирования, не зависящих от особенностей алгоритма и определяемых стандартом, в то время как универсальные декодеры - ffdshow, divxdec, xvid - реализуют независимое декодирование для конкретного _уровня_ стандарта, в данном случае - MPEG-4. Кроме того, XviD основан на OpenDivX - открытых исходниках DivX 4, так что вот почему они так дружат).
AVI и VOB - это форматы контейнеров (транспортного уровня), предназначенные для объединения нескольких аудио-/видеопотоков в одном файле, с синхронизацией по времени. AVI расшифровывается как "Audio/Video Interleave", указывая этим на то, что пакеты данных каждого потока чередуются в общем потоке, так же как и в других форматах-контейнерах, таких как M$ ASF (Advanced Streaming Format), MKV (Matroska), OGM (OGG Media File). У некоторых форматов есть свои ограничения - например, видеопоток стандарта MPEG-4 невозможно объединить в файле AVI c аудиопотоком OGG Vorbis, специально для этого существует формат OGM, итп. В AVI же может быть включен аудиопоток стандартов PCM (wav), AC3, MPEG-1 Audio Layer-3 (MP3).
Кодек (компрессор-декомпрессор) отличается от DShow фильтра тем, что в основе первого лежат проприетарные алгоритмы определенного стандарта сжатия - как правило, есть дополнительные настройки в том числе и для декодирования, итп. Это серьезный компонент, который дает максимум возможностей по работе с конкретным форматом или несколькими очень схожими форматами.
Фильтр DShow - это форматно-зависимый уровень, клиентское расширение DShow, привязанное к проприетарному формату или нескольким, декодируя их лишь до уровня, необходимого для приведения данных потока на выходе к виду, отвечающему стандартам с которыми имеет дело DShow. По самому определению, фильтры DShow предназначены исключительно для покадрового декодирования потока, и не предназначены для более серьезных процедур, таких как редактирование - хотя бы потому, что без DShow они ни на что не годны, а DShow, опять же - средство воспроизведения, не чего-либо еще, поэтому например для VirtualDUB требуется установленный полноценный кодек формата, с которым предполагается работать.
Что касается .rm - это никак не AVI, это один из тех случаев когда отдельная контора создает собственные форматы и для потока, и для контейнера. Возможно, изначально формат RealVideo / RealAudio и был основан на MPEG, а контейнер RealMedia - на AVI или чем-то еще, но ныне это крайне своеобразный формат, проигрывается главным обраазом через свой собственный плеер и кодек (хотя уже сочинили и альтернативный кодек, и даже DShow-фильтр для RM)
Почти аналогичная ситуация с QuickTime (MOV), хотя это уже в данном случае - контейнерный формат, а форматы потоков в нем могут быть например и MPEG-4 (Sorenson Video) + AAC. Но опять же, MOV - это "придворный" формат Apple, и закрыт их патентами, в отличие от разрабатываемых широкими консорциумами MPEG и AVI.
Итак, форматы потоков - MPEG итп, форматы контейнеров - AVI и другие, контейнеры MPEG-1 System и MPEG-2 System содержат потоки форматов MPEG-1/2 Video и MPEG-1 Audio Layer 1, 2, 3 или ADPCM, AC3 (для MPEG-2).
Кстати, аудиопотоки различных форматов также могут быть включены в один транспортный уровень: например, MP4/M4A может содержать поток ААС, OGG - может содержать не только Vorbis - эффективную замену МР3, но и FLAC - звук сжатый без потерь, и, вероятно - Speex, специальный формат для сжатия речи.