Монтаж и работа с контейнерами (avi, mkv, mp4, ts) [инструкция]

Ответить на тему
 

bahosh ®

Стаж: 7 лет 6 месяцев

Сообщений: 91

Симпатии: 2

В данной инструкции описаны типичные монтажные операции над видеофайлами, такие как:

* склеика/разрезание.
* извлечение/вставка звуковой дорожки или субтитров.
* создание глав и ссылок (для контейнера mkv).

ЧИТАТЬ В ПЕРВУЮ ОЧЕРЕДЬ!


Для монтажа есть некоторые ограничения:
1. Резать без пересжатия можно только начиная с ключевого кадра. Соответственно вырезать кусок точно так как хочется не получится, если начало фрагмента не является ключевым кадром.
2. Определять границы для форматов MKV, MP4 и TS придется либо на ощупь, либо через создание простенького avs-скрипта, чтобы можно было его открыть в редакторе VirtualDub и спокойно определить границы вырезаемых фрагментов визуально. Создание скрипта описано ниже в разделе "Получение информации о типе каждого кадра сжатого видеопотока".
3. Звук в формате AC3 резать в произвольном месте так же нельзя. Он состоит из фрагментов по 32мс. Соответственно, если длина куска видео не кратна 32мс, то аудиопоток будет заканчиваться чуть раньше. При добавлении к такому фрагменту следующего фрагмента можно получить рассинхрон, т.к. аудиодорожка от второго фрагмента пойдет следом за аудиодорожкой из первого, без учета разницы в продолжительности потоков первого фрагмента. Т.е. маленький зазор, который должен быть, просто исчезнет.

Картинка




Поэтому надо учитывать это при условии, что длина кадра для PAL равна 40мс, для NTSC - 1001/24мс.
4. Все эти форматы не созданы для редактирования, это как правило форматы конечного этапа хранения. Поэтому грамотное редактирование доступно лишь через полное или частичное пересжатие. С желанием вырезать один кадр вообще выхода кроме как пересжимать не остается.

Структура сжатого видеопотока (теория)


Как устроена видеопоследовательность
При сжатии видео используется 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 содержится информация не удалённая кодеком во время сжатия, что так же накладывает определённые трудности при монтаже сжатого материала.

Контейнеры (теория)


Контейнер 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) и как раз VirtualDub является программой, использующей исключительно VfW. Поскольку VfW является сильно устаревшим и не гибким, современные программы используют DS (DirectShow). Программы использующие DS замечательно работают с контейнерами под DS заточенными, но вот с VfW возникают проблемы в виде расхождения аудио и видеодорожек. Поэтому не следует использовать для работы с AVI-файлами программы, работающие не через VfW.
*Отсутствует поддержка современных кодеков.

Структура


RIFF 'AVI '     // четырехбуквенный идентификатор файла (в RIFF-формате)
LIST 'hdrl'     // список заголовков блоков, определяющих форматы потоков
LIST 'movi'     // блоки данных (потоков) AVI-файла
     'idx1'     // необязательный блок, определяющий размещение блоков данных внутри AVI-файла <AVI Index>
[br]

То есть в 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' (размер блока 4 байта) (data) // видеоданные (блок)
                '##db' (размер блока 4 байта) (data) // видеоданные (блок)

Таким образом, подблок данных организован в виде последовательности записей, каждая из которых состоит из одного кадра видео и соответствующего звукового сопровождения. Первоначально ##dc-блок был предназначен для хранения сжатого изображения, а ##db-блок - для несжатого DIB (Device Independent Bitmap). Но фактически они оба могут содержать сжатые данные.

Контейнер MKV


Современный, отвечающий всем потребностям, отличный контейнер.
Matroska (так по-английски пишется русское слово Матрёшка) — проект, нацеленный на создание открытого гибкого кросс-платформенного (включая аппаратные платформы) стандарта форматов мультимедийных контейнеров и набора инструментов и библиотек для работы с данными в этом формате. Этот проект является развитием проекта MCF, но значительно отличается тем, что основан на EBML (Extensible Binary Meta Language — расширяемый двоичный метаязык) — двоичном аналоге языка XML. Использование EBML позволяет расширять формат без потери совместимости со старыми программами.
Возможности формата, закладываемые в Matroska:
*Универсальность: mkv внутри себя может содержать видеоданные, сжатые множеством кодеков: MPEG, H264, AVC1, WMV и др.
*Контейнер легко редактируется.
*Легко извлечь аудио- и видеоданные.
*Нет зависаний при воспроизведении файлов большого объема.
*Расширенные возможности по хранению служебной информации.
*Аудиодорожки могут быть на различных языках.
*Переключение языков субтитров «на лету» (т.е. без последующей остановки и запуска воспроизведения файла с начала).
*Быстрая перемотка по файлу.
*Трансляция через Интернет (по протоколам HTTP, RTP).
*Устойчивость к ошибкам (по заверению производителя).


Последний раз редактировалось: bahosh (2013-10-30 06:33), всего редактировалось 2 раз(а)

Создавать темы 18-Май-2011 18:15

[Профиль]  [ЛС] 
Показать сообщения:    
Ответить на тему

Текущее время: 13-Дек 19:35

Часовой пояс: UTC + 5



Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы