Монтаж и работа с контейнерами (avi, mkv, mp4, ts)
В данной инструкции описаны типичные монтажные операции над видеофайлами, такие как:
склеика/разрезание.
извлечение/вставка звуковой дорожки или субтитров.
создание сэмпла для раздачи.
создание глав и ссылок (для контейнера mkv).
1. Как устроена видеопоследовательность: При сжатии видео используется 3 типа кадров: I, P и B - frames. I-frames - это кадры без сжатия. Вернее, сжатие производится с очень небольшими коэффициентами компрессии. I-frames так же называются ключевыми кадрами. При просмотре сжатого фильма, вся навигация по фильму производится через ключевые кадры. После I-frames следует последовательность P-frames например так: IPPPPPPPPPPPPPPPPIPPPPPPP и так далее. P-frames имеет гораздо больший коэффициент сжатия. Для того, что бы повысить коэффициент сжатия, были введены B-frames. Они ставятся между двумя менее сжатыми кадрами (I, P-frames). Последовательность получается такой: IPBPBPBPBPBPBPIPBPBPBP… Коэффициент сжатия B-frames больше, чем коэффициент сжатия P-frames. Это достигается тем, что он сравнивается с 2 окружающими кадрами, а в B-frames записывается, чем он отличается от них. Но вместе с этим, это накладывает определённые ограничения. Например, видеопоследовательность не может заканчиваться B-frames. Начинаться же видеоряд должен обязательно с I-frames. В нём содержится вся информация об изображении. В P-frames и B-frames содержится информация не удалённая кодеком во время сжатия, что так же накладывает определённые трудности при монтаже сжатого материала.
2. Как получить информацию о содержимом видеофайла: С помощью программ: GSpot
MediaInfo 3. Контейнеры: а). Контейнер avi: Описание: Компания Microsoft впервые выпустила пакет Video for Windows для операционной системы Windows 3.1 в ноябре 1992 года, и с тех пор формат AVI (Audio Video Interleave) является основным для хранения видео в операционных системах семейства Windows. Основное преимущество универсального формата AVI (и, кстати, «секрет» его долголетия), в отличие от потоковых форматов типа MPEG, а тем более от таких специализированных разновидностей, как MP3 (MPEG Audio Layer 3), в том, что «стандартных» AVI-файлов практически не существует: AVI — фактически не более чем «контейнер», который содержит общее описание содержимого в стандартизованном виде. Таким образом, AVI-файлы только внешне выглядят одинаково, но внутри они могут сильно различаться, и, в то время как MPEG-, MP3- и MJPEG-файлы содержат потоки только определенного вида сжатия (компрессии), AVI может содержать много различных видов компрессии в любых сочетаниях. Однако работать с AVI-файлом можно будет только пока необходимый кодек доступен для кодирования/декодирования. Серьезным недостатком AVI-формата является то, что аудио- и видеофрагменты не содержат никаких меток времени или индексов кадра. Данные упорядочиваются по времени последовательно, в порядке поступления. Приложение для захвата или проигрывания видео должно само позаботиться о синхронизации видео- и аудиопотоков. Но если деление видео на кадры совершенно естественно, то звук представляет собой непрерывный поток, который приходится искусственно расчленять на фрагменты, соответствующие кадрам (из-за этого точная синхронизация изображения и звука часто отсутствует и звук может 'расходиться' с изображением). В простейшем случае каждому кадру видео соответствует кусок звукового сопровождения, но далеко не все AVI-файлы делаются по этой простой схеме. Недостаток временных меток был устранен в расширении AVI-формата - OpenDML AVI (поддержанный затем в DirectShow и в ActiveMovie), которое добавляет новые куски по меткам времени. Контейнер уже давно устарел и все никак не хочет уходить на пенсию, причем подавляющая часть медиа контента в сети до сих пор распространяется именно в нем. Минусы:
Для каждой цепочки AVI-файла теряется 24 байта на заголовки и индекс. Это приводит к потерям чуть более 5МБ/час.
Может быть сохранено только содержимое с фиксированной частотой кадров. Т.е. не возможно поместить в AVI смешанный материал, например, смесь NTSC видео и киноматериала. В действительности, есть хаки, позволяющие сохранять содержимое с переменным fps в AVI, но они увеличивают (и без того большую) избыточность впятеро или более того и поэтому непрактичны.
Аудио в AVI-файлах должно быть или с постоянным битпотоком (CBR) или с постоянным размером кадра (т.е. все кадры декодируются в одно и то же число выборок).
AVI не способен отличить P-кадр от B-кадра. Не предусмотрено спецификацией. DivX / Xvid решают эту проблему в обход спецификации, что тоже не совсем хорошо и может создавать проблемы.
Контейнер AVI создавался для работы через интерфейс VfW (Video for Windows) и как раз VidtualDub является программой использующей исключительно VfW. Поскольку VfW является сильно устаревшим и не гибким, современные программы используют DS (DirectShow). Программы использующие DS замечательно работают с контейнерами под DS заточенными, но вот с VfW возникают проблемы в виде расхождения аудио и видеодорожек. Поэтому не следует использовать для работы с AVI-файлами программы, работающие не через VfW.
Отсутствует поддержка современных кодеков.
Структура: В соответствии с общей структурой RIFF-типа, AVI-файл должен иметь следующий вид:
Quote
RIFF 'AVI ' // четырехбуквенный идентификатор
файла (в RIFF-формате)
LIST 'hdrl' // список заголовков блоков, определяющих форматы потоков
LIST 'movi' // блоки данных (потоков) AVI-файла
'idx1' // необязательный блок, определяющий размещение блоков данных внутри AVI-файла <AVI Index>
То есть в AVI-файле должно быть по крайней мере два обязательных блока: заголовка и данных, которые, в свою очередь, могут содержать подблоки. Первый блок будет содержать общую информацию о видеоролике: разрешение кадров и их частоту, формат аудио и т.д. Сначала в заголовке для записи длины потока отводилось 32 байт, поскольку в файловой системе FAT 16 максимальный раздел диска не мог превышать 2 Гбайт, поэтому и максимальный кусок видео, который можно было записывать в AVI-файле, не мог превышать 2 Гбайт (с учетом знака переменной размера). Во времена возникновения формата казалось естественным, что длина файла не может превышать размер логического диска. С появлением файловых систем FAT 32 и NTFS верхняя граница размера раздела значительно отодвинулась, однако потребовалось еще немало времени, чтобы ввести расширение формата и дождаться программ, способных это ограничение обходить. Список 'hdrl' может состоять из подсписков:
LIST 'hdrl' // список заголовков блоков, определяющих форматы потоков
'avih' // главный заголовок AVI-файла
LIST 'strl'
'strh' // заголовок потока
'strf' // формат потока
'strd' // дополнительный заголовок данных
Список 'movi', в свою очередь, состоит из подблоков:
LIST 'movi' // блоки данных (потоков) AVI-файла
SubChunk | LIST 'rec ' // подблок | список записей
'##wb' (размер блока 4 байта) (data) // звуковые данные (блок)
Таким образом, подблок данных организован в виде последовательности записей, каждая из которых состоит из одного кадра видео и соответствующего звукового сопровождения. Первоначально ##dc-блок был предназначен для хранения сжатого изображения, а ##db-блок - для несжатого DIB (Device Independent Bitmap). Но фактически они оба могут содержать сжатые данные. б). Контейнер MKV: Описание: Современный, отвечающий всем потребностям, отличный контейнер. Matroska (так по-английски пишется русское слово Матрёшка) — проект, нацеленный на создание открытого гибкого кросс-платформенного (включая аппаратные платформы) стандарта форматов мультимедийных контейнеров и набора инструментов и библиотек для работы с данными в этом формате. Этот проект является развитием проекта MCF, но значительно отличается тем, что основан на EBML (Extensible Binary Meta Language — расширяемый двоичный метаязык) — двоичном аналоге языка XML. Использование EBML позволяет расширять формат без потери совместимости со старыми программами. Возможности формата, закладываемые в Matroska:
трансляция по Интернету (протоколы HTTP и RTP);
быстрая перемотка в файле;
устойчивость к ошибкам;
экранные меню (как на DVD дисках);
разбиение файла на главы (Chapters);
переключаемые на лету субтитры;
переключаемые звуковые дорожки;
модульная расширяемость;
Следует отметить, что проект аудио/видео контейнера не включает в себя форматов сжатия видео и кодеков (таких, как MP3 или JPEG). Это упаковка, которая может содержать большое число потоков аудио, видео и субтитров, позволяя пользователю хранить в одном файле целый фильм и проигрывать его мультимедиа-проигрывателем. Matroska является открытым проектом (open standard). Это означает, что для персонального использования она абсолютно бесплатна, а техническая спецификация формата битового потока доступна любому, даже компаниям, желающим встроить поддержку формата в свои продукты (для этого потребуется специальная лицензия). Исходный код всех библиотек, созданных группой разработчиков проекта Matroska распространяется на условиях LGPL (библиотека для проигрывания, написанная на C с использованием целочисленной арифметики, распространятся также на условиях лицензии BSD). Matroska является прямой открытой альтернативой контейнерам AVI, ASF video, MOV, RealMedia, MP4, MPG. Существует поддержка адаптации и реализации библиотек Matroska для OpenBeOS Mediakit и GStreamer (англ.) (мультимедийной среды ОС GNU/Linux, похожей на Microsoft DirectShow для Windows) и набора фильтров DirectShow для воспроизведения и создания файлов Matroska в ОС Windows. в). Контейнер MP4: Описание: Контейнер, который является стандартом для MPEG-4.
Имеет ограничения: не может содержать внутри видео в форматах: WMV, MPEG1, MPEG2, и не может содержать внутри звук в форматах: AC3, MP2, WMA. г). Контейнер TS, M2TS Описание: Целью создания контейнера TS является мультиплексирование аудио и видео данных и синхронизизация их выхода. Т.е. основное назначение - трансляция по сетям передачи данных.