mkvmerge -- Паковщик мультимедийных потоков в файлы Matroska(tm)

# 1. Краткое содержание

mkvmerge глобальные параметры {-o выход} параметры1 {файл1} параметры2 {файл2} @файл-параметров.json

# 2. Описание

Эта программа принимает входные данные из нескольких медиафайлов и соединяет их потоки (все или выбранные) в файл Matroska(tm); смотрите сайт Matroska.

Important:

Порядок параметров в командной строке очень важен. Пожалуйста, прочтите раздел «Порядок параметров», если вы незнакомы с программой.

## 2.1. Глобальные параметры

Option | Description
--- | ---
-v, --verbose | Повысить детализацию информации.
-q, --quiet | Скрыть вывод состояния.
-o, --output имя-файла | Записать в файл имя-файла. Если используется разбиение, то этот параметр трактуется несколько иначе. Сморите описание параметра --split для подробностей.
-w, --webm | Создать файл, совместимый с WebM. Это также включено, если расширение имени выходного файла — «webm». В этом режиме есть несколько ограничений. Разрешены только кодеки VP8, видео VP9 и аудиодорожки Opus, Vorbis. Элемент заголовка DocType изменён на «webm».

Для глав и тэгов разрешена только подгруппа элементов. mkvmerge(1) автоматически удалит все элементы, неразрешённые спецификацией.

--title заголовок | Устанавливает основной заголовок для выходного файла, например, имя фильма.
--default-language код-языка | Задаёт код языка по умолчанию, который будет использоваться для треков, у которых не установлен язык с параметром --language и у которых исходный контейнер не предоставляет язык. Стандартный код для «неопределённого» языка — und.

## 2.2. Обработка информации о сегментах (глобальные параметры)

Option | Description
--- | ---
--segmentinfo имя-файла.xml | Прочесть информацию о сегменте из файла XML. Этот файл может содержать UID семейства сегментов, UID сегмента, элементы UID предыдущего и следующего сегмента. Пример файла и DTD включены в дистрибутив MKVToolNix. Смотрите раздел XML-файлы информации о сегментах ниже для подробностей.
--segment-uid SID1,SID2,... | Задаёт UID используемых сегментов. Это разделённый запятыми список 128-битных UID сегментов в обычном формате UID: шестнадцатеричные числа с префиксом «0x» или без него, с пробелами или без них, ровно 32 цифры. Если SID начинается с =, то остальное будет распознано как имя файла Matroska, чей сегмент UID считывается и используется.

Каждый созданный файл содержит один сегмент, и каждый сегмент имеет один UID сегмента. Если указано больше UID сегментов, чем создано сегментов, то лишние UID игнорируются. Если указано меньше UID, чем создано сегментов, то для них будут созданы случайные UID.

## 2.3. Работа с главами и тегами (глобальные параметры)

Option | Description
--- | ---
--chapter-language код-языка | Задаёт код языка в формате ISO 639-2, который записывается для каждой записи главы. По умолчанию используется «eng». Подробности ниже в разделе главы. Этот параметр можно использовать как для простых файлов глав, так и для исходных файлов, содержащих главы без информации об их языке, напр., файлы MP4 и OGM.

Язык, указанный в этом параметре, также используется и при генерации глав с помощью параметра --generate-chapters.

--chapter-charset кодировка | Устанавливает набор символов, который используется для преобразования в UTF-8 для простых файлов глав. Смотрите раздел о текстовых файлах и наборах символов, чтобы узнать, как mkvmerge(1) преобразует наборы символов. Этот переключатель также применяется к главам, скопированным из определённых типов контейнеров, например файлов Ogg/OGM и MP4. Дополнительные сведения смотрите ниже в разделе о главах.
--chapter-sync d[,o[/p]] | Отрегулировать отметки времени глав в следующем исходном файле на d мс. В качестве альтернативы вы можете использовать параметр --sync со специальным идентификатором дорожки -2 (сморите раздел «Специальные идентификаторы дорожек»). o/p: поправка временных меток с помощью o/p, чтобы исправить линейные смещения. По умолчанию в случае пропуска p равно 1. И o и p могут быть числами с плавающей запятой.

По умолчанию: ручная коррекция синхронизации отключена (что равноценно d = 0 и o/p = 1.0).

Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.

--generate-chapters режим | mkvmerge(1) может автоматически создавать главы. На данный момент поддерживаются следующие два режима:

- 'when-appending' – Этот режим создаёт одну главу, соответствующую началу каждого добавленного файла.

  Этот режим также работает с режимами разделения «частей:» и «частей-кадров:». Для этих режимов создаётся одна глава для каждого добавленного диапазона временных меток (тех, чьи начальные метки времени имеют префикс «+»).

  Note:

  mkvmerge(1) требует наличия видео или аудиодорожки, для определения того, что будет добавлен новый файл. При слиянии одной или нескольких видеодорожек используется первая. В ином случае используется первая звуковая дорожка.

- «interval:time-spec» — этот режим создаёт одну главу с фиксированными интервалами по данным из time-spec. Формат в форме HH: MM: SS.nnnnnnnnn или число, за которым следует одна из единиц «s», «ms» или «us».

  Пример: --generate-chapters interval:45s

Названия новых глав управляются параметром --generate-chapters-name-template. Язык устанавливается с помощью --chapter-language, который должен быть указан перед --generate-chapters.

--generate-chapters-name-template шаблон | Указывает шаблон имени для имён заголовков, создаваемых параметром --generate-chapters. Если параметр не указан, то по умолчанию используется «Chapter <NUM:2>». Существует несколько переменных, которые можно использовать в шаблоне, и которые заменяются их фактическими значениями во время создания главы. Строка «<NUM>» будет заменена номером главы. Строка «<START>» будет заменена меткой времени начала главы.

Строки «<FILE_NAME>» и «<FILE_NAME_WITH_EXT>» заполняются только при создании глав для добавляемых файлов. Они будут заменены именем добавляемого файла без указания соответственно его расширения. Обратите внимание, что вставляются только базовое имя и расширение файла, а не его каталог или компоненты диска.

Вы можете указать минимальное число мест для номера главы с помощью «<NUM:places>», например, «<NUM:3>». Полученное число будет дополнено ведущими нулями, если число мест меньше указанного.

Вы можете управлять форматом, используемым начальной меткой времени, с помощью <START:format>. Когда формат не задан, то умолчанию используется «%H:%M:%S». Допустимыми кодами формата являются:

- %h – часы

- %H – часы, дополненные нулями до двух позиций

- %m – минуты

- %M – минуты, дополненные нулями до двух позиций

- %s – секунды

- %S – секунды, дополненные нулями до двух позиций

- %n – наносекунды с девятью позициями

- %<1-9>n – наносекунды с указанием до девяти позиций (например, три позиции — %3n)

--cue-chapter-name-format формат | mkvmerge(1) поддерживает чтение списков CUE для аудиофайлов в качестве входных данных для глав. Списки CUE обычно содержат записи PERFORMER и TITLE для каждой записи индекса. mkvmerge(1) использует эти две строки для создания названия главы. С помощью этого параметра можно установить формат, используемый для этого имени.

Если этот параметр не задан, то mkvmerge(1) по умолчанию использует формат «%p - %t» (исполнитель, за которым следует пробел, тире, ещё один пробел и заголовок).

Если формат указан, то всё, исключая мета-символы, копируется как есть, а сами мета-символы подменяются следующим образом:

- %p подменён текущим значением строки PERFORMER,

- %t подменён текущим значением строки TITLE,

- %n подменён номером текущей дорожки и

- %N подменён номером текущей дорожки с добавлением начального нуля, если это < 10.

--chapters имя-файла | Считывает информацию о главе из файла имя-файла. Подробности смотрите в разделе о главах ниже.
--global-tags имя-файла | Считывает глобальные теги из файла имя-файла. Подробности смотрите в разделе о тегах ниже.

## 2.4. Основные настройки вывода (расширенные глобальные параметры)

Option | Description
--- | ---
--track-order FID1:TID1,FID2:TID2,... | Этот параметр меняет порядок, в котором создаются дорожки для входного файла. Аргументом является список пар ИД, разделённых запятыми. Каждая пара изначально содержит ИД файла (FID1), который является просто номером файла в командной строке, начиная с 0. Вторым является ИД дорожки (TID1) из этого файла. Если некоторые ИД дорожек пропущены, эти дорожки создаются после того, как были созданы дорожки, заданные этим параметром.

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

--cluster-length свойство | Ограничивает число блоков данных или длительность данных в каждом кластере. Параметр spec может быть числом n без единиц или числом d с постфиксом «ms». Если значение не указано, то mkvmerge(1) поместит в каждый кластер не более n блоков данных. Максимальное количество блоков — 65535.

Если число d содержит постфикс «ms», тогда mkvmerge(1) размещает максимум d миллисекунд данных в каждый кластер. Диапазон для d — от «100 мс» до «32000 мс».

По умолчанию mkvmerge(1) размещает не более 65535 блоков и 5000 мс данных в кластер.

Программы, пытающиеся найти определённый кадр, могут обращаться только непосредственно к кластеру, а затем должны прочесть весь кластер. Поэтому создание больших кластеров может привести к неточному или медленному поиску.

--clusters-in-meta-seek | Указывает mkvmerge(1) создать метаэлемент поиска в конце файла, содержащего все кластеры. Смотрите также раздел о компоновке файла Matroska.
--timestamp-scale фактор | Принудительное применение фактора к масштабированию временных меток. Допустимы значения в интервале 1000..10000000 или специальное значение -1. Обычно mkvmerge(1) использует значение 1000000, что означает, что метки времени и длительности имеют точность 1 мс. Для файлов, которые не содержат в себе видеодорожку, но имеют по крайней мере одну звуковую mkvmerge(1) автоматически выберет коэффициент масштаба метки времени, чтобы все метки времени и длительность имели точность до одного звукового образца. Это влечёт за собой большие накладные расходы, но обеспечивает точный поиск и извлечение.

Если используется специальное значение -1, то mkvmerge(1) будет использовать точность до одного семпла, даже если видео-дорожка присутствует.

--enable-durations | Записать длительность всех блоков. Это увеличит размер файла и на данный момент не несёт никакой ценности для проигрывателей.
--no-cues | Сообщает mkvmerge(1) не создавать и записывать данные cue, которые могут быть сопоставлены с индексом в AVI. Файлы Matroska(tm) можно воспроизводить без данных cue, но поиск, вероятно, будет неточным и медленным. Используйте это, только если вы действительно крайне нуждаетесь в месте или в целях тестирования. Смотрите также параметр --cues, который можно указать для каждого входного файла.
--no-date | По умолчанию mkvmerge(1) устанавливает в поле информации о сегменте «дата» время и дату начала мультиплексирования. C этим параметром это поле вообще не записывается.
--disable-lacing | Отключает сшивания на всех дорожках. Это увеличит размер файла, особенно если в нём много звуковых дорожек. Этот параметр не для повседневного использования.
--disable-track-statistics-tags | Обычно mkvmerge(1) записывает определённые теги со статистикой для каждой дорожки. Если такие теги уже есть, они будут перезаписаны. Теги: BPS, DURATION, NUMBER_OF_BYTES и NUMBER_OF_FRAMES. Включение этого параметра запрещает mkvmerge(1) записывать эти теги и перезаписывать существующие теги с такими же названиями.
--disable-language-ietf | Обычно mkvmerge(1) записывает новые языковые элементы IETF BCP 47 в дополнение к устаревшим языковым элементам в заголовках, главах и тегах дорожек. Если используется этот параметр, записываются только устаревшие элементы.
--normalize-language-ietf режим | Позволяет нормализовать все языковые теги IETF BCP 47 к их канонической форме с режимом «canonical», к их форме расширенных языковых подтегов с помощью режима «extlang» или отключает его в режиме off. По умолчанию применяется нормализация к канонической форме.

В канонической форме все подтеги, для которых существуют предпочтительные значения, заменяются этими предпочтительными значениями. Это преобразует, например, «zh-yue-jyutping» в «yue-jyutping» или «fr-FX» в «fr-FR».

Для формы расширенных подтегов языка изначально строится каноническая форма. После этого все основные языки, для которых существует расширенный подтег языка, заменяются этим расширенным подтегом языка и его префиксом. Это преобразует, например, «yue-jyutping» обратно к «zh-yue-jyutping», но не влияет на «fr-FR», потому что «fr» не является расширенным подтегом языка.

--stop-after-video-ends | Прекращает обработку по окончании основной видеодорожки, отбрасывая все оставшиеся пакеты других дорожек.

## 2.5. Разбиение, связывание, соединение и склеивание файлов (другие глобальные параметры)

Option | Description
--- | ---
--split спецификация | Разрезает выходной файл по достижению заданного размера или заданного времени. Обратите внимание, что дорожки можно разделить только непосредственно перед ключевым кадром. Поэтому точка разделения может немного не совпадать с тем, что указал пользователь.

На данный момент mkvmerge(1) поддерживает следующие режимы:

1. Разбиение по размеру.

   Синтаксис: --split [size:]d[k|m|g]

   Примеры: --split size:700m или --split 150000000

   Параметр d может заканчиваться на «k» «m» или «g», чтобы указать, что размер в КБ, МБ или ГБ соответственно. В ином случае предполагается размер в байтах. После того как текущий исходный файл достигнет этого ограничения размера, будет создан новый.

   Префикс «size:» можно опустить с целью совместимости.

2. Разбиение по прошествии времени.

   Синтаксис: --split [duration:]HH:MM:SS.nnnnnnnnn|ds

   Примеры: --split duration:00:60:00.000 или --split 3600s

   Параметр должен иметь форму HH:MM:SS.nnnnnnnnn для определения длительности с точностью до наносекунды или быть числом d, за которым следует буква «s» для длительности в секундах. Параметр HH — это часы, MM — минуты, SS — секунды, и nnnnnnnnn — наносекунды. Как часы, так и наносекунды можно опустить. После запятой может быть до девяти цифр. После того, как длительность содержимого текущего вывода достигнет этого предела, будет запущен новый исходный файл.

   Префикс «duration:» можно опустить с целью совместимости.

3. Разбиение после указной метки времени.

   Синтаксис: --split timestamps:A[,B[,C...]]

   Пример: --split timestamps:00:45:00.000,01:20:00.250,6300s

   Параметры A, B, C и т. п. должны иметь тот же формат, что и те, что используются для продолжительности (см. выше). Список меток времени разделяется запятыми. После того, как входной поток достиг метки времени текущей точки разделения, создаётся новый файл. Затем используется следующая точка разделения, указанная в этом списке.

   Префикс «timestamps:» нельзя опустить.

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

   Syntax: --split parts:start1-end1[,[+]start2-end2[,[+]start3-end3...]]

   Примеры:

   1. --split parts:00:01:20-00:02:45,00:05:50-00:10:30

   2. --split parts:00:01:20-00:02:45,+00:05:50-00:10:30

   3. --split parts:-00:02:45,00:05:50-

   Режим parts указывает mkvmerge(1) сохранять определённые диапазоны меток времени и отбросить другие. Диапазоны, которые необходимо сохранить, должны быть перечислены после ключевого слова parts: и разделены запятыми. Сам диапазон состоит из метки времени начала и конца в формате одинакового вида, который принимается в разных вариантах --split (например, 00:01:20 и 80s ссылаются на ту же метку времени).

   Если начальная метка времени не указана, то по умолчанию будет использована метка времени конца предыдущего диапазона. Если предыдущего диапазона нет, то будет использоваться начало файла (см. пример 3).

   Если конечная метка времени не указана, то по умолчанию она указывает на конец фала, так что mkvmerge(1) просто сохранит оставшееся (см. пример 3).

   Обычно каждый диапазон записывается в новый файл. Это можно изменить так, чтобы последовательные диапазоны записывались в один файл. Для этого пользователь должен поставить перед меткой времени начала символ +. Это указывает mkvmerge(1) не создавать новый файл, а вместо этого добавить диапазон в тот же файл, в который был записан предыдущий диапазон. Метки времени будут настроены таким образом, чтобы во входном файле не было пробелов, даже если во входном файле был пробел в двух диапазонах.

   В примере 1 mkvmerge(1) создаст два файла. Первый будет содержать данные с 00:01:20 по 00:02:45. Второй файл будет содержать данные с 00:05:50 по 00:10:30.

   В примере 2 mkvmerge(1) создаст единственный файл. Он будет содержать данные как с 00:01:20 по 00:02:45, так и с 00:05:50 по 00:10:30.

   В примере 3 mkvmerge(1) создаст два файла. Первый будет содержать данные от начала исходного файла по 00:02:45. Второй файл будет содержать данные с 00:05:50 и до конца исходного файла.

   Note:

   Обратите внимание, что mkvmerge(1) выполняет разделение лишь по позициям ключевых кадров. Это относится как к началу, так и к концу каждого диапазона. Поэтому, даже если метка времени конца находится между двумя ключевыми кадрами, mkvmerge(1) продолжит вывод кадров до следующего ключевого кадра, но не включая его.

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

   Синтаксис: --split parts-frames:start1-end1[,[+]start2-end2[,[+]start3-end3...]]

   Примеры:

   1. --split parts-frames:137-258,548-1211

   2. --split parts-frames:733-912,+1592-2730

   3. --split parts-frames:-430,2512-

   Режим parts-frames указывает mkvmerge(1) сохранить определённые диапазоны номеров кадров/полей, отбрасывая другие. Диапазоны для сохранения должны быть перечислены после ключевого слова parts-frames: и разделены запятыми. Сам диапазон состоит из начального и конечного номера кадра/поля. Нумерация начинается с 1.

   Если начальное число не указано, то по умолчанию будет использовано число конца предыдущего диапазона. Если предыдущего диапазона нет, то будет использоваться начало файла (см. пример 3).

   Если конечное число не указано, то по умолчанию оно указывает на конец фала, так что mkvmerge(1) просто сохранит оставшееся (см. пример 3).

   Обычно каждый диапазон записывается в новый файл. Это можно изменить так, чтобы последовательные диапазоны записывались в один файл. Для этого пользователь должен поставить перед номером начала символ +. Это указывает mkvmerge(1) не создавать новый файл, а вместо этого добавить диапазон в тот же файл, в который был записан предыдущий диапазон. Метки времени будут настроены таким образом, чтобы во входном файле не было пробелов, даже если во входном файле был пробел в двух диапазонах.

   Note:

   Обратите внимание, что mkvmerge(1) выполняет разделение только по позициям ключевых кадров. Это относится как к началу, так и к концу каждого диапазона. Поэтому, даже если конечный кадр / номер поля находится между двумя ключевыми кадрами, mkvmerge(1) продолжит вывод кадров вплоть до следующего ключевого кадра, исключая его.

   В примере 1 mkvmerge(1) создаст два файла. Первый будет включать содержимое, начиная с первого ключевого кадра 137, но исключая первый ключевой кадр с или после 258. Второй файл будет включать содержимое от 548 до 1211.

   В примере 2 mkvmerge(1) создаст только один файл. Этот файл будет включать содержимое, начиная с 733 до 912, и содержимое, начиная с 1592 до 2730.

   В примере 3 mkvmerge(1) создаст два файла. Первый будет содержать данные от начала исходного файла по 430. Второй файл будет содержать данные с 2512 и до конца исходного файла.

   Этот режим берёт для вывода только первую видеодорожку. Если вывод не является видеодорожкой, разбиение произведено не будет.

   Note:

   Номера, заданные с этим аргументом, интерпретируются на основе числа выводимых блоков Matroska(tm). Единый блок Matroska(tm) содержит либо полный кадр (для прогрессивного содержимого) или одно поле (для содержимого с чередованием). mkvmerge не различает их и просто подсчитывает количество блоков. Например: если вы хотите разделить после 25-го полного кадра с чередующимся содержимым, вам придётся в качестве точки разделения указать 50 (два поля на полный кадр).

6. Разбиение после указанного кадра/поля.

   Синтаксис: --split frames:A[,B[,C...]]

   Пример: --split frames:120,237,891

   Все параметры A, B, C и далее должны быть целыми положительными числами. Нумерация начинается с 1. Список номеров кадров/полей разделяется запятыми. После того, как входящий поток достиг номера кадра/поля текущей точки разделения, создаётся новый файл. Затем используется следующая точка разделения, указанная в этом списке.

   Префикс «frames:» нельзя опустить.

   Этот режим берёт для вывода только первую видеодорожку. Если вывод не является видеодорожкой, разбиение произведено не будет.

   Note:

   Номера, заданные с этим аргументом, интерпретируются на основе числа выводимых блоков Matroska(tm). Единый блок Matroska(tm) содержит либо полный кадр (для прогрессивного содержимого) или одно поле (для содержимого с чередованием). mkvmerge не различает их и просто подсчитывает количество блоков. Например: если вы хотите разделить после 25-го полного кадра с чередующимся содержимым, вам придётся в качестве точки разделения указать 50 (два поля на полный кадр).

7. Разбиение перед указанной главой.

   Синтаксис: --split chapters:all or --split chapters:A[,B[,C...]]

   Пример: --split chapters:5,8

   Все параметры A, B, C и далее должны быть целыми положительными числами. Нумерация начинается с 1. Список номеров глав разделяется запятыми. Разделение произойдёт непосредственно перед первым ключевым кадром, метка времени которого равна или больше начальной метки времени для глав, номера которых указаны. Глава, начинающаяся с 0s, никогда не рассматривается для разделения и отбрасывается без изменений.

   Вместо указания номеров всех глав, достаточно использовать ключевое слово all.

   Префикс «chapters:» нельзя опустить.

   Note:

   Формат файла Matroska(tm) поддерживает произвольные глубоко вложенные структуры глав, которые называются «записями издания» и «атомами глав». Однако этот режим учитывает лишь самый высокий уровень глав во всех записях издания.

Для этого режима разделения имя исходного файла обрабатывается иначе, чем для обычной операции. Он может содержать printf, выражение на подобии «%d», включая необязательную ширину поля, напр. «%02d». Если это так, то номер текущего файла будет отформатирован соответствующим образом и вставлен в это место имени файла. Если такого шаблона нет, то перед расширением файла предусматривается шаблон «-%03d»: «-o output.mkv» приведёт к «output-001.mkv» и т. д. Если расширения нет, к имени будет добавлено «-%03d».

Другим возможным шаблоном является «%c», который будет заменён названием первой главы в файле. Обратите внимание, что когда присутствует «%c», шаблон «-%03d» не будет добавлен автоматически.

--link | Связать файлы друг с другом при разделении выходного файла. Подробности смотрите в разделе о связывание файлов ниже.
--link-to-previous segment-UID | Связывает первый исходный файл с сегментом из UID сегмента, заданным параметром segment-UID. Подробности смотрите в разделе связывание файла ниже. Если SID начинается с =, то остальное будет распознано как имя файла Matroska, чей сегмент UID считывается и используется.
--link-to-next segment-UID | Связывает последний исходный файл с сегментом из UID сегмента, заданным параметром segment-UID. Подробности смотрите в разделе связывание файла ниже. Если SID начинается с =, то остальное будет распознано как имя файла Matroska, чей сегмент UID считывается и используется.
--append-mode режим | Определяет способ вычисления меток времени при присоединении файлов. Параметр mode имеет два значения: по умолчанию «file» и «track». Когда mkvmerge добавляет дорожку (теперь называется «track2_1») из второго файла (с именем «file2») к дорожке (с именем «track1_1») из первого файла (с именем «file1»), то он должен смещать все метки времени для «track2_1» на определённую величину. Для режима «file» эта сумма является самой высокой меткой времени, встречающейся в «file1», даже если эта метка времени была из дорожки, отличной от «track1_1». В режиме трека сдвиг — это самая высокая временная метка «track1_1».

К сожалению, mkvmerge не может определить, какой режим надёжен для использования. Поэтому по умолчанию он работает в режиме «file». Режим «file» обычно лучше работает для файлов, которые были созданы независимо друг от друга; например, при добавлении файлов AVI или MP4. Режим «track» может работать лучше для источников, которые по сути являются просто частями одного большого файла, например, для файлов VOB и EVO.

Дорожки субтитров всегда обрабатываются так, как если бы режим «file» был активен, даже если включён режим «track».

--append-to SFID1:STID1:DFID1:DTID1[,...] | Этот параметр определяет, к какой дорожке будет добавлена другая дорожка. Каждая спецификация содержит четыре идентификатора: ИД файла, ИД дорожки, ИД второго файла и ИД второй дорожки. Первая пара, «ИД исходного файла» и «ИД исходной дорожки», определяет дорожку, которая должна быть добавлена. Вторая пара, «ИД файла назначения» и «ИД дорожки назначения», определяет дорожку, к которой добавляется первая.

Если этот параметр был пропущен, используется стандартное сопоставление. Это стандартное сопоставление добавляет каждую дорожку из текущего файла к дорожке из предыдущего файла с тем же ИД дорожки. Это позволяет легко добавлять, если фильм был разделен на две части и оба файла имеют одинаковое количество дорожек и ИД дорожек с помощью команды mkvmerge -o output.mkv part1.mkv +part2.mkv.

+ | Одиночный «+» вызывает присоединение следующего файла, а не его добавление. «+» также можно поставить перед именем следующего файла. Поэтому следующие две команды эквивалентны:
    $ mkvmerge -o полный.mkv файл1.mkv + файл2.mkv
    $ mkvmerge -o полный.mkv файл1.mkv +файл2.mkv
[ файл1 файл2 ] | Если несколько имён файлов содержатся в паре квадратных скобок, то второй и все последующие файлы будут добавлены к первому файлу, названному в скобках. Это альтернативный синтаксис использования «+» между двумя именами файлов. Поэтому следующие две команды эквивалентны:
    $ mkvmerge -o полный.mkv файл1.mkv + файл2.mkv
    $ mkvmerge -o полный.mkv '[' файл1.mkv файл2.mkv ']'
= | Для определённых типов файлов (программные потоки MPEG, то есть файлы VOB) mkvmerge(1) обычно ищет файлы в том же каталоге, что и входной файл, которые имеют тоже базовое имя и отличаются лишь своим текущим номером (например, «VTS_01_1.VOB», «VTS_01_2.VOB», «VTS_01_3.VOB» и т. д.) и обрабатывает все эти файлы, как если бы они были объединены в один большой файл. Этот параметр, т. е. просто «=», вынудит mkvmerge не искать эти дополнительные файлы.

Также можно поставить «=» перед следующим именем файла. Поэтому следующие две команды эквивалентны:

    $ mkvmerge -o полный.mkv = файл1.vob
    $ mkvmerge -o полный.mkv =файл1.vob

( файл1 файл2 ) | Если несколько имён файлов находятся в паре скобок, эти файлы будут рассматриваться так, как будто они были объединены в один большой файл, состоящий из содержимого каждого из файлов один за другим. Это можно использовать, например, для файлов VOB, поступающих из транспортных потоков DVD или MPEG. Его нельзя использовать, если каждый файл содержит собственный набор заголовков, что обычно бывает с отдельными файлами, такими как AVI или MP4.

Ввод имени файла в скобки также препятствует поиску mkvmerge(1) дополнительных файлов с таким же базовым названием, как описано в параметре =. Поэтому эти две командные строки эквивалентны:

    $ mkvmerge -o выход.mkv = файл.mkv
    $ mkvmerge -o выход.mkv '(' файл.mkv ')'

Следует отметить несколько моментов:

1. После открывающей и перед закрывающей скобкой должны быть пробелы.

2. Каждый параметр между скобками интерпретируется как имя файла. Поэтому все параметры, применяемые к этому логическому файлу, должны быть перечислены перед начальной скобкой.

3. Некоторые оболочки рассматривают скобки как специальные символы. Таким образом, вы должны скрыть или процитировать их, как показано в приведённом выше примере.

## 2.6. Поддержка вложений (другие глобальные параметры)

Option | Description
--- | ---
--attachment-description описание | Обычное текстовое описание следующего вложения. Применяется к следующему параметру --attach-file или --attach-file-once.
--attachment-mime-type тип MIME | Тип MIME следующего вложения. Применяется к следующему параметру --attach-file или --attach-file-once. Список официально распознаваемых типов MIME можно найти, например, на домашней странице IANA. Тип MIME является обязательным для вложения. Если для вложения не задан тип MIME, то его тип будет определён автоматически.
--attachment-name имя | Устанавливает имя, которое будет сохранено в исходном файле для этого вложения. Если этот параметр не указан, имя будет получено из названия файла вложенного файла, заданного с помощью параметров --attach-file или --attach-file-once.
--attach-file имя-файла, --attach-file-once имя-файла | Создает файл-вложение внутри файла Matroska(tm). Разница между двумя формами заключается в том, что при разбиении файлы, прикреплённые с помощью --attach-file, прикрепляются ко всем выходным файлам, а файлы, прикреплённые с помощью --attach-file-once, прикрепляются только к первому созданному файлу. Если разделение не используется, то оба варианта работают одинаково.

mkvextract(1) может использоваться для извлечения вложений из файла Matroska(tm).

--enable-legacy-font-mime-types | Позволяет использовать устаревшие типы MIME для определённых типов вложений шрифтов. Например, «application/x-truetype-font» будет использоваться для шрифтов TrueType вместо «fonts/ttf». Это влияет как на новые вложения, если их тип MIME обнаружен автоматически, так и на существующие вложения, чьи сохранённые типы MIME будут заменены устаревшими.

Затрагиваются типы MIME: «font/sfnt», «font/ttf» и «font/collection»; они сопоставляются с «application/x-truetype-fonts» и «font/otf», который сопоставляется с «application/vnd .ms-opentype».

## 2.7. Параметры, которые можно использовать для каждого входного файла

Option | Description
--- | ---
-a, --audio-tracks [!]n,m,... | Копировать дорожки аудио n, m и так далее. Номера — это идентификаторы дорожек, которые можно узнать через переключатель --identify. Это не просто номера дорожек (см. раздел идентификаторы дорожек). По умолчанию: копировать все дорожки аудио. Вместо идентификаторов дорожек вы также можете предоставить коды языков ISO 639-2. Это будет работать только для исходных файлов, которые содержат языковые теги для своих дорожек.

По умолчанию: копировать любые подобные дорожки.

Если идентификаторы имеют префикс !, то значение меняется: копировать все дорожки этого типа, кроме тех, которые перечислены после !.

-d, --video-tracks [!]n,m,... | Копировать дорожки видео n, m и так далее. Номера — это идентификаторы дорожек, которые можно узнать через переключатель --identify. Это не просто номера дорожек (см. раздел идентификаторы дорожек). По умолчанию: копировать все дорожки видео. Вместо идентификаторов дорожек вы также можете предоставить коды языков ISO 639-2. Это будет работать только для исходных файлов, которые содержат языковые теги для своих дорожек.

Если идентификаторы имеют префикс !, то значение меняется: копировать все дорожки этого типа, кроме тех, которые перечислены после !.

-s, --subtitle-tracks [!]n,m,... | Копировать дорожки субтитров n, m и так далее. Номера — это идентификаторы дорожек, которые можно узнать через переключатель --identify. Это не просто номера дорожек (см. раздел идентификаторы дорожек). По умолчанию: копировать все дорожки субтитров.

Вместо идентификаторов дорожек вы также можете предоставить коды языков ISO 639-2. Это будет работать только для исходных файлов, которые содержат языковые теги для своих дорожек.

Если идентификаторы имеют префикс !, то значение меняется: копировать все дорожки этого типа, кроме тех, которые перечислены после !.

-b, --button-tracks [!]n,m,... | Копировать дорожки кнопок n, m и так далее. Номера — это идентификаторы дорожек, которые можно узнать через переключатель --identify. Это не просто номера дорожек (см. раздел идентификаторы дорожек). По умолчанию: копировать все дорожки кнопок. Вместо идентификаторов дорожек вы также можете предоставить коды языков ISO 639-2. Это будет работать только для исходных файлов, которые содержат языковые теги для своих дорожек.

Если идентификаторы имеют префикс !, то значение меняется: копировать все дорожки этого типа, кроме тех, которые перечислены после !.

--track-tags [!]n,m,... | Копировать дорожки тегов n, m и так далее. Номера — это идентификаторы дорожек, которые можно узнать через переключатель --identify (см. раздел идентификаторы дорожек). Это не просто номера дорожек. По умолчанию: копировать все дорожки тегов. Если идентификаторы имеют префикс !, то значение разворачиваются: копировать всё кроме идентификаторов, перечисленных после !.
-m, --attachments [!]n[:all|first],m[:all|first],... | Копирует вложения с идентификаторами n, m и т. д. ко всем или только к первому выходному файлу. За каждым идентификатором может следовать «:all» (что по умолчанию, если ничего не указано) или «:first». Если разделение активно, то те вложения, чьи идентификаторы указаны с помощью «:all», копируются во все исходные файлы, а другие копируются только в первый выходной файл. Если разделение не активно, оба варианта имеют одинаковый эффект.

По умолчанию копирует все вложения во все выходные файлы.

Если идентификаторы имеют префикс !, то значение разворачиваются: копировать всё кроме идентификаторов, перечисленных после !.

-A, --no-audio | Не копировать любые аудиодорожки из этого файла.
-D, --no-video | Не копировать любые видеодорожки из этого файла.
-S, --no-subtitles | Не копировать любые субтитры из этого файла.
-B, --no-buttons | Не копировать любые дорожки кнопок из этого файла.
-T, --no-track-tags | Не копировать любые теги дорожек из этого файла.
--no-chapters | Не копировать главы из этого файла.
-M, --no-attachments | Не копировать вложения из этого файла.
--no-global-tags | Не копировать глобальные теги из этого файла.
--regenerate-track-uids | Когда этот параметр используется для исходного файла Matroska, mkvmerge(1) будет создавать новые случайные уникальные идентификаторы дорожек вместо сохранения существующих в файле. Существующие UID дорожек в главах и тегах, считанных из того же файла, будут пересчитаны для новых созданных значений.

Это поведение автоматически включается для файлов Matroska, созданных программой MakeMKV. Причина в том, что MakeMKV использует последовательные числа (1, 2, 3...) в качестве UID, а не создаёт случайные.

-y, --sync TID:d[,o[/p]] | Подстраивает временные метки дорожки с идентификатором TID на dмс. Идентификаторы дорожек являются теми же, как и те, которые предоставляются с --identify (см. раздел идентификаторы дорожек). o/p: поправка временных меток с помощью o/p, чтобы исправить линейные смещения. По умолчанию в случае пропуска p равно 1. И o и p могут быть числами с плавающей запятой.

По умолчанию: ручная коррекция синхронизации отключена (что равноценно d = 0 и o/p = 1.0).

Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.

--cues TID:none|iframes|all | Элементы управления, для которых записи списка CUE (индекса) дорожки, создаются для данной дорожки (см. раздел идентификаторы дорожек). «none» предотвращает создание записей списка cue. Для «iframes» только блоки без ссылок назад или вперед (= I-кадры в видео дорожках) помещаются в список cue. «all» заставляет mkvmerge(1) создавать записи CUE для всех блоков, что делает файл очень большим.

По умолчанию — «iframes» для дорожек видео и субтитров и «none» для звуковых дорожек. Смотрите также параметр --no-cues, который препятствует созданию записей cue, независимо от используемых параметров --cues.

Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.

--default-track-flag TID[:bool] | Устанавливает флаг «дорожка по умолчанию» для данной дорожки (см. раздел идентификаторы дорожек), если необязательный аргумент bool равен 1 либо отсутствует. Флаг будет установлен, если исходный контейнер не предоставил эту информацию, и пользователь не указал её с помощью этого параметра.

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

Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.

--track-enabled-flag TID[:bool] | Устанавливает флаг «дорожка включена» для данной дорожки (см. раздел идентификаторы дорожек) в указанное значение bool (0 или 1, по умолчанию равно 1, если не указано). Дорожки включены по умолчанию, если для них не задан параметр, и исходный контейнер также не предоставляет эту информацию.

Для воспроизведения следует рассматривать только дорожки, для которых установлен флаг «дорожка включена».

Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.

--forced-display-flag TID[:bool] | Устанавливает флаг «принудительное отображение» для данной дорожки (см. раздел идентификаторы дорожек), если необязательный аргумент bool равен 1 либо отсутствует. Используйте его для дорожек, содержащих экранный текст или диалог на иностранном языке.

Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.

--hearing-impaired-flag TID[:bool] | Устанавливает флаг «нарушение слуха» для данной дорожки (см. раздел идентификаторы дорожек), если необязательный аргумент bool равен 1 либо отсутствует. Этот флаг может быть установлен, если дорожка подходит для пользователей с нарушениями слуха.

Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.

--visual-impaired-flag TID[:bool] | Устанавливает флаг «слабовидящие» для данной дорожки (см. раздел идентификаторы дорожек), если необязательный аргумент bool равен 1 либо отсутствует. Этот флаг может быть установлен, если дорожка подходит для пользователей с нарушениями зрения. Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
--text-descriptions-flag TID[:bool] | Устанавливает флаг «текстовые описания» для данной дорожки (см. раздел идентификаторы дорожек), если необязательный аргумент bool равен 1 либо отсутствует. Этот флаг можно задать, если дорожка содержит текстовые описания видеоматериала, пригодного для воспроизведения через систему преобразования текста в речь для слабовидящих пользователей.

Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.

--original-flag TID[:bool] | Устанавливает флаг «исходный язык» для данной дорожки (см. раздел идентификаторы дорожек), если необязательный аргумент bool равен 1 либо отсутствует. Этот флаг может быть установлен, если дорожка на языке оригинала содержимого (не является переводом).

Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.

--commentary-flag TID[:bool] | Устанавливает флаг «комментарии» для данной дорожки (см. раздел идентификаторы дорожек), если необязательный аргумент bool равен 1 либо отсутствует. Этот флаг может быть установлен, если трек содержит комментарии. Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
--track-name TID:имя | Указывает имя для выбранной дорожки (см. раздел Идентификаторы дорожек) равным name.
--language TID:язык | Устанавливает язык для данной дорожки (см. раздел идентификаторы дорожек). Разрешены как коды языков ISO 639-2, так и коды стран ISO 639-1. Коды стран будут автоматически преобразованы в коды языков. Все языки, включая их коды ISO 639-2, можно указать с помощью параметра --list-languages.

Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.

-t, --tags TID:имя-файла | Читает теги для дорожки с номером TID из файла имя-файла. Подробности смотрите в разделе о теги ниже.
--aac-is-sbr TID[:0|1] | Сообщает mkvmerge(1), что трек с ID TID — SBR AAC (также известный как HE-AAC или AAC+). Эти параметры необходимы, если а) исходный файл является файлом ААС (не файл Matroska(tm)) и б) файл AAC содержит данные SBR AAC. Причина этого переключателя в том, что технически невозможно автоматически идентифицировать нормальные данные AAC из данных SBR AAC без декодирования полного кадра AAC. Поскольку существует несколько патентных проблем с декодерами AAC mkvmerge(1) никогда не будет содержать декодирования. Поэтому для файлов SBR AAC этот переключатель является обязательным. Полученный файл может не воспроизводиться должным образом или даже не воспроизводиться вообще, если переключатель был пропущен.

Если исходным файлом является файл Matroska(tm), то CodecID должно быть достаточно для обнаружения SBR AAC. Однако, если CodecID неправильный, то этот переключатель можно использовать, чтобы исправить его.

Если mkvmerge неверно определяет файл AAC в виде SBR, то вы можете добавить ':0' к идентификатору дорожки.

--audio-emphasis TID:n|symbolic-name | Задаёт акцент для звуковой дорожки с помощью идентификатора дорожки TID. Режим может быть либо числом n (определённые значения от 0 до 16) либо символьным именем. Все допустимые номера и символьные имена можно вывести списком с помощью параметра --list-audio-accession.
--reduce-to-core TID | Некоторые аудиокодеки имеют ядро с потерями и дополнительные расширения, которые реализуют декодирование без потерь. Этот параметр сообщает mkvmerge(1) копировать только ядро, но не расширение. По умолчанию mkvmerge(1) копирует как ядро, так и расширение.

В настоящее время этот параметр влияет только на дорожки DTS. Дорожки TrueHD, которые содержат встроенное ядро AC-3, вместо этого представлены как две отдельные дорожки, для которых пользователь может выбрать, какую дорожку копировать. Для DTS такая схема не будет работать, потому что расширения HD нельзя декодировать сами по себе – в отличие от данных TrueHD.

--remove-dialog-normalization-gain TID | Некоторые кодеки аудио содержат поля заголовка, которые указывают декодеру или проигрывателю применить усиление для нормализации диалога (обычно отрицательное). Этот параметр сообщает mkvmerge(1) удалить или минимизировать это усиление (gain), изменив соответствующие поля заголовка.

На данный момент этот параметр влияет только на дорожки AC-3, DTS и TrueHD.

--timestamps TID:имя-файла | Читает метки времени, которые будут использоваться для определённого идентификатора дорожки с file-name. Эти метки времени принудительно заменяют метки времени, которые mkvmerge(1) рассчитывает обычно. Прочитайте раздел о внешних файлах меток времени.
--default-duration TID:x | Принудительно устанавливает длительность заданной дорожки по умолчанию до указанного значения. Также изменяет метки времени дорожки, чтобы соответствовать длительности по умолчанию. Аргумент x должен иметь один из постфиксов «s», «ms», «us», «ns», «fps», «p» или «i», чтобы указать длительность по умолчанию в секундах, миллисекундах, микросекундах, наносекундах, «кадрах в секунду», «прогрессивных кадрах в секунду» или «чересстрочных кадрах в секунду» соответственно. Число x может быть числом с плавающей запятой или дробью.

Если длительность по умолчанию не является принудительной, mkvmerge попытается получить длительность дорожки по умолчанию из контейнера и/или закодированного битового потока для определённых типов дорожек, например, AVC/H.264 или MPEG-2.

Этот параметр также может быть использован для изменения частоты кадров видеодорожек без необходимости использования внешнего файла временных меток.

--fix-bitstream-timing-information TID[:0|1] | Обычно mkvmerge(1) не изменяет информацию о времени (скорость кадров/полей), хранящуюся в битовом потоке видео. С помощью этого параметра эта информация корректируется в соответствии с информацией о времени из контейнера. Информация о времени из контейнера может поступать из разных источников: из командной строки (см. параметр --default-duration), исходного контейнера или производного от битового потока.

Note:

Это было реализовано только для видеодорожек AVC/H.264.

--compression TID:n | Выбирает метод сжатия, который будет использоваться для дорожки. Обратите внимание, что плеер также должен поддерживать этот метод. Допустимые значения: «none», «zlib» и «mpeg4_p2»/«mpeg4p2». Метод сжатия «mpeg4_p2»/«mpeg4p2» является специальным методом сжатия, который называется «удаление заголовка» и доступен только для видеодорожек MPEG4 part 2.

По умолчанию для некоторых типов субтитров используется сжатие «zlib». Этот метод сжатия поддерживает большинство, если не все программы воспроизведения. Поддержка других методов сжатия, кроме «none», не гарантируется.

## 2.8. Параметры, применяемые только к видеодорожкам

Option | Description
--- | ---
-f, --fourcc TID:FourCC | Принудительно указывает заданное значение для FourCC. Работает только для дорожек видео в «режиме совместимости MS».
--display-dimensions TID:widthxheight | Файлы Matroska(tm) содержат два значения, устанавливающие свойства отображения, к которым проигрыватель должен масштабировать изображение во время воспроизведения: ширина и высота экрана. Эти значения можно установить с помощью этого параметра, напр., «1:640x480».

Другим способом указания значений является использование параметра --aspect-ratio или --aspect-ratio-factor (см. ниже). Эти параметры являются взаимоисключающими.

--aspect-ratio TID:ratio|width/height | Файлы Matroska(tm) содержат два значения, которые устанавливают свойства отображения, до которых проигрыватель должен масштабировать изображение во время воспроизведения: ширина и высота изображения. С помощью этого параметра mkvmerge(1) автоматически вычислит ширину и высоту изображения на основе исходной ширины и высоты изображения и соотношения сторон, заданного с помощью этого параметра. Коэффициент можно указать либо в виде отношения чисел с плавающей запятой, либо в виде дроби «ширина/высота», например «16/9».

Другим способом указать значения является использование параметров --aspect-ratio-factor или --display-dimensions (см. выше и ниже). Эти параметры являются взаимоисключающими.

--aspect-ratio-factor TID:factor|n/d | Другой способ установить соотношение сторон — это указать коэффициент. Исходное соотношение сторон сначала умножается на этот коэффициент, а затем используется как целевое соотношение сторон. Другим способом указать значения является использование параметров --aspect-ratio или --display-dimensions (см. выше и ниже). Эти параметры являются взаимоисключающими.
--cropping TID:слева,сверху,справа,снизу | Указывает значения обрезки пикселей для видеодорожки.
--color-matrix-coefficients TID:n | Устанавливает матричные коэффициенты видео, которые используются для получения значений яркости и цветности на основе основных цветов красного, зелёного и синего. Параметр n является целым числом от 0 до 10. Допустимые значения и их расшифровка: 0: GBR, 1: BT709, 2: unspecified, 3: reserved, 4: FCC, 5: BT470BG, 6: SMPTE 170M, 7: SMPTE 240M, 8: YCOCG, 9: BT2020 non-constant luminance, 10: BT2020 constant luminance
--color-bits-per-channel TID:n | Указывает число кодированных битов для канала цвета. Значение 0 показывает, что число битов не указано.
--chroma-subsample TID:hori,vert | Количество пикселей, предназначенных для удаления в каналах Cr и Cb для каждого неудалённого пикселя по горизонтали/вертикали. Пример: Для видео с цветовая субдискретизация 4:2:0 следует указать параметр TID:1,1.
--cb-subsample TID:hori,vert | Количество пикселей, предназначенных для удаления в канале Cb для каждого неудалённого пикселя по горизонтали. Это добавка к --chroma-subsample. Пример: для видео с цветовой субдискретизацией 4:2:1, параметр --chroma-subsample должен быть установлен до TID:1,0 и подвыборка Cb должна быть установлена до TID:1,0.
--chroma-siting TID:hori,vert | Устанавливает то, как цветность располагается по горизонтали/вертикали (0: не указано, 1: сверху совмещённо, 2: наполовину).
--color-range TID:n | Устанавливает отсечение диапазонов цвета (0: неопределено, 1: диапазон трансляции, 2: полный диапазон (без отсечения), 3: задан через MatrixCoefficients/TransferCharacteristics).
--color-transfer-characteristics TID:n | Характеристики передачи видео. Допустимые значения и их расшифровка: 0: reserved, 1: ITU-R BT.709, 2: unspecified, 3: reserved, 4: gamma 2.2 curve, 5: gamma 2.8 curve, 6: SMPTE 170M, 7: SMPTE 240M, 8: linear, 9: log, 10: log sqrt, 11: IEC 61966-2-4, 12: ITU-R BT.1361 extended color gamut, 13: IEC 61966-2-1, 14: ITU-R BT.2020 10 bit, 15: ITU-R BT.2020 12 bit, 16: SMPTE ST 2084, 17: SMPTE ST 428-1; 18: ARIB STD-B67 (HLG)
--color-primaries TID:n | Устанавливает базовые цвета видео. Допустимые значения и их расшифровка: 0: reserved, 1: ITU-R BT.709, 2: unspecified, 3: reserved, 4: ITU-R BT.470M, 5: ITU-R BT.470BG, 6: SMPTE 170M, 7: SMPTE 240M, 8: FILM, 9: ITU-R BT.2020, 10: SMPTE ST 428-1, 22: JEDEC P22 phosphors
--max-content-light TID:n | Устанавливает максимальную яркость одного пикселя (Maximum Content Light Level) в канделах на квадратный метр (кд/м2). Значение n должно быть целым неотрицательным числом.
--max-frame-light TID:n | Устанавливает максимальную яркость одного полного кадра (Maximum Frame-Average Light Level) в канделах на квадратный метр (кд/м2). Значение n должно быть целым неотрицательным числом.
--chromaticity-coordinates TID:red-x,red-y,green-x,green-y,blue-x,blue-y | Указывает координату цветности красного/зелёного/синего цветов, как определено в CIE 1931.
--white-color-coordinates TID:x,y | Указывает координату цветности белого цвета, как определено в CIE 1931.
--max-luminance TID:float | Устанавливает максимальную яркость в канделах на квадратный метр (кд/м2). Значение должно быть меньше 9999,99.
--min-luminance TID:float | Устанавливает минимальную яркость в канделах на квадратный метр (кд/м²). Значение должно быть меньше чем 999,99.
--projection-type TID:method | Устанавливает используемый метод проекции видео. Допустимые значения: 0 (прямоугольная проекция), 1 (равноугольная проекция), 2 (проекция кубической карты) и 3 (проекция сетки).
--projection-private TID:данные | Устанавливает частные данные, которые применяются только к определённой проекции. Данные должны быть представлены в виде шестнадцатеричных чисел с префиксом «0x» или без него, с пробелами или без них.
--projection-pose-yaw TID:float | Определяет параметры поворота проекции вокруг перпендикулярной оси.
--projection-pose-pitch TID:float | Определяет параметры поворота проекции вокруг поперечной оси.
--projection-pose-roll TID:float | Определяет параметры поворота проекции вокруг продольной оси.
--field-order TID:n | Задаёт порядок полей в дорожке видео с идентификатором TID. Порядок должен быть указан одним из следующих номеров: 0: прогрессивный; 1: чересстрочный с отображением верхнего поля первым, первым сохраняется верхнее поле; 2: неопределённый порядок полей; 6: чересстрочный с отображением нижнего поля первым, первым сохраняется нижнее поле; 9: чересстрочный с отображением нижнего поля первым, первым сохраняется нижнее поле; 14: чересстрочный с отображением верхнего поля первым, первым сохраняется нижнее поле
--stereo-mode TID:n|symbolic-name | Устанавливает стереорежим для видеодорожки с помощью идентификатора дорожки TID. Режим может быть числом n от 0 до 14 либо символьным именем. Все допустимые номера и имена можно вывести списком с помощью параметра --list-stereo-modes.

## 2.9. Параметры, применяющиеся только к текстовым субтитрам

Option | Description
--- | ---
--sub-charset TID:кодировка | Устанавливает набор символов для преобразования в UTF-8 для субтитров UTF-8 для заданного идентификатора дорожки. Если не указано иное, набор символов будет получен из текущих настроек языка. Обратите внимание, что набор символов не требуется для чтения субтитров из файлов Matroska(tm) или из потоков Kate, поскольку они всегда хранятся в UTF-8. Смотрите раздел о текстовых файлах и наборах символов, чтобы узнать, как mkvmerge(1) преобразует между наборами символов.

Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.

## 2.10. Прочие параметры

Option | Description
--- | ---
-i, --identify имя-файла | Позволит mkvmerge(1) проверить один файл и сообщить его тип, дорожки, содержащиеся в файле, и их идентификаторы. Если используется этот параметр, то другим единственным разрешённым параметром является имя файла. Формат вывода результата может быть изменён параметром --identification-format.
-J имя-файла | Это удобный псевдоним для «--identification-format json --identify имя-файла».
-F, --identification-format формат | Определяет исходный формат, используемый параметром --identify. Поддерживаются следующие форматы: text (по умолчанию, если этот параметр не используется) и json.

1. Формат text выглядит коротким и удобочитаемым для человека. Он состоит из одной строки для каждого найденного объекта (контейнера, дорожки, вложения и т. д.).

   Этот формат не для анализа. Выходные данные будут переведены в язык, используемый в mkvmerge(1) (см. также --ui-language).

2. Формат вывода json является машиночитаемым представлением JSON. Этот формат соответствует схеме JSON, описанной в следующем файле:

   mkvmerge-identification-output-schema-v20.json

   Все версии схемы JSON доступны как онлайн, так и в выпущенных архивах исходного кода.

--probe-range-percentage процент | Типы файлов, такие как программы и транспортные потоки MPEG (.vob, .m2ts), требуют разбора определённого количества данных, чтобы обнаружить все дорожки, содержащиеся в файле. Эта количество составляет 0,3% от размера исходного файла или 10 МБ, в зависимости от того, что больше.

Если известно, что дорожки присутствуют, но не найдены, то процент для проверки можно изменить с помощью этого параметра. Минимальный размер 10 МБ является встроенным и не может быть изменён.

--list-audio-emphasis | Выводит список допустимых чисел и их соответствующих символических имён для параметра --audio-emphasis.
--list-languages | Перечисляет все языки и их коды ISO 639-2, которые можно использовать с параметром --language.
--list-stereo-modes | Выводит список допустимых чисел и их соответствующих символических имён для параметра --stereo-mode.
-l, --list-types | Список поддерживаемых типов входящих файлов.
--priority приоритет | Устанавливает приоритет, с которым выполняется процесс mkvmerge(1). Допустимые значения — «lowest», «lower», «normal», «higher» и «highest». Если ничего не задано, используется «normal». В системах подобных Unix mkvmerge(1) использует функцию nice(2). Поэтому только суперпользователь может использовать «higher» и «highest». В Windows все значения доступны для использования любому пользователю.

Выбор "самого низкого" также приводит к тому, что mkvmerge(1) выбирает приоритет холостого ввода-вывода в дополнение к самому низкому возможному приоритету процесса.

--command-line-charset кодировка | Устанавливает набор символов для преобразования строк заданных через командную строку. По умолчанию используется набор символов для системной локальные. Эти параметры применяются к аргументам следующих параметров: --title, --track-name и --attachment-description.
--output-charset кодировка | Указывает кодировку, в которую конвертируются выходные строки. По умолчанию используется текущая кодировка системного языка.
-r, --redirect-output имя-файла | Записывает все сообщения в файл file-name вместо консоли. Хотя это можно легко сделать с помощью перенаправления вывода, есть случаи, когда этот параметр нужен: если терминал повторно интерпретирует выход перед записью его в файл. Набор символов, установленный с --output-charset, учитывается.
--flush-on-close | Указывает программе сбросить все данные, закэшированные в памяти, в хранилище при закрытии файлов, открытых для записи. Это может быть использовано для предотвращения потери данных при отключении питания или для обхода определённых проблем в операционной системе или драйверах. Недостатком является то, что паковка займёт больше времени, так как mkvmerge придётся ждать, пока все данные не будут записаны в хранилище перед выходом. Смотрите проблемы #2469 и #2480 в трекере ошибок MKVToolNix, где подробно прокомментированы плюсы и минусы.
--ui-language код | Принудительно использовать перевод на код языка (напр., «de_DE» для немецкого). Если указать «list» на месте кода, то отобразится список доступных переводов.
--abort-on-warnings | Указывает mkvmerge прерывание после появления первого предупреждения. Код завершения программы будет 1.
--deterministic seed | Позволяет создавать файлы, идентичные до байта, если та же версия mkvmerge(1) использована с теми же исходными файлами, тем же набором параметров и тем же начальным элементом. Обратите внимание, что информационное поле сегмента «дата» не записывается в этом режиме.

Зерно может быть произвольной строкой и не обязательно должно быть числом.

Результат работы байт-идентичных файлов гарантируется только при следующих условиях:

1. Используется та же версия mkvmerge(1), собранная с теми же версиями libEBML и libMatroska.

2. Используемые исходные файлы байт-идентичны.

3. Те же параметры командной строки используются в том же порядке (за исключением --output ...).

Использование других версий mkvmerge(1) или других параметров командной строки может выдать тот же файл, идентичный до байта, но это не гарантируется.

--debug тематика | Включить режим отладки для указанной функции. Этот параметр полезен только для разработчиков.
--engage функция | Включает экспериментальные функции. Список доступных функций можно запросить с помощью mkvinfo --engage list. Эти функции не предназначены для использования в обычных ситуациях.
--gui-mode | Включает режим графического интерфейса. В этом режиме могут отображаться специально отформатированные строки для отправки управляющих сообщений интерфейсу. Формат сообщений — «#GUI#message». За сообщением могут быть указаны пары ключа и значения, например, «#GUI#message#key1=value1#key2=value2…». Сообщения и ключи не переводятся и всегда выводятся на английском.
@файл-параметров.json | Читает дополнительные аргументы командной строки из файла options-file. Подробности смотрите в разделе файлов параметров. Если вы хотите использовать знак @ в качестве первого символа в аргументе параметра, таком как «--title», вы должны отделить его вторым знаком @. Например:
    $ mkvmerge -o midnight-s01e01.mkv --title @@midnight midnight-s01e01.mp4
--capabilities | Выводит информацию о дополнительных функциях, которые были скомпилированы и вышли. В первой строке вывода будет информация о версии. Все последующие строки содержат ровно одно слово, наличие которого указывает на то, что функция скомпилирована. Эти функции следующие:

- «FLAC» -- читает необработанные файлы FLAC и работает с дорожками FLAC в других контейнерах, например Ogg(tm) или Matroska(tm).

-h, --help | Показать сведения об использовании и выйти.
-V, --version | Показать сведения о версии и выйти.

# 3. Использование

Для каждого файла пользователь может выбрать, какие дорожки mkvmerge(1) должен взять. Все они помещаются в файл, указанный с параметром -o. Список известных (и поддерживаемых) входных форматов можно получить с помощью параметра -l.

Important:

Порядок параметров в командной строке очень важен. Пожалуйста, прочтите раздел «Порядок параметров», если вы незнакомы с программой.

# 4. Порядок параметров

Порядок ввода важен для некоторых параметров. Они делятся на две категории:

1. Параметры, которые влияют на всю программу и не привязаны ни к одному входному файлу. Они включают, но не ограничиваются --command-line-charset, --output или --title. Они могут быть в любом месте командной строки.

2. Параметры, которые влияют на одиночный входной файл или одиночную дорожку во входном файле. Все эти параметры применяются к следующему входному файлу в командной строке. Все параметры, применяемые к одному и тому же входному файлу (или к дорожкам из одного и того же входного файла), могут быть записаны в любом порядке, если все они появляются перед именем этого входного файла. Примеры применения параметров к входному файлу: --no-chapters или --chapter-charset. Примеры применения параметров к одиночной дорожке: --default-duration или --language.

Параметры обрабатываются слева направо. Если параметр появляется несколько раз в пределах одной области, будет использовано последнее вхождение. Поэтому заголовок будет установлен на «что-то другое» в следующем примере:

    $ mkvmerge -o выход.mkv --title 'Такой' вход.avi --title 'Другой'

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

    $ mkvmerge -o выход.mkv --language 0:fre français.ogg --language 0:deu deutsch.ogg

# 5. Примеры

Предположим, у вас есть файл Моё-видео.avi и аудиодорожка в отдельном файле, например «Моё-видео.wav». Для начала вы хотите закодировать аудио в OggVorbis(tm):

    $ oggenc -q4 -oМоё-видео.ogg Моё-видео.wav

Спустя несколько минут вы можете объединить видео и аудио:

    $ mkvmerge -o Моё-видео-со-звуком.mkv Моё-видео.avi Моё-видео.ogg

Если ваш AVI уже содержит звуковую дорожку, то она также будет скопирована (если mkvmerge(1) поддерживает её аудиоформат). Чтобы избежать этого, просто сделайте следующее

    $ mkvmerge -o Моё-видео-со-звуком.mkv -A Моё-видео.avi Моё-видео.ogg

После нескольких минут раздумий вы выбираете другую звуковую дорожку, например комментарии или иноязычную дорожку к «MyMovie-add-audio.wav». Кодируете его ещё раз и объединяете с другим файлом:

    $ oggenc -q4 -oМоё-видео-с-добавлением-аудио.ogg Моё-видео-с-добавлением-аудио.wav
    $ mkvmerge -o МВ-полное.mkv Моё-видео-с-аудио.mkv Моё-видео-с-добавлением-аудио.ogg

Такого же результата можно добиться с помощью

    $ mkvmerge -o МВ-полное.mkv -A Моё-видео.avi Моё-видео.ogg Моё-видео-с-добавлением-аудио.ogg

Теперь используйте mplayer(tm) и наслаждайтесь. Если у вас есть несколько аудиодорожек (или даже дорожек видео), вы можете указать mplayer(tm)'у какую дорожку проигрывать, используя параметры «-vid» и «-aid». Они основаны на 0 и не различают видео и аудио.

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

    $ mkvmerge --identify рассинхрон.ogg

Теперь вы можете использовать этот идентификатор в следующей командной строке:

    $ mkvmerge -o синхронный.mkv -A источник.avi -y 12345:200 рассинхрон.ogg

Это добавит 200 мс тишины в начале звуковой дорожки с идентификатором 12345, взятым из «out of sync.ogg».

Некоторые фильмы начинают синхронизироваться правильно, но постепенно теряют синхронизацию. Для таких фильмов вы можете указать коэффициент задержки, который будет применяться ко всем временным меткам – данные не добавляются и не удаляются. Поэтому, если вы сделаете это соотношение слишком большим или слишком маленьким, вы получите плохие результаты. Например, эпизод имеет рассинхронизацию 0,2 секунды в конце фильма длиной 77340 кадров. При частоте кадров 29,97 к/c 0,2 секунды составляют примерно 6 кадров. Поэтому я сделал

    $ mkvmerge -o синхронный.mkv -y 23456:0,77346/77340 рассинхрон.mkv

Результат был прекрасный.

Параметры синхронизации могут использоваться для субтитров таким же способом.

Для текстовых субтитров можно использовать программное обеспечение Windows (типа SubRipper(tm)) или пакет subrip(tm), который можно найти в исходных файлах transcode(1) в каталоге «contrib/subrip». Общий процесс таков:

1. извлечь необработанный поток субтитров из исходника:

       $ tccat -i /path/to/copied/dvd/ -T 1 -L | tcextract -x ps1 -t vob -a 0x20 | subtitle2pgm -o мойфильм

2. конвертировать результирующие изображения PGM в текст с помощью gocr:

       $ pgm2txt моёвидео

3. проверить правописание результирующих текстовых файлов:

       $ ispell -d american *txt

4. конвертировать текстовые файлы в файл SRT:

       $ srttool -s -w -i мойфильм.srtx -o мойфильм.srt

Выходной файл может быть использован как входной для mkvmerge(1):

    $ mkvmerge -o мойфильм.mkv мойфильм.avi мойфильм.srt

Если вы хотите указать язык для определённой дорожки, это легко сделать. Сначала узнайте код ISO 639-2 для вашего языка. mkvmerge(1) может перечислить все эти коды для вас:

    $ mkvmerge --list-languages

Найдите список нужных вам языков. Допустим, вы поместили две звуковые дорожки в файл Matroska(tm) и хотите установить коды своих языков, а также идентификаторы дорожек 2 и 3. Это можно сделать при помощи

    $ mkvmerge -o с-кодами-языков.mkv --language 2:ger --language 3:dut без-кодов-языков.mkv

Как вы видите, переключатель --language может быть использован несколько раз.

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

    $ mkvmerge -o with-lang-codes.mkv --language 2:ger --language 3:dut --default-track-flag 3 without-lang-codes.mkv --language 0:eng english.srt --default-track-flag 0 --language 0:fre french.srt

Если вы не видите язык или флаг дорожки по умолчанию, которые вы указали в выводе mkvinfo(1), прочитайте, пожалуйста, раздел о стандартных значениях.

Отключить сжатие для исходного файла.

    $ mkvmerge -o без-сжатия.mkv --compression -1:none Мой-фильм.avi --compression -1:none мойфильм.srt

# 6. Идентификаторы дорожек

## 6.1. Обычные идентификаторы дорожек

Некоторые параметры в mkvmerge(1) требуют идентификатор дорожки, чтобы определить к какой дорожке они должны быть применены. Эти идентификаторы дорожек печатаются считывателями при демульплексировании текущего входного файла, или если mkvmerge(1) выполняется с параметром --identify. Пример такого вывода:

    $ mkvmerge -i v.mkv
    Файл 'v.mkv': контейнер Matroska
    ИД дорожки 0: video (V_MS/VFW/FOURCC, DIV3)
    ИД дорожки 1: audio (A_MPEG/L3)

Не путайте идентификаторы дорожек, назначаемых дорожкам во входном файле MKV, с идентификаторами дорожек входных файлов. Для параметров, требующих этих значений, используются только идентификаторы дорожек входных файлов.

Также обратите внимание, что каждый входной файл имеет свой собственный набор идентификаторов дорожек. Поэтому идентификаторы дорожек для файла «file1.ext» как сообщает «mkvmerge --identify» не изменяются независимо от того, сколько там других входных файлов и в каком положении «file1.ext» используются.

ID дорожек назначаются следующим образом:

- Файлы AVI: видеодорожка имеет идентификатор 0. Звуковые дорожки получают идентификаторы в порядке возрастания, начиная с 1.

- Файлы AAC, AC-3, MP3, SRT и WAV: одна «дорожка» в этом файле получает идентификатор 0.

- Большинство других файлов: идентификаторы треков назначаются в порядке, в котором треки находятся в файле, начиная с 0.

Параметры, использующие идентификаторы треков это те, описание которых содержит 'TID'. Следующие параметры также используются идентификаторы треков: -- audio-tracks, --video-tracks, --subtitle-tracks, --button-tracks и --track-tags.

## 6.2. Специальные идентификаторы дорожки

Есть несколько идентификаторов, которые имеют особое значение и не встречаются в выходных данных идентификации.

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

Специальный идентификатор дорожки «-2» ссылается на главы в исходном файле. В данный момент только параметр --sync использует этот специальный идентификатор. В качестве альтернативы --sync -2:... можно использовать параметр --chapter-sync ....

# 7. Работа с языками

Matroska(tm) поддерживает два различных типа языковых элементов: старый, устаревший элемент «Language», содержащий коды ISO 639-2 alpha 3, и новые теги «LanguageIETF», содержащие языковые теги IETF BCP 47. Все параметры mkvmerge(1), которые принимают язык, принимают языковой тег BCP 47. mkvmerge(1) будет выводить значение для устаревшего элемента «Language» из языковых тегов BCP 47, где это возможно.

При идентификации файла в режиме JSON существующие элементы заголовка дорожки «LanguageIETF» будут выведены в качестве свойства дорожки language_ietf.

При записи файла mkvmerge(1) всегда будет записывать элементы «LanguageIETF», «ChapLanguageIETF» и «TagLanguageIETF» (последние два только в случае записи глав или тегов соответственно). В дополнение к этим элементам будут записаны соответствующие старые элементы; они будут установлены на часть кода ISO 639-2 языкового тега BCP 47. Например, когда язык дорожки установлен на sr-Cyrl-RS, «LanguageIETF» будет установлен на sr-Cyrl-RS, а старый элемент «Language» будет установлен на srp.

При чтении существующих файлов (файлы Matroska, файлы глав или тегов XML и т. д.), которые уже содержат элементы «...LanguageIETF» существующие элементы будут сохранены. В противном случае элементы «..LanguageIETF» будут добавлены на основе параметров командной строки и других существующих устаревших элементов «...Language».

Создание новых элементов можно полностью отключить с помощью параметра командной строки --disable-language-ietf, который действует на все три новых элемента.

С помощью параметра --normalize-language-ietf можно выбрать метод нормализации, применяемый к расширенным языковым подтегам.

# 8. Преобразование текстовых файлов и кодировок

Note:

Этот раздел относится ко всем программам в MKVToolNix, даже если в нём упоминается только mkvmerge(1).

## 8.1. Введение

Весь текст в файле Matroska(tm) закодирован в UTF-8. это означает, что mkvmerge(1) должен преобразовать каждый текстовый файл, который он читает, а также каждый текст, представленный в командной строке, из любого набора символов в UTF-8. В свою очередь это также означает, что вывод mkvmerge(1) необходимо преобразовать обратно в этот набор символов из UTF-8, например, если не-английский перевод используется с --ui-language или для текста, происходящего из файла Matroska(tm).

mkvmerge(1) выполняет это преобразование автоматически на основе наличия маркера порядка байтов (коротко: BOM) или текущей локали системы. То, как набор символов выводится из локали, зависит от операционной системы, в которой mkvmerge(1) выполняется.

## 8.2. Маркеры последовательности байтов (BOM)

Текстовые файлы, начинающиеся с BOM, уже закодированы в одном представлении UTF. mkvmerge(1) поддерживает следующие пять режимов: UTF-8, UTF-16 Little и Big Endian, UTF-32 Little и Big Endian. Текстовые файлы из BOM автоматически конвертируются в UTF-8. Любые параметры, которые иначе установят набор символов для такого файла (например, --sub-charset), молча игнорируется.

## 8.3. Linux и Unix-подобные системы, включая macOS

В Unix-системах mkvmerge(1) использует системный вызов setlocale()3, который, в свою очередь, использует переменные среды LANG, LC_ALL и LC_CYPE. Полученный набор символов часто является одним из семейства UTF-8 или ISO-8859-* и используется для всех операций с текстовыми файлами и для кодирования строк в командной строке и для вывода в консоль.

## 8.4. Windows

В Windows набор символов по умолчанию, используемый для преобразования текстовых файлов, определяется вызовом системного вызова GetACP().

Чтение командной строки завершается функцией GetCommandLineW(), которая возвращает строку Unicode. Поэтому параметр --command-line-charset игнорируется в Windows.

Вывод консоли состоит из трёх сценариев:

1. Если вывод перенаправлен параметром --redirect-output, то по умолчанию устанавливается набор символов UTF-8. Это можно изменить с помощью --output-charset.

2. Если вывод перенаправлен с cmd.exe самостоятельно, например с mkvinfo file.mkv > info.txt, тогда набор символов всегда будет установлен в UTF-8 и не может быть изменён.

3. В противном случае (при записи непосредственно в консоль) используется функция Windows WriteConsoleW() и параметр --output-charset игнорируется. Консоль должна иметь возможность выводить все символы Unicode, для которых установлена соответствующая поддержка языков (например, китайские символы могут не отображаться в английских версиях Windows).

## 8.5. Параметры командной строки

Существуют следующие параметры для указания специфичных кодировок:

- --sub-charset для файлов субтитров и для субтитров, находящихся в контейнере формата, для которых кодировка не может быть определена однозначно (напр. файлы Ogg),

- --chapter-charset для текстовых файлов глав и для глав и заголовков файлов, хранящихся в контейнерных форматах, для которых набор символов не может быть определён однозначно (например, файлы Ogg для информации глав, дорожек и заголовков файлов и т. д.; файлы MP4 для информации глав),

- --command-line-charset - для всех строк в командной строке,

- --output-charset для всех строк, записанных в консоль или файл, если вывод был перенаправлен с параметром --redirect-output. В не Windows-системах по умолчанию для исходного набора символов используется текущий набор символов системы. В Windows перенаправление по умолчанию установлено в UTF-8 с использованием --redirect-output и с самим cmd.exe, например, mkvinfo file.mkv > info.txt.

# 9. Файлы параметров

Файлом параметров является файл, из которого mkvmerge(1) может считать дополнительные аргументы командной строки. Это можно использовать для того, чтобы обойти определённые ограничения оболочки или операционной системы во время выполнения внешних программ, например, при ограниченной длине командной строки.

Файл параметров содержит данные в формате JSON. Его содержимое должно быть действительным массивом JSON, состоящим исключительно из строк JSON. Кодировка файла должна быть UTF-8. Файл не должен начинаться с маркера порядка байтов (BOM), но если он существует, он будет пропущен.

Правила для экранирования специальных символов внутри JSON приведены в официальной спецификации JSON, RFC 7159.

Само имя файла параметров должно быть указано в виде аргумента командной строки с префиксом «@».

Командная строка «mkvmerge -o "мой файл.mkv" -A "фильм.avi" звук.ogg» может быть преобразована в следующий файл параметров JSON под названием, например, «options.json»:

    [
      "-o",
      "c:\\Matroska\\мой файл.mkv",
      "--title",
      "#65",
      "-A",
      "фильм.avi",
      "звук.ogg"
    ]

Тогда соответствующая команда будет «mkvmerge @options.json».

# 10. Связывание файла

Matroska(tm) поддерживает связывание файлов, которое просто говорит, что конкретный файл является предшественником или преемником текущего файла. Если быть точным, то на самом деле связаны не файлы, а сегменты Matroska(tm). Поскольку большинство файлов, вероятно, будут содержать только один сегмент Matroska(tm), в приведённых ниже объяснениях используется термин «связывание файлов», хотя «связывание сегментов» было бы более подходящим.

Каждый сегмент идентифицируется уникальным 128-битным UID сегмента. Этот UID автоматически генерирует mkvmerge(1). Связывание осуществляется главным образом путём размещения UID сегментов (кратко: SID) предыдущего/следующего файла в информацию заголовка сегмента. mkvinfo(1) печатает эти идентификаторы SID, если найдёт их.

Если файл разбит на несколько меньших и используется связывание, то метки времени не будут начинаться снова с 0, а будут продолжаться там, где остановился последний файл. Таким образом сохраняется абсолютное время, даже если предыдущие файлы недоступны (например, во время потоковой передачи). Если связывание не используется, временные метки должны начинаться с 0 для каждого файла. По умолчанию mkvmerge(1) не использует связывание файлов. Если вы хотите, вы можете включить его с помощью параметра --link. Этот параметр полезен только в том случае, если также активировано разделение.

Независимо от того, активировано ли разделение или нет, пользователь может указать mkvmerge(1) чтобы связать созданные файлы с конкретными SID. Это достигается с помощью параметров --link-to-previous и --link-to-next. Эти параметры принимают сегмент SID в формате, который выводит mkvinfo(1): 16 шестнадцатеричных чисел между 0x00 и 0xff, где каждое имеет префикс «0x», например, «0x41 0xda 0x73 0x66 0xd9 0xcf 0xb2 0x1e 0xae 0x78 0xeb 0xb4 0x5e 0xca 0xb3 0x93». В качестве альтернативы можно использовать более короткую форму: 16 шестнадцатеричных чисел между 0x00 и 0xff без префиксов «0x» и без пробелов, например «41da7366d9cfb21eae78ebb45ecab393».

Если разделение используется, то первый файл связывается с SID, передаваемым из --link-to-previous, и последний файл связывается с SID, передаваемым из --link-to-next. Если разделение не используется, то один выходной файл будет связан с обоими SID.

# 11. Стандартные значения

Спецификация Matroska(tm) утверждает, что некоторые элементы имеют значение по умолчанию. Обычно элемент не записывается в файл, если его значение равно значению по умолчанию, чтобы сэкономить место. Элементы, которые пользователь может пропустить в выводе mkvinfo(1), — это элементы язык и флаг дорожки по умолчанию. Значением по умолчанию для элемента язык является английский ('eng'), а значением по умолчанию для элемента флаг дорожки по умолчанию является да. Поэтому, если вы использовали --language 0:eng для дорожки, оно не будет отображаться в выводе mkvinfo(1).

# 12. Вложения

Возможно, вы также хотите сохранить некоторые фотографии вместе со своим файлом Matroska(tm), или вы используете субтитры SSA и нуждаетесь в специальном шрифте TrueType(tm), который очень редко встречается. В этих случаях вы можете вложить эти файлы в файл Matroska(tm). Они будут не просто добавлены в файл, а встроены в него. Затем проигрыватель сможет показать эти файлы (случай «фотографий») или использовать их для воспроизведения субтитров (случай «шрифты TrueType(tm)»).

Вот пример вложения фотографии и шрифта TrueType(tm) в выходной файл:

    $ mkvmerge -o output.mkv -A video.avi sound.ogg \
      --attachment-description "Me and the band behind the stage in a small get-together" \
      --attachment-mime-type image/jpeg \
      --attach-file me_and_the_band.jpg \
      --attachment-description "The real rare and unbelievably good looking font" \
      --attachment-mime-type application/octet-stream \
      --attach-file really_cool_font.ttf

Если в качестве входного файла используется файл Matroska(tm) с вложением, то mkvmerge(1) скопирует вложения в новый файл. Выбор того, какие вложения копируются, а какие нет, можно изменить с помощью параметров --attachments и --no-attachments.

# 13. Главы

Система глав Matroska(tm) более обширна, чем старая известная система, используемая в файлах OGM. Полная документация расположена на сайте Matroska.

mkvmerge(1) поддерживает два типа файлов глав в качестве входных данных. Первый формат под названием «простой формат главы» является тем же форматом, который ожидают инструменты OGM. Второй формат — это формат глав на основе XML, который поддерживает все функции глав Matroska(tm).

Помимо специальных файлов глав mkvmerge(1) может также читать главы из других форматов (например, MP4, Ogg, Blu-rays или DVD).

## 13.1. Простой формат глав

Этот формат состоит из пар строк, начинающихся с «CHAPTERxx=» и «CHAPTERxxNAME=» соответственно. Первый содержит метку времени начала, а второй содержит название. Например:

    CHAPTER01=00:00:00.000
    CHAPTER01NAME=Intro
    CHAPTER02=00:02:30.000
    CHAPTER02NAME=Baby prepares to rock
    CHAPTER03=00:02:42.300
    CHAPTER03NAME=Baby rocks the house

mkvmerge(1) преобразует каждую пару или строки в один ChapterAtom Matroska(tm). Он не устанавливает какой-либо ChapterTrackNumbe, что означает, что все главы применяются ко всем дорожкам в файле.

Поскольку это текстовый файл, может потребоваться преобразование набора символов. Смотрите раздел о текстовых файлах и наборах символов для разъяснения, как mkvmerge(1) преобразует между наборами символов.

## 13.2. Формат глав на основе XML

Формат глав на основе XML, выглядит примерно так:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE Chapters SYSTEM "matroskachapters.dtd">
    <Chapters>
      <EditionEntry>
        <ChapterAtom>
          <ChapterTimeStart>00:00:30.000</ChapterTimeStart>
          <ChapterTimeEnd>00:01:20.000</ChapterTimeEnd>
          <ChapterDisplay>
            <ChapterString>A short chapter</ChapterString>
            <ChapterLanguage>eng</ChapterLanguage>
          </ChapterDisplay>
          <ChapterAtom>
            <ChapterTimeStart>00:00:46.000</ChapterTimeStart>
            <ChapterTimeEnd>00:01:10.000</ChapterTimeEnd>
            <ChapterDisplay>
              <ChapterString>A part of that short chapter</ChapterString>
              <ChapterLanguage>eng</ChapterLanguage>
            </ChapterDisplay>
          </ChapterAtom>
        </ChapterAtom>
      </EditionEntry>
    </Chapters>

У этого формата есть три возможности, отсутствующие в простом формате глав:

1. Временная метка конца главы может быть установлена,

2. главы могут быть вложены,

3. язык и страна могут быть указаны.

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

Далее показан список поддерживаемых тегов XML, их типы данных и интервал допустимых значений:

    Chapters (master)
      EditionEntry (master)
        EditionUID (unsigned integer, valid range: 1 <= value)
        EditionFlagHidden (unsigned integer, valid range: 0 <= value <= 1)
        EditionFlagDefault (unsigned integer, valid range: 0 <= value <= 1)
        EditionFlagOrdered (unsigned integer, valid range: 0 <= value <= 1)
        ChapterAtom (master)
          ChapterAtom (master)
          ChapterUID (unsigned integer, valid range: 1 <= value)
          ChapterTimeStart (unsigned integer)
          ChapterTimeEnd (unsigned integer)
          ChapterFlagHidden (unsigned integer, valid range: 0 <= value <= 1)
          ChapterFlagEnabled (unsigned integer, valid range: 0 <= value <= 1)
          ChapterSegmentUID (binary, valid range: 1 <= length in bytes)
          ChapterSegmentEditionUID (unsigned integer, valid range: 1 <= value)
          ChapterPhysicalEquiv (unsigned integer)
          ChapterTrack (master)
            ChapterTrackNumber (unsigned integer, valid range: 1 <= value)
          ChapterDisplay (master)
            ChapterString (UTF-8 string)
            ChapterLanguage (UTF-8 string)
            ChapterCountry (UTF-8 string)
          ChapterProcess (master)
            ChapterProcessCodecID (unsigned integer)
            ChapterProcessPrivate (binary)
            ChapterProcessCommand (master)
              ChapterProcessTime (unsigned integer)
              ChapterProcessData (binary)

## 13.3. Чтение глав из Blu-ray

mkvmerge(1) может читать главы из незашифрованных дисков Blu-ray. Для этого вы можете использовать путь к одному из списков воспроизведения MPLS с параметром --chapters.

Пример: --chapters /srv/blurays/BigBuckBunny/BDMV/PLAYLIST/00001.mpls

## 13.4. Чтение глав из DVD

Когда MKVToolNix собран с библиотекой libdvdread(tm), mkvmerge(1) может читать главы с DVD. Для этого вы можете использовать путь к одной из папок или файлов на DVD с параметром --chapters. Поскольку DVD-диски могут содержать более одного заголовка, а каждый заголовок имеет свой собственный набор глав, вы можете добавить двоеточие и желаемый номер имени в конец аргумента имени файла. Номер имени по умолчанию равен 1.

Пример: --chapters /srv/dvds/BigBuckBunny/VIDEO_TS:2

## 13.5. Общие замечания

При разделении файлов mkvmerge(1) также правильно корректирует главы. Это означает, что каждый файл содержит только записи глав, которые к нему относятся, и что метки времени будут смещены в соответствии с новыми метками времени каждого исходного файла.

mkvmerge(1) может копировать главы из входных файлов Matroska(tm), если они явно не отключены с помощью параметра --no-chapters. Главы из всех источников (файлы Matroska(tm), файлы Ogg, файлы MP4, текстовые файлы глав) обычно не объединяются, а выходят в отдельные ChapterEdition. Только если главы читаются из нескольких файлов Matroska(tm) или XML, имеющих одинаковые идентификаторы UID издания, будут объединены в единый ChapterEdition. Если такое объединение желательно и в других ситуациях, пользователь должен сначала извлечь главы из всех источников с помощью mkvextract(1) затем вручную объединить файлы XML, а затем мультиплексировать их.

# 14. Метки

## 14.1. Введение

Система тегов Matroska(tm) аналогична системе других контейнеров: набор пар KEY=VALUE. Однако в Matroska(tm) эти теги также могут быть вложенными, и как KEY, так и VALUE являются собственными элементами. Пример файла example-tags-2.xml показывает, как использовать эту систему.

## 14.2. Область применения тегов

Теги Matroska(tm) не применяются автоматически ко всему файлу. Они могут могут применяться к разным частям файла: к одной или нескольким дорожкам, к одной или нескольким главам или даже к комбинации обоих. Спецификация Matroska содержит более подробную информацию об этом факте.

Одним из важных фактов является то, что теги связываются с дорожками или главами с помощью элемент тега Targets Matroska(tm) и что, UID, используемые для этого связывания, не являются идентификаторами дорожек, которые mkvmerge(1) использует везде. Вместо номеров используются UID, которые mkvmerge(1) вычисляет автоматически (если дорожка взята из формата файла, отличного от Matroska(tm)) или которые копируются из входного файла, если входной файл дорожки является файлом Matroska(tm). Поэтому трудно узнать, какие UID использовать в файле тегов, прежде чем файл будет передан в mkvmerge(1).

mkvmerge(1) знает два варианта, с помощью которых вы можете добавить теги к файлам Matroska(tm): параметры --global-tags и --tags. Разница в том, что первый параметр, --global-tags, заставит теги применяться ко всему файлу, удалив любой из упомянутых выше элементов Targets. Второй параметр, --tags, автоматически вставляет UID, который mkvmerge(1) создаёт для тега, указанного с помощью части TID параметра --tags.

## 14.3. Пример

Допустим, вы хотите добавить теги к видеодорожке, прочитанной из файла AVI. mkvmerge --identify file.avi сообщает вам, что ИД видеодорожки (не путайте этот идентификатор с UID!) равен 0. Итак, вы создаёте файл тегов, оставив все элементы Targets и выполнив mkvmerge(1):

    $ mkvmerge -o файл.mkv --tags 0:теги.xml файл.avi

## 14.4. Формат файла тегов

mkvmerge(1) поддерживает формат файла тега на основе XML. Формат очень точно смоделирован по спецификации Matroska. Как двоичный, так и дистрибутив исходников MKVToolNix поставляются с образцом файла с именем example-tags-2.xml, который просто перечисляет все известные теги и может использоваться в качестве основы для реальных файлов тегов.

Основы:

- Крайний элемент должен быть <Tags>.

- Один логический тег содержится в паре тегов <Tag> XML.

- Пробелы перед и после меток игнорируются.

## 14.5. Типы данных

Новая система тегов Matroska(tm) знает только два типа данных: строку UTF-8 и двоичный тип. Первый используется для имени тега и элемента <String>, а двоичный тип используется для элемента <Binary>.

Поскольку двоичные данные сами по себе не помещаются в файл XML mkvmerge(1) поддерживает два других метода хранения двоичных данных. Если содержимое тега XML начинается с «@», то следующий текст рассматривается как имя файла. Содержимое соответствующего файла копируется в элемент Matroska(tm).

В противном случае ожидается, что данные будут закодированы в Base64. Это кодировка, которая преобразует двоичные данные в ограниченный набор символов ASCII и используется, например, в программах электронной почты. mkvextract(1) выведет данные, закодированные в Base64 для двоичных элементов.

Устаревшей системе тегов известны ещё некоторые типы данных, которые можно найти в официальной спецификации тегов Matroska(tm). Поскольку mkvmerge(1) больше не поддерживает эту систему, эти типы здесь не описаны.

## 14.6. Известные теги файла формата XML

Далее показан список поддерживаемых тегов XML, их типы данных и интервал допустимых значений:

    Tags (master)
      Tag (master)
        Targets (master)
          TargetTypeValue (unsigned integer)
          TargetType (UTF-8 string)
          TrackUID (unsigned integer)
          EditionUID (unsigned integer)
          ChapterUID (unsigned integer)
          AttachmentUID (unsigned integer)
        Simple (master)
          Simple (master)
          Name (UTF-8 string)
          TagLanguage (UTF-8 string)
          DefaultLanguage (unsigned integer)
          String (UTF-8 string)
          Binary (binary)

# 15. Информация о сегментах

С помощью XML-файла сегментной информации можно задать определённые значения в поле заголовка «информация о сегменте» файла Matroska(tm). Все эти значения нельзя задать с помощью других параметров командной строки.

Другие поля заголовка «информации о сегментах» можно установить с помощью параметров командной строки, но не с помощью файла XML. Это включает, например, параметры --title и --timestamp-scale.

Существуют и другие элементы, которые нельзя установить ни с помощью параметров командной строки, ни с помощью файлов XML. К ним относятся следующие элементы: DateUTC (также известный как «дата мультиплексирования»), MuxingApp, WritingApp и Duration. Они всегда устанавливаются mkvmerge(1) самостоятельно.

Далее показан список поддерживаемых тегов XML, их типы данных и интервал допустимых значений:

    Info (master)
      SegmentUID (binary, valid range: length in bytes == 16)
      SegmentFilename (UTF-8 string)
      PreviousSegmentUID (binary, valid range: length in bytes == 16)
      PreviousSegmentFilename (UTF-8 string)
      NextSegmentUID (binary, valid range: length in bytes == 16)
      NextSegmentFilename (UTF-8 string)
      SegmentFamily (binary, valid range: length in bytes == 16)
      ChapterTranslate (master)
        ChapterTranslateEditionUID (unsigned integer)
        ChapterTranslateCodec (unsigned integer)
        ChapterTranslateID (binary)

# 16. Компоновка файла Matroska

Компоновка файла Matroska(tm) достаточно гибкая. mkvmerge(1) будет отображать файл заранее предопределённым образом. Результирующий файл выглядит так:

[Заголовок EBML] [сегмент {метапоиск #1} [информация о сегменте] [информация о дорожке] {вложения} {главы} [кластер 1] {кластер 2} ... {кластер n} {cue} {метапоиск #2} {метки}]

Элементы в фигурных скобках необязательны и зависят от использованного содержимого и параметров. Пара замечаний:

- метапоиск №1 включает лишь небольшое количество элементов уровня 1, и только если они действительно существуют: вложения, главы, списки cue, теги, метапоиск №2. Старые версии mkvmerge(1) также используется для размещения кластеров в этом мета-элементе поиска. Поэтому потребовалось некоторое неточное угадывание, чтобы зарезервировать достаточно места. Это часто терпело неудачу. Теперь только кластеры хранятся в метапоиске №2, а метапоиск №1 относится к метапоиску №2.

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

Наиболее короткий файл Matroska(tm) выглядит так:

[Заголовок EBML] [сегмент [информация о сегменте] [информация о дорожке] [кластер 1]]

Это пример файла, содержащий только с аудио.

# 17. Внешние файлы меток времени

mkvmerge(1) позволяет пользователю самостоятельно выбирать метки времени для определённой дорожки. Это можно использовать для создания файлов с переменной частотой кадров или для включения тишины в аудио. В этом случае кадр является элементом, который создаёт отдельно для блока Matroska(tm). Для видео это ровно один кадр, для аудио это один пакет определённого типа аудио. например, для AC-3 это будет пакет, содержащий 1536 семплов.

Файлы временных меток, используемые при добавлении дорожек друг к другу, должны указываться только для первой части цепочки дорожек. Например, если вы добавляете два файла, v1.avi и v2.avi, и хотите использовать временные метки, ваша командная строка должна выглядеть примерно так:

    $ mkvmerge ... --timestamps 0:мои_временные_метки.txt v1.avi +v2.avi

Существует четыре формата, которые распознает mkvmerge(1). Первая строка всегда содержит номер версии. Пустые строки и строки, содержащие только пробелы, и строки, начинающиеся с «#», игнорируются.

## 17.1. Формат файла меток времени v1

Этот формат начинается со строки версии. Вторая строка объявляет количество кадров в секунду по умолчанию. Все последующие строки содержат три числа, разделённые запятыми: начальный кадр (0 — первый кадр), конечный кадр и количество кадров в этом диапазоне. FPS — это число с плавающей запятой с точкой «.» в качестве десятичной запятой. Диапазоны могут содержать разрывы, для которых используется стандартное значение FPS. Например:

    # timestamp format v1
    assume 27.930
    800,1000,25
    1500,1700,30

## 17.2. Формат файла меток времени v2

В этом формате каждая строка содержит метку времени для соответствующего кадра. Эта временная метка должна быть указана с точностью до миллисекунд. Это может быть число с плавающей запятой, но это не обязательно. Вы должны предоставить как минимум столько строк временных меток, сколько кадров в дорожке. Метки времени в этом файле должны быть отсортированы. Пример для 25 кадров в секунду:

    # timestamp format v2
    0
    40
    80

## 17.3. Формат файла меток времени v3

В этом формате каждая строка содержит длительность в секундах, за которой следует дополнительное количество кадров в секунду. Оба могут быть числами с плавающей запятой. Если количество кадров в секунду отсутствует, используется значение по умолчанию. Для аудио вы должны позволить кодеку самостоятельно вычислить метки времени кадра. Для этого вы должны использовать 0,0 в качестве количества кадров в секунду. Вы также можете создать разрывы в потоке, используя ключевое слово «gap», за которым следует длительность разрыва. Пример аудиофайла:

    # timestamp format v3
    assume 0.0
    25.325
    7.530,38.236
    gap, 10.050
    2.000,38.236

## 17.4. Формат файла меток времени v4

Формат идентичен формату v2. Единственное отличие в том, что временные метки не должны быть отсортированы. Этот формат не следует когда-либо использовать.

# 18. Коды завершения

mkvmerge(1) завершается с одним из трёх кодов:

- 0 -- Этот код завершения означает, что паковка закончилась успешно.

- 1 -- В этом случае mkvmerge(1) выдал хотя бы одно предупреждение, однако паковка продолжилась. Предупреждение начинается с текста «Warning:». В зависимости от произошедших ошибок, результирующие файлы могут быть либо целыми либо повреждёнными. Пользователю рекомендуется обратить внимание на само предупреждение и проверить результирующие файлы.

- 2 -- Этот код завершения используется в случае возникновения ошибки. mkvmerge(1) прекращает работу сразу после вывода сообщения об ошибке. Ошибки могут возникнуть из-за неверных параметров командной строки, из-за ошибки чтения/записи или просто из-за повреждённых файлов.

# 19. Переменные среды

mkvmerge(1) использует стандартные переменные, определяющие системный язык (например: LANG и семейство LC_*). Дополнительные переменные:

Option | Description
--- | ---
MKVMERGE_DEBUG, MKVTOOLNIX_DEBUG и его краткая форма MTX_DEBUG | Содержимое обрабатывается так, как если бы оно было передано с помощью параметра --debug.
MKVMERGE_ENGAGE, MKVTOOLNIX_ENGAGE и его краткая форма MTX_ENGAGE | Содержимое обрабатывается так, как если бы оно было передано с помощью параметра --engage.

# 20. Смотрите также

mkvinfo(1), mkvextract(1), mkvpropedit(1), mkvtoolnix-gui(1)

# 21. Домашняя страница

Последняя версия программы всегда доступна на домашней странице MKVToolNix.