Контейнер MKV
Matroska - проект, который нацелен на создание продвинутого мультимедийного формата с набором необходимых инструментов для работы с этим форматом.
Возможности формата, закладываемые в Matroska:- трансляция по Интернету (протоколы HTTP и RTP);
- быстрая перемотка в файле;
- устойчивость к ошибкам;
- экранные меню (как на DVD дисках);
- разбиение файла на главы (Chapters);
- переключаемые на лету субтитры;
- переключаемые звуковые дорожки;
- модульная расширяемость;
Контейнера не включает в себя форматов сжатия видео и кодеков (таких, как MP3 или JPEG). Это упаковка, которая может содержать большое число потоков аудио, видео и субтитров, позволяя пользователю хранить в одном файле целый фильм и проигрывать его мультимедиа-проигрывателем.
Matroska является открытым проектом (open standard), т.е. личного использования она абсолютно бесплатна, а техническая спецификация формата битового потока доступна любому, даже компаниям, желающим встроить поддержку формата в свои продукты (для этого потребуется специальная лицензия). Исходный код всех библиотек, созданных группой разработчиков проекта Matroska распространяется на условиях LGPL (библиотека для проигрывания, написанная на C с использованием целочисленной арифметики, распространятся также на условиях лицензии BSD).
Matroska является прямой открытой альтернативой контейнерам AVI, ASF video, MOV, RealMedia, MP4, MPG.
Для работы с контейнером 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":
Сегменты и связывание разных файлов.
При помощи сегментов можно связать любые файлы mkv с одинаковыми параметрами (набор дорожек, кодеки).
Самый простой способ применения - связать две части одного фильма. Как более интересный способ применения - воспроизведение сериала, который разбит на заставку, титры и собственно сам сюжет серии в виде отдельный файлов. Можно сделать так, чтобы в начале каждой серии запускалась заставка, а в конце - титры.
Реализуется связывание следующим образом: при запуске файла, в котором прописаны связи, сканируется содержимое каталога с целью найти файл с указанным идентификатором. Не важно как назван файл, ориентир - идентификатор файла.
Чтобы определить идентификатор файла нужно воспользоваться утилитой mkvinfo из комплекта mkvToolNix.
Открываем в ней файл который собираемся прицепить и получаем искомый идентификатор.
Далее открываем в mkvMerge файл к которому собираемся прицепить и на закладке "Global" прописываем идентификатор прицепляемого файла.- "Previous Segment UID" - перед файлом.
- "Next Segment UID" - после файла.
Так же есть возможность ссылаться не на весь файл целиком, а на его произвольную часть.
Для этого в файле глав надо указать ссылку (идентификатор) на нужный файл в тэгах "<ChapterSegmentUID format="hex"></ChapterSegmentUID>" и указанный промежуток будет подцепляться из внешнего файла. Префикс "0x" перед каждой цифрой не обязателен.
Пример файла глав (chapters.xml)
Код:
<?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>