Ошибка

Монтаж и работа с контейнерами (avi, mkv, mp4)

Ответить на тему
 
Автор Сообщение

Walkman

Предупреждений: 1

Рейтинг

post 27-Мар-2009 10:55 [-]0[+]

Quote

В данной инструкции описаны типичные монтажные операции над видеофайлами, такие как:
  • склеика/разрезание.
  • извлечение/вставка звуковой дорожки или субтитров.
  • создание сэмпла для раздачи.
  • создание глав и ссылок (для контейнера mkv).

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

Код:

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


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

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.
Контейнер, который является стандартом для MPEG-4.
Имеет ограничения: не может содержать внутри видео в форматах: WMV, MPEG1, MPEG2, и не может содержать внутри звук в форматах: AC3, MP2, WMA.
Для работы с контейнером AVI нет ничего лучше, чем многофункциональный VirtualDub. Лучше всего использовать его модификацию VirtualDubMod. Операции монтажа достаточно удобно сделаны, хоть иногда и косячат. Последнее выражается в том, что программа отображает не тот кадр на котором стоит курсор. Поэтому осуществляя операции монтажа надо четко представлять что делаете.
Видео фрагмент открывается через пункт меню "File -> Open video file".
Остальные данные - в процессе работы.
В нижней части окна программы при помощи бегунка находим начало нужного сегмента и в меню выбираем "Edit -> Set selection start", либо используем клавишу "Home" на клавиатуре. Под полосой прокрутки размещены панель навигации и информация о времени, номере кадра и объеме фрагмента в мегабайтах от начала до текущей позиции. Если при этом рядом со счетчиком времени будет буковка [K], то можно считать, что ваши пожелания совпали с вашими возможностями. Потому как это обозначение ключевого кадра. Для перемещения строго по ключевым кадрам нужно зажать "Shift".
Если же такого счастья не случилось, то есть два варианта:
1. Сдвинуть бегунок влево до ближайшего ключевого кадра. Впрочем программа сделает это сама, если вы ничего не будете менять.
2. Сдвинуть бегунок вправо до ближайшего ключевого кадра. Вырезать фрагмент, а недостающую часть потом пересжать.

Чтобы указать конец фрагмента, нужно так же поставить бегунок на нужный кадр и в меню выбрать "Edit -> Set selection end", либо воспользоваться клавишей "End" на клавиатуре.
Как только указали начало и конец, то сразу на полосе прокрутки фрагмент будет отмечен выделением.

Теперь выставляем обязательно опцию "Video -> Direct stream copy" чтобы программа ничего не пересжимала и сохраняем выделенный фрагмент в файл при помощи команды меню "File -> Save as".
Чтобы склеить два фрагмента должны выполняться следующие условия:
1. Должно совпадать разрешение обоих фрагментов.
2. Должна совпадать частота кадров обоих фрагментов.
3. Должны совпадать потоки аудио дорожек.
4. Должен совпадать битрейт аудио дорожек.
5. Фрагменты не должны содержать пустот в потоках аудио дорожек в начале (задержка дорожки) и в конце (дорожка короче видео) фрагмента. Иначе все может покоситься. VirtualDub совершенно не умеет обрабатывать подобные моменты.

Для того чтобы склеить два фрагмента достаточно открыть первый фрагмент обычным способом через пункт меню "File -> Open video file" и добавить второй фрагмент через пункт меню "File -> Append segment". Если все нормально, то никаких сообщений не будет и останется только сохранить результат через команду в пункте меню "File -> Save as", не забыв при этом выставить опцию "Video -> Direct stream copy".
Если же вылезла какая либо ошибка, значит технические характеристики фрагментов не идентичны.

Если в фрагментах звук в формате mp3 с переменным битрейтом, то может потребоваться раздельная склейка видео и аудио.
Вот тут как раз и проявляется все удобство VirtualDubMod по сравнению с оригинальным VirtualDub. Удобно работать с потоками и расширенный список поддерживаемых аудио-форматов.

Переходим в меню "Streams -> Stream list". Видим окно со списком аудио дорожек. Чтобы добавить дорожку жмем на кнопку "add" и выбираем файл со звуковой дорожкой. Кнопками "Move up / Move down" можно переместить её на нужную позицию, например, на первую (если добавляем перевод).
Так же здесь можно задать сдвиг дорожки в миллисекундах. Для этого щелкаем правой кнопкой мышки по нужной дорожке и выбираем пункт меню "Interleaving...". Здесь, в поле "Delay audio track by..." выставляем положительное значения для задержки звука или отрицательное для опережения.
Здесь так же не забываем выставить "Video -> Direct stream copy". Далее сохраняем результат через "File -> Save as".
Переходим в меню "Streams -> Stream list". Видим окно со списком аудио дорожек. Чтобы удалить дорожку выделяем её и жмем кнопку "Disable".
Далее сохраняем результат через "File -> Save as". Не забываем выставить опцию "Video -> Direct stream copy".
Переходим в меню "Streams -> Stream list". Видим окно со списком аудио дорожек. Выделяем нужную и жмем кнопку "Demuxe".
Часто у аудиодорожек задают положительный сдвиг - задержку. Определить её можно следующим образом: извлекаем аудио дорожку и снова её прикрепляем. Высчитываем разницу между продолжительностью родной дорожки и прикрепленной. Это и есть задержка. Т.е. VirtualDubMod показывает продолжительность дорожки вместе с задержкой, а извлекается дорожка, естественно, без задержки.
Для работы с контейнером MKV используем утилиту mkvMerge входящую в состав mkvToolNix.
Загрузка исходного фрагмента осуществляется при помощи кнопки "add".
Остальные данные - в ходе работы.
Переходим на вкладку "Global". Ставим галочку "Enable splitting...". Теперь нам доступны несколько режимов:
1. "...after this size" - удобна для нарезки на одинаковые фрагменты, например, на болванки CD-R.
2. "...after this duration" - аналогично первому пункту, только мерой является не размер, а продолжительность фрагмента.
3. "...after timecodes" - самая функциональная опция, служит для нарезки так как вам угодно. Достаточно перечислить через запятую время по которому будет осуществлено разрезание. Формат времени: "HH:MM:SS.nnnnnnnnn". Миллисекунды можно не указывать. Вводить времена нужно без пробелов, т.е так: "00:30:00,00:31:00,00:33:00". Получим три части по 30, 1 и 2 минуты соответственно.
Опция "max. number of files" позволяет ограничить количество фрагментов, если вам нужны, допустим, только первые два.

Соответственно, чтобы вырезать кусочек, то указываем его границы и удаляем потом все лишние фрагменты, а можно и не дожидаться окончания их создания, т.е. остановить процесс сразу после нужного фрагмента.
Добавляем кнопкой "add" первый фрагмент и кнопкой "append" все последующие, указываем куда сохранить результат и жмем кнопку "Start muxing".
После чего появится окно процесса, в котором в случае возникновения ошибок будет выведена вся необходимая информация.
Добавляем все ингридиенты при помощи кнопки "add". Оставляем галочки там где нужно. Кнопочками "Up / Down" выстраиваем потоки в нужном порядке. При необходимости можно задать сдвиг, а так же сжать или растянуть аудио дорожку. Для задания сдвига укажем на вкладке "Format specific options" в поле "Delay (in ms)" нужное смещение. Положительное для задержки, отрицательное для опережения. Чтобы растянуть дорожку нужно на вкладке "Format specific options" в поле "Stretch by" указать коэффициент изменения длины.
Не все дорожки могут быть сжаты, потому как не все форматы оперативно получают поддержку. Да и делать это лучше отдельно, чтобы четко осознавать свои деяния и контролировать сам процесс.

На закладке "General track option" можно выставить следующие параметры:
  • "Default track flag" - если выставить в значение "yes", то поток будет проигрываться по-умолчанию.
  • "Track name" - наименование потока, например, "Комментарии режиссера", "Дубляж", "Закадровый"...
  • "Language" - язык потока.
Для этого понадобиться прога mkvExtract. Содержимое архива нужно распаковать в папку, где установлен mkvToolNix.
Выбираем подопытного. Указываем куда будем расчленять. Отмечаем галочками нужные части. Для видео потребуется указать расширение файла (контейнер). Жмем кнопочку "Extract".
В меню выбираем "Chapter Editor -> New Chapters".
В меню выбираем "Window -> Chapter editor" или просто переходим на закладку "Chapter Editor".
Здесь жмем "Add Chapter" и создаем первую главу, для которой автоматически создается раздел "EditionEntry 1".
Далее можно добавить еще главы при помощи кнопок "Add Chapter" и "Add subchapter". Отличаются они тем, что первая добавляет главу рядом с текущей, а вторая - рядом с её подглавой, т.е. на уровень ниже.
Теперь выбираем первую главу и становятся доступны её опции:
  • "Start" - время начала главы относительно видеопотока (задается как HH.MM.SS.nnn).
  • "End" - время окончания главы относительно видеопотока (задается как HH.MM.SS.nnn).
  • "hidden" - при выставленном флажке глава будет недоступна для выбора в списке глав.
  • "enabled" - при выставленном флажке глава будет пропущена при проигрывании.
  • "UID" - идентификатор главы, уникальный для каждой.
  • "Name" - название главы.
Время окончания главы можно не указывать, оно просто не будет учитываться.
Так же можно не указывать "UID" и "Name". Но без названия будет совсем неудобно...
Выставляем параметры остальных глав.
Редактор глав является независимой утилитой, поэтому никак не связан с часть программы отвечающей за микширование. Поэтому надо сохранить файл глав в отдельный файл через меню "Chapter Editor -> Save as". Затем этот файл нужно указать на закладке "Global" в поле "Chapter file" при этом не забыть поставить галку "No chapters" под окном "Input files" на закладке "Input".
Доступ к списку глав можно получить кликнув правой кнопкой мышки по значку контейнера в трее при запущенном фильме.
Так же у каждой главы могут быть и подглавы.
Просто главы - это фактически точки поиска в видеопотоке.
Упорядоченные главы позволяют задавать виртуальную шкалу времени.
Для того, чтобы включить этот режим нужно в файл глав добавить тег "<EditionFlagOrdered>1</EditionFlagOrdered>".
Это придется делать вручную, программа не позволяет использовать эту опцию.

Код:

<?xml version="1.0" encoding="UTF-8"?>

<!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->

<Chapters>
  <EditionEntry>
    <EditionFlagOrdered>1</EditionFlagOrdered>
    <EditionFlagHidden>0</EditionFlagHidden>
    <EditionFlagDefault>0</EditionFlagDefault>
    <EditionUID>418778243</EditionUID>
    <ChapterAtom>
      <ChapterDisplay>
        <ChapterString>Opening</ChapterString>
        <ChapterLanguage>und</ChapterLanguage>
      </ChapterDisplay>
      <ChapterUID>3825996674</ChapterUID>
      <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
    </ChapterAtom>
    <ChapterAtom>
      <ChapterDisplay>
        <ChapterString>Serie #1</ChapterString>
        <ChapterLanguage>und</ChapterLanguage>
      </ChapterDisplay>
      <ChapterUID>2294809483</ChapterUID>
      <ChapterTimeStart>00:00:05.000000000</ChapterTimeStart>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
    </ChapterAtom>
    <ChapterAtom>
      <ChapterDisplay>
        <ChapterString>Ending</ChapterString>
        <ChapterLanguage>und</ChapterLanguage>
      </ChapterDisplay>
      <ChapterUID>3630189237</ChapterUID>
      <ChapterTimeStart>00:00:25.000000000</ChapterTimeStart>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
    </ChapterAtom>
  </EditionEntry>
</Chapters>
Так изменяется и отображаемый список глав - появляется указатель, который показывает текущий активный фрагмент.
Доработаем список глав - проставим время их окончания.
Теперь будут проигрываться только существующие главы, а плейер будет показывать продолжительность фильма как сумму продолжительности активных глав. Если конечное время не указывать, то окончанием текущей главы будет считаться начало следующей или конец видеопотока.

Желательно чтобы каждая глава начиналась с кючевого кадра, иначе будут задержки при переходе к главе, которая начинается не с ключевого кадра.
Доработаем файл глав - добавим еще один раздел "EditionEntry 2" и так же заполним параметры его глав.
Сохраняем изменения, не забываем вставить для обоих разделов "EditionEntry" тэг упорядоченных глав.
Собираем фильм и запускаем. Меню в трее примет следующий вид:
Вот и получили две версии фильма, а точнее два варианта проигрывания одного и того же видеопотока.
С помощью упорядоченных глав можно задавать любой порядок проигрывания видеопотока, точнее - его частей.
В примере показана ситуация, когда в видеопотоке в хронологическом порядке записаны следующие части: заставка, сюжет первой серии, сюжет второй серии, титры. При выборе любого из потоков будет проигрываться как заставка так и титры, а вот сюжетная часть будет уже своя. Т.е. это дает экономию при записи сериала. Аналогично устроены и разные версии фильма, например, режиссерская версия и её часть - театральная. Либо режиссерская, расширенная и театральная, которые могут иметь уникальные части.
Осталась еще одна мелочь - имена версий. Ведь неудобно когда они называются "Edition 1", "Edition 2" и т.д.
Это можно исправить указав на закладке "Global" в поле "Tag file" созданный в ручную xml-файл следующего содержания:

Код:

<?xml version="1.0" encoding="UTF-8"?>

<!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->

<Tags>
  <Tag>
    <Targets>
      <EditionUID>418778243</EditionUID>
      <TargetTypeValue>50</TargetTypeValue>
    </Targets>
    <Simple>
      <Name>TITLE</Name>
      <String>Serie #1</String>
      <TagLanguage>und</TagLanguage>
      <DefaultLanguage>1</DefaultLanguage>
    </Simple>
  </Tag>
  <Tag>
    <Targets>
      <EditionUID>475116935</EditionUID>
      <TargetTypeValue>50</TargetTypeValue>
    </Targets>
    <Simple>
      <Name>TITLE</Name>
      <String>Serie #2</String>
      <TagLanguage>und</TagLanguage>
      <DefaultLanguage>1</DefaultLanguage>
    </Simple>
  </Tag>
</Tags>
Ключевой момент здесь - указать теже "EditionUID", что и в файле глав.
В тегах "<String></String>" указываем желаемое имя версии.
В итоге получим информативное меню версий:
При помощи сегментов можно связать любые файлы mkv с одинаковыми параметрами (набор дорожек, кодеки).
Самый простой способ применения - связать две части одного фильма. Как более интересный способ применения - воспроизведение сериала, который разбит на заставку, титры и собственно сам сюжет серии в виде отдельный файлов. Можно сделать так, чтобы в начале каждой серии запускалась заставка, а в конце - титры.

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

Чтобы определить идентификатор файла нужно воспользоваться утилитой mkvinfo из комплекта mkvToolNix.
Открываем в ней файл который собираемся прицепить и получаем искомый идентификатор.
Далее открываем в mkvMerge файл к которому собираемся прицепить и на закладке "Global" прописываем идентификатор прицепляемого файла.
  • "Previous Segment UID" - перед файлом.
  • "Next Segment UID" - после файла.
Так же есть возможность ссылаться не на весь файл целиком, а на его произвольную часть.
Для этого в файле глав надо указать ссылку (идентификатор) на нужный файл в тэгах "<ChapterSegmentUID format="hex"></ChapterSegmentUID>" и указанный промежуток будет подцепляться из внешнего файла. Префикс "0x" перед каждой цифрой не обязателен.

Код:

<?xml version="1.0" encoding="UTF-8"?>

<!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->

<Chapters>
  <EditionEntry>
    <EditionFlagOrdered>1</EditionFlagOrdered>
    <EditionFlagHidden>0</EditionFlagHidden>
    <EditionFlagDefault>0</EditionFlagDefault>
    <EditionUID>418778243</EditionUID>
    <ChapterAtom>
      <ChapterDisplay>
        <ChapterString>Opening</ChapterString>
        <ChapterLanguage>und</ChapterLanguage>
      </ChapterDisplay>
      <ChapterUID>3825996674</ChapterUID>
      <ChapterSegmentUID format="hex">a8 e4 31 81 50 88 16 5f 86 a3 6c 99 0f 07 fa 0a</ChapterSegmentUID>
      <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
    </ChapterAtom>
    <ChapterAtom>
      <ChapterDisplay>
        <ChapterString>Serie #1</ChapterString>
        <ChapterLanguage>und</ChapterLanguage>
      </ChapterDisplay>
      <ChapterUID>2294809483</ChapterUID>
      <ChapterTimeStart>00:00:05.000000000</ChapterTimeStart>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
    </ChapterAtom>
    <ChapterAtom>
      <ChapterDisplay>
        <ChapterString>Ending</ChapterString>
        <ChapterLanguage>und</ChapterLanguage>
      </ChapterDisplay>
      <ChapterUID>3630189237</ChapterUID>
      <ChapterTimeStart>00:00:25.000000000</ChapterTimeStart>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
    </ChapterAtom>
  </EditionEntry>
</Chapters>


AVI-Mux весьма функциональная прога, интерфейс и идеология работы схожи с MKVToolNix, но превосходит по возможностям. Их достаточно и не всегда понятно что же будет на выходе. Поэтому настоятельно рекомендую использовать голову при работе с ней.
При склеивании AVI файлов, в отличие от VirtualDub, не ругается на всякие глупости вроде отличия fps (23.976 и 23.97599).

Поддерживаемые входные потоки:
  • Containers: AVI, MKV
  • Video streams: from AVI & MKV
  • Audio streams: WAV, MPA/MP3, AC3, DTS, AAC, OGG/Vorbis
  • Subtitles streams: SRT, SSA


Поддерживаемые выходные потоки:
  • Containers: AVI, MKV
  • Video streams: raw
  • Audio Streams: raw
Ввод исходных данных осуществляется в верхнем окне при помощи вызова пункта "add" контекстного меню либо просто перекинув нужные файлы в это окно.

Далее нужно сформировать выходные потоки. Для это достаточно просто дважды кликнуть мышкой по нужному файлу с списке и он будет добавлен в нижний список выхода в виде составляющих его потоков (видео+аудио). Если нужно объединить несколько фрагментов, то можно выделить два нужных фрагмента и более и нажать кнопку "generate data source from files". Эта же кнопка работает и для одного файла.
При загрузке звука он автоматически добавляется в выходной поток. Кликнув в списке выхода кликнув по аудио в правой части программы активируется окно "delay (ms):" где можно выставить задержку в миллисекундах.
В окне списка выходных потоков галочками отмечаем нужные.

Удаление файлов из списка источников осуществляется так же при помощи пункта "remove" контекстного меню. Если поток используется в выходе, то при удалении программа предупредит об этом.

Сохранение результата осуществляется кнопкой "start".
После того как сформировали выходной поток жмем кнопочку "settings" и находим в нижней левой части секцию "splitting".
Доступные возможности:
  • maximum file size (MB) - режем на куски фиксированного размера.
  • manually set split points - резка на куски произвольной продолжительности
    Здесь можно задать точки разделения. Т.е. именно в этих местах и будет разрезан файл. Можно использовать как время, так и главы.
  • file names - задаем маску именования нарезанных кусков.
    Доступны три индекса:
    • $Name - имя, которое будет задано при сохранении
    • $Nbr or $Nbr{length_of_number} - номер выходного фрагмента
    • $Chn or $Chn{language_code} - номер главы, только для контейнера MKV
  • frames - сколько кадров резать.
  • max nbr. of files - максимальное число фрагментов.
Так же не надо забывать про ключевые файлы. От них никуда не деться. Поэтому нарезать точно врядли получится, т.е. точка разделения будет смещаться к ближайшему ключевому кадру. Режется всегда весь кусок подряд с учетом количества частей, ненужные фрагменты потом удаляем ручками.
Соответственно, чтобы вырезать нужный фрагмент, нам нужно указать 2 части и 3 точки разделения - две последние как раз и будут определять нужный фрагмент.
Загружаем оба фрагмента в список исходных данных. Выделяем их и жмем на кнопку "generate data source from files" и сохраняем результат.
Загружаем исходные данные, т.е. наш фрагмент. Отмечаем нужные потоки галочками. При необходимости указываем сдвиг аудио в правой части программы, в окне "delay (ms)" (появляется если встать в списке выхода на аудио поток). Сохраняем результат.
Загружаем исходные данные, т.е. наш фрагмент. Создаем выходной поток. Правой кнопкой мышки по нужной аудио дорожке вызываем пункт "extract binary" контекстного меню и сохраняем её в отдельный файл.
MP4Box является консольной программой, которая входит в состав проекта GPAC. Распространяется в исходниках. Для работы с ней нам понадобится графическая оболочка - Yamb. Скачать надо только версию с инсталлятором, т.к. она включает в себя скомпилированный MP4Box.

Поддерживаемые входные потоки:
  • Containers: MP4, 3GP, AVI, MPG, MPEG, VOB, MOV, OGG, QCP, 3GP
  • Video streams: M4V, CMP, H264, H263
  • Audio Streams: AAC, AMR, AWB, EVC, MP3, OGG/Vorbis
  • Subtitles Streams: SRT, TTXT, SUB, IDX/SUB, XML


Поддерживаемые выходные потоки:
  • Containers: MP4, 3GP
  • Video streams: raw
  • Audio streams: raw
  • Subtitles Streams: SRT, TTXT
  • Chapters: OGM text format
Слева выбираем пункт "Create". Справа - какой контейнер хотим получить на выходе.
При помощи кнопки "Add" добавляем нужные потоки и контейнеры их содержащие. Отмечаем нужное.
При необходимости выставляем свойства каждого потока (кнопка "Properties" справа). Они однообразны за исключением специфических параметров вроде пропорций у видео потока.
Указываем куда сохранять результат в поле "Output" и жмем "Next".
Если не возникло никаких ошибок, то получим MP4 файл. При возникновении ошибок более подробно можно посмотреть в протоколе, который вызывается из контекстного меню в этом же окне.
Таким же способом можно и изменить содержимое, т.е. удалить / добавить нужные дорожки или субтитры.
Слева выбираем пункт "Edit". Справа - "Click to split...".
Возможны следующие способы расчлененки:
  • "Split by Size" - разрезать на одинаковые куски заданного размера.
  • "Split by Duration" - разрезать на одинаковые куски заданной продолжительности.
  • "Split from" - вырезать кусок, указав время начала и конца в виде hh:mm:ss.ccc
  • "Split by Chapters #" - вырезать главу, если загружен список глав.
  • "Split All Chapters" - разрезать по главам, если загружен список глав.
После того как определились с методом надругательства, жмем "Next" и наблюдаем за страданиями подопытного.
После чего получаем его по кусочкам рядом с исходным материалом.
Слева выбираем пункт "Edit". Справа - "Click to join supported files.".
С помощью кнопки "Add" загружаем части. Указываем куда сохранять результат в поле "Output" и жмем "Next".
Здесь так же можно выбрать потоки и указать их свойства (кнопка "Properties" справа). Но делать это нужно с умом. В самом безобидном случае программа просто выдаст ошибку.
Наблюдаем за процессом.
Слева выбираем пункт "Edit". Справа - "Click to extract streams from...".
Указываем нужный видео-файл в поле "Input". И дальше в зависимости от типа извлекаемого потока выбираем опции извелечения:


Пояснения:
  • "Extract to Raw format" - извлечь поток без упаковки в какой либо контейнер.
  • "Exctract All Streams to Raw Format" - извлечь все потоки без упаковки в какой либо контейнер.
  • "Extract to MP4" - извлечь поток и упаковать в контейнер MP4.
  • "Exctract to AVI" - извлечь поток и упаковать в контейнер AVI.
  • "Extract to OGM Text Format" - извлечь текстовый поток в формате OGM Text Format.
  • "Extract to CUESheet Form" - извлечь текстовый поток в формате CUESheet Form.


Жмем "Next" и наблюдаем за процессом.
 

Walkman

Предупреждений: 1

Рейтинг

post 27-Мар-2009 10:56 (спустя 51 секунда) [-]0[+]

Quote

я не понимаю почему удалили предидущую тему
 

Danek

Пол: Пол:Муж

Стаж: 15 лет

Сообщений: 2073

Япония
Рейтинг

post 27-Мар-2009 11:19 (спустя 23 минуты) [-]0[+]

Quote

Walkman
Сделай полноразмерные скрины, всё таки будет удобней, чем ходить куда-то.

_________________
Он вернулся.
info Profile PM

Walkman

Предупреждений: 1

Рейтинг

post 22-Апр-2009 22:43 (спустя 26 дней) [-]0[+]

Quote

del
 

WolfMasteR

Предупреждений: 1

Рейтинг

post 29-Апр-2009 13:10 (спустя 6 дней) [-]0[+]

Quote

Пожалуйста, выложите еще инструкцию, как добавить к фильму звуковую дорожку, если он не в виде avi-файла, в DVD формате???

Walkman, спасибо за инструкцию по avi!
 

Walkman

Предупреждений: 1

Рейтинг

post 04-Май-2009 16:19 (спустя 5 дней) [-]0[+]

Quote

WolfMasteR
Dvd Audio Extractor в помощь

изменил шапку темы
 
Показать сообщения:    
Ответить на тему

Текущее время: 21-Ноя 13:55

Часовой пояс: GMT + 4



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