Анатомия видео файла.

JagdCrab
iOS Support Видео
Анатомия видео файла.


Практика показывает, что большинство пользователей представляют видео файл как единое целое, что в корне не правильно. В этой маленькой статье я хочу объяснить как именно формируется видео файл, и как с ним работать более продуктивно.
Начнем с того, что разрушим главный предрассудок - формат файла не показатель, чтобы его изменить и оставить файл в работоспособном состоянии не обязательно его перекодировать (конвертировать), почему? Давайте разберемся в том из чего состоит самый простой видео файл.

  • Контейнер
  • Видео трек
  • Аудио трек.

Теперь по порядку.



Анатомия
.



Контейнер - оболочка видео файла, сам из себе не представляет ни картинки, ни звука. В контейнере хранятся все остальные части файлов в формате RAW (о нем чуть позже), а так же информация о них (названия треков, их язык, настройки, тайминг, в общем все что может потребоваться при воспроизведении.) Контейнер определяет формат файла, точнее формат и является контейнером.  Контейнер не влияет на возможность воспроизведения медиафайла тем или иным плеером, если он правильно организован (т.е. поддерживает форматы RAW треков внутри себя). Контейнер НЕ КОДИРУЕТСЯ, он создается при смешивании медиапотоков (Muxing).

Теперь, как обещал, пара слов о том что такое RAW, это "сырой" медиафайл, т.е. отдельный трек не несущий в себе ничего кроме сжатого потока в определенном кодеке. Некоторые RAW файлы (в основном аудио) могут воспроизводиться без контейнера, но при этом теряют некоторые свои возможности.  

Видео трек - Сжатый набор кадров в определенном кодеке. Ничего более. Как правило воспроизвести RAW видео трек невозможно т.к. только при смешивании в контейнер видео треку назначается FPS (Frames Per Second) т.е. частота кадров в секунду. Об этом надо помнить.

Аудио трек - сжатый аудио поток. В отличии от видео трека не нуждается в FPS и других настройках, т.к. стандартная скорость воспроизведения потока (100%) одинакова и назначается самим плеером.  Исключения - эффекты которые включаются непосредственно в контейнер а не RAW поток.


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

Субтитры - Называть субтитры внутри контейнера "Хардсабом" - ошибочно. Хардсаб, это только субтитры добавленные непосредственно в видео трек, т.е. сохраняющиеся даже в RAW видео треке. Но и "Софтсабом" такие назвать нельзя. Для субтитров внутри контейнера было создано отдельное определение - "Полу-хардсаб" - т.е. файл обладающий как свойствами хардсаба (субтитры и видео - единый файл) так и свойствами софтсаба (возможность отключения или переключения на другой язык.) Скрипты в контейнере опазнаются так же как и субтитры, по этому часто объединяются.

Главы и навигация - обычно представлены в виде txt, ttxt или idx файла написанного определенным образом. Как правило несет в себе временное значение и название главы, по этому может писаться "от руки". При нахождении такого файла внутри контейнера медиопроигрыватель автоматически делит видео трек в соответствии с кодом глав.

Шрифты и внешние ресурсы - В 95% это потребность субтитров и скриптов. Шрифты в контейнере автоматически выводятся с субтитрами если в файле субтитров (ass или ssa) они указаны как часть стиля определенных строк. Так же в этом виде внутри контейнера могут содержаться изображения выводимые поверх видео треков в соответствии с временем и местоположением указанном в субтитрах или скрипте.

IDX - IDX файлы могут нести в себе самую разную информацию, но как правило в них записаны настройки для декодера, например настройка изменения аспекта в декодере, как правило такие файлы уже не используются, т.к. видео трек с ними очень сложно кодировать.



Работа с контейнером



Как я уже говорил далеко не всегда обязательно кодировать файл для изменения формата, включения в него субтитров, и.т.п. В этих случаях просо достаточно "пересобрать" контейнер, добавив или удалив в него те или иные потоки\файлы.
На сегодняшний день мы имеем 6 основных контейнера. С тремя из которых успешно работает iPhone и вся остальная техника Apple, на них мы остановимся подробнее, но для начала давайте разбиремся как вам разобрать\собрать другие форматы, ведь это может вам пригодиться при кодировании (ведь ни один видео конвертер на сегодняшний день не работает с ext (т.е. внешними) аудио дорожками и.т.п.)

AVI - (Audio Video Interleave — чередование аудио и видео) в свое время самый распространенный контейнер, т.к. изначально расчитан на Xvid и DivX, но не стоит забывать что скоро ему стукнет двацатник, т.к. выпущен он Microsoft'ом еще в далеком 1998 году. Отсюда и причины его выхода из игры - он больше не может отвечать современным требованиям без дополнительных модификаций. Так же фатальной для него стала проблема с поддержкой H.264\AVC, в виду этих проблем последние несколько лет от него активно отказываются.
Его можно свободно собирать и разбирать с помощью программы - VirtualDub

MKV - Matroska (Матрешка) - относительно новый вид контейнера. Но уже сейчас самый широко используемый, все благодаря его обширным возможностям, отсутствием каких-либо ограничений на тип содержимого (кроме узкоспециализированных), и простотой работы. Но в этом же его главный минус - он использует достаточно простое микширование которое хоть и позволяет объединять в себя очень многие типы форматов, но требует мощностей на их совмещение непосредственно от декодера, именно по этому не применяется на мобильных устройствах.
Его можно свободно собирать и разбирать с помощью программы - MKVmarge GUI и MKVextract GUI

OGM  - формат изначально планируемый на смену AVI, но получившийся не таким удачным как MKV. Но не смотря на это используется в большинстве программных структур (например играх).
Его можно свободно собирать или разбирать с помощью программы OGMCleaver

MP4 - основной стандарт для MPEG, но он довольно хорошо поддерживает x264 по этому в настоящее время это второй по частоте использования контейнер. Хотя так же в нем замечен один ключевой минус - из-за особенностей его организации в него чрезвычайно сложно добавить субтитры или альтернативную звуковую дорожку. Т.к. необходимо прописывать ее частные детали (atom). В MP4 файлах с субтитрами внутри контейнера иногда возникают проблемы с воспроизведением QuickTime из-за его предустановки. В виду этого все рабочие таги контейнера необходимо создавать с помощью утилиты MP4Box, а в некоторых случаях пописывать через Dumpster (Windows) или Muxo (Mac OS X).
Его можно свободно собирать разбирать с помощью программы - MP4Box (Yamb)

MOV - формат широко используемый в последнее время в качестве формата для мобильных устройств и камер. Однако не стоит забывать что это изначально QuickTime Movie, он лишен большинства минусов MP4 в него легко можно добавить несколько аудио потоков, субтитры, главы, так же он является форматом сохранения видео "по умолчанию" в Quick Time. Из главных минусов отмечу очень неудобную работу с тегами внутри контейнера.
Его можно свободно собирать разбирать с помощью программы - MP4Box (Yamb) или QuickTime

M4V - формат не преданный широкой огласке. Является производной MOV, но лишен его предрасположенности к содержанию фильмов. От сюда значиться уже как Quick Time (MPEG 4) Video, изначально получил распространение в iTunes Store в разделе Телешоу, по этому в нем на порядок более дружелюбная система тегирования без потери возможностей содержания в себе медиафайлов.
Его можно свободно собирать разбирать с помощью программы - MP4Box (Yamb)
Раздел: iOS Support Автор:
10 апреля 2010, 10:28

Ответы