table of contents
- НАЗВАНИЕ
- КРАТКОЕ СОДЕРЖАНИЕ
- ОПИСАНИЕ
- ИСПОЛЬЗОВАНИЕ
- ПОРЯДОК ПАРАМЕТРОВ
- ПРИМЕРЫ
- ИДЕНТИФИКАТОРЫ ДОРОЖЕК
- РАБОТА С ЯЗЫКАМИ
- ПРЕОБРАЗОВАНИЕ ТЕКСТОВЫХ ФАЙЛОВ И КОДИРОВОК
- ФАЙЛЫ ПАРАМЕТРОВ
- СВЯЗЫВАНИЕ ФАЙЛА
- СТАНДАРТНЫЕ ЗНАЧЕНИЯ
- ВЛОЖЕНИЯ
- ГЛАВЫ
- МЕТКИ
- ИНФОРМАЦИЯ О СЕГМЕНТАХ
- КОМПОНОВКА ФАЙЛА Matroska
- ВНЕШНИЕ ФАЙЛЫ МЕТОК ВРЕМЕНИ
- КОДЫ ЗАВЕРШЕНИЯ
- ПЕРЕМЕННЫЕ СРЕДЫ
- СМОТРИТЕ ТАКЖЕ
- ДОМАШНЯЯ СТРАНИЦА
- АВТОР
- ПРИМЕЧАНИЯ
mkvmerge(1) | Команды пользователя | mkvmerge(1) |
НАЗВАНИЕ¶
mkvmerge - Паковщик мультимедийных потоков в файл Matroska
КРАТКОЕ СОДЕРЖАНИЕ¶
mkvmerge [глобальные параметры] {-o выход} [параметры1] {файл1} [[параметры2] {файл2}] [@файл-параметров.json]
ОПИСАНИЕ¶
Эта программа принимает входные данные из нескольких медиафайлов и соединяет их потоки (все или выбранные) в файл Matroska; смотрите сайт Matroska[1].
Важно
Порядок параметров в командной строке очень важен. Пожалуйста, прочтите раздел «Порядок параметров», если вы незнакомы с программой.
Глобальные параметры¶
-v, --verbose
-q, --quiet
-o, --output имя-файла
-w, --webm
Для глав и тэгов разрешена только подгруппа элементов. mkvmerge(1) автоматически удалит все элементы, неразрешённые спецификацией.
--title заголовок
--default-language код-языка
Стандартный код для «неопределённого» языка — und.
Обработка информации о сегментах (глобальные параметры)¶
--segmentinfo имя-файла.xml
Смотрите раздел XML-файлы информации о сегментах ниже для подробностей.
--segment-uid SID1,SID2,...
Если SID начинается с =, то остальное будет распознано как имя файла Matroska, чей сегмент UID считывается и используется.
Каждый созданный файл содержит один сегмент, и каждый сегмент имеет один UID сегмента. Если указано больше UID сегментов, чем создано сегментов, то лишние UID игнорируются. Если указано меньше UID, чем создано сегментов, то для них будут созданы случайные UID.
Работа с главами и тегами (глобальные параметры)¶
--chapter-language код-языка
Этот параметр можно использовать как для простых файлов глав, так и для исходных файлов, содержащих главы без информации об их языке, напр., файлы MP4 и OGM.
Язык, указанный в этом параметре, также используется и при генерации глав с помощью параметра --generate-chapters.
--chapter-charset кодировка
Этот переключатель также применяется к главам, скопированным из определённых типов контейнеров, например файлов Ogg/OGM и MP4. Дополнительные сведения смотрите ниже в разделе о главах.
--chapter-sync d[,o[/p]]
o/p: поправка временных меток с помощью o/p, чтобы исправить линейные смещения. По умолчанию в случае пропуска p равно 1. И o и p могут быть числами с плавающей запятой.
По умолчанию: ручная коррекция синхронизации отключена (что равноценно d = 0 и o/p = 1.0).
Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
--generate-chapters режим
Этот режим также работает с режимами разделения «частей:» и «частей-кадров:». Для этих режимов создаётся одна глава для каждого добавленного диапазона временных меток (тех, чьи начальные метки времени имеют префикс «+»).
Примечание
mkvmerge(1) требует наличия видео или аудиодорожки, для определения того, что будет добавлен новый файл. При слиянии одной или нескольких видеодорожек используется первая. В ином случае используется первая звуковая дорожка.
Пример: --generate-chapters interval:45s
Названия новых глав управляются параметром --generate-chapters-name-template. Язык устанавливается с помощью --chapter-language, который должен быть указан перед --generate-chapters.
--generate-chapters-name-template шаблон
Существует несколько переменных, которые можно использовать в шаблоне, и которые заменяются их фактическими значениями во время создания главы. Строка «<NUM>» будет заменена номером главы. Строка «<START>» будет заменена меткой времени начала главы.
Строки «<FILE_NAME>» и «<FILE_NAME_WITH_EXT>» заполняются только при создании глав для добавляемых файлов. Они будут заменены именем добавляемого файла без указания соответственно его расширения. Обратите внимание, что вставляются только базовое имя и расширение файла, а не его каталог или компоненты диска.
Вы можете указать минимальное число мест для номера главы с помощью «<NUM:places>», например, «<NUM:3>». Полученное число будет дополнено ведущими нулями, если число мест меньше указанного.
Вы можете управлять форматом, используемым начальной меткой времени, с помощью <START:format>. Когда формат не задан, то умолчанию используется '%H:%M:%S'. Допустимыми кодами формата являются:
--cue-chapter-name-format формат
Если этот параметр не задан, то mkvmerge(1) по умолчанию использует формат «%p - %t» (исполнитель, за которым следует пробел, тире, ещё один пробел и заголовок).
Если формат указан, то всё, исключая мета-символы, копируется как есть, а сами мета-символы подменяются следующим образом:
--chapters имя-файла
--global-tags имя-файла
Основные настройки вывода (расширенные глобальные параметры)¶
--track-order FID1:TID1,FID2:TID2,...
Если этот параметр не указан, дорожки будут отсортированы по их типу в первую очередь и по порядку их исходного файла во вторую очередь. Первыми идут видеодорожки, затем аудиодорожки и дорожки субтитров. Другие редко используемые типы дорожек идут последними.
--cluster-length свойство
Если значение не указано, то mkvmerge(1) поместит в каждый кластер не более n блоков данных. Максимальное количество блоков — 65535.
Если число d содержит постфикс «ms», тогда mkvmerge(1) размещает максимум d миллисекунд данных в каждый кластер. Диапазон для d — от «100 мс» до «32000 мс».
По умолчанию mkvmerge(1) размещает не более 65535 блоков и 5000 мс данных в кластер.
Программы, пытающиеся найти определённый кадр, могут обращаться только непосредственно к кластеру, а затем должны прочесть весь кластер. Поэтому создание больших кластеров может привести к неточному или медленному поиску.
--clusters-in-meta-seek
--timestamp-scale фактор
Обычно mkvmerge(1) использует значение 1000000, что означает, что метки времени и длительности имеют точность 1 мс. Для файлов, которые не содержат в себе видеодорожку, но имеют по крайней мере одну звуковую mkvmerge(1) автоматически выберет коэффициент масштаба метки времени, чтобы все метки времени и длительность имели точность до одного звукового образца. Это влечёт за собой большие накладные расходы, но обеспечивает точный поиск и извлечение.
Если используется специальное значение -1, то mkvmerge(1) будет использовать точность до одного семпла, даже если видео-дорожка присутствует.
--enable-durations
--no-cues
--no-date
--disable-lacing
--disable-track-statistics-tags
Включение этого параметра запрещает mkvmerge(1) записывать эти теги и перезаписывать существующие теги с такими же названиями.
--disable-language-ietf
--normalize-language-ietf режим
В канонической форме все подтеги, для которых существуют предпочтительные значения, заменяются этими предпочтительными значениями. Это преобразует, например, «zh-yue-jyutping» в «yue-jyutping» или «fr-FX» в «fr-FR».
Для формы расширенных языковых подтегов изначально строится каноническая форма. После этого все основные языки, для которых существует расширенный языковой подтег, заменяются этим расширенным языковым подтегом и его префиксом. Это преобразует, например, «yue-jyutping» обратно к «zh-yue-jyutping», но не влияет на «fr-FR», потому что «fr» не является расширенным языковым подтегом.
--stop-after-video-ends
Разбиение, связывание, соединение и склеивание файлов (другие глобальные параметры)¶
--split спецификация
На данный момент mkvmerge(1) поддерживает следующие режимы:
Синтаксис: --split [size:]d[k|m|g]
Примеры: --split size:700m или --split 150000000
Параметр d может заканчиваться на «k» «m» или «g», чтобы указать, что размер в КБ, МБ или ГБ соответственно. В ином случае предполагается размер в байтах. После того как текущий исходный файл достигнет этого ограничения размера, будет создан новый.
Префикс 'size:' может быть опущен по соображениям совместимости.
Синтаксис: --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:» можно опустить с целью совместимости.
Синтаксис: --split timestamps:A[,B[,C...]]
Пример: --split timestamps:00:45:00.000,01:20:00.250,6300s
Параметры A, B, C и т. п. должны иметь тот же формат, что и те, что используются для продолжительности (см. выше). Список меток времени разделяется запятыми. После того, как входной поток достиг метки времени текущей точки разделения, создаётся новый файл. Затем используется следующая точка разделения, указанная в этом списке.
Префикс «timestamps:» нельзя опустить.
Syntax: --split parts:start1-end1[,[+]start2-end2[,[+]start3-end3...]]
Примеры:
Режим 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 и до конца исходного файла.
Примечание
Обратите внимание, что mkvmerge(1) выполняет разделение лишь по позициям ключевых кадров. Это относится как к началу, так и к концу каждого диапазона. Поэтому, даже если метка времени конца находится между двумя ключевыми кадрами, mkvmerge(1) продолжит вывод кадров до следующего ключевого кадра, но не включая его.
Синтаксис: --split parts-frames:start1-end1[,[+]start2-end2[,[+]start3-end3...]]
Примеры:
Режим parts-frames указывает mkvmerge(1) сохранить определённые диапазоны номеров кадров/полей, отбрасывая другие. Диапазоны для сохранения должны быть перечислены после ключевого слова parts-frames: и разделены запятыми. Сам диапазон состоит из начального и конечного номера кадра/поля. Нумерация начинается с 1.
Если начальное число не указано, то по умолчанию будет использовано число конца предыдущего диапазона. Если предыдущего диапазона нет, то будет использоваться начало файла (см. пример 3).
Если конечное число не указано, то по умолчанию оно указывает на конец фала, так что mkvmerge(1) просто сохранит оставшееся (см. пример 3).
Обычно каждый диапазон записывается в новый файл. Это можно изменить так, чтобы последовательные диапазоны записывались в один файл. Для этого пользователь должен поставить перед номером начала символ +. Это указывает mkvmerge(1) не создавать новый файл, а вместо этого добавить диапазон в тот же файл, в который был записан предыдущий диапазон. Метки времени будут настроены таким образом, чтобы во входном файле не было пробелов, даже если во входном файле был пробел в двух диапазонах.
Примечание
Обратите внимание, что mkvmerge(1) выполняет разделение только по позициям ключевых кадров. Это относится как к началу, так и к концу каждого диапазона. Поэтому, даже если конечный кадр / номер поля находится между двумя ключевыми кадрами, mkvmerge(1) продолжит вывод кадров вплоть до следующего ключевого кадра, исключая его.
В примере 2 mkvmerge(1) создаст только один файл. Этот файл будет включать содержимое, начиная с 733 до 912, и содержимое, начиная с 1592 до 2730.
В примере 3 mkvmerge(1) создаст два файла. Первый будет содержать данные от начала исходного файла по 430. Второй файл будет содержать данные с 2512 и до конца исходного файла.
Этот режим берёт для вывода только первую видеодорожку. Если вывод не является видеодорожкой, разбиение произведено не будет.
Примечание
Номера, заданные с этим аргументом, интерпретируются на основе числа выводимых блоков Matroska. Единый блок Matroska содержит либо полный кадр (для прогрессивного содержимого) или одно поле (для содержимого с чередованием). mkvmerge не различает их и просто подсчитывает количество блоков. Например: если вы хотите разделить после 25-го полного кадра с чередующимся содержимым, вам придётся в качестве точки разделения указать 50 (два поля на полный кадр).
Синтаксис: --split frames:A[,B[,C...]]
Пример: --split frames:120,237,891
Все параметры A, B, C и далее должны быть целыми положительными числами. Нумерация начинается с 1. Список номеров кадров/полей разделяется запятыми. После того, как входящий поток достиг номера кадра/поля текущей точки разделения, создаётся новый файл. Затем используется следующая точка разделения, указанная в этом списке.
Префикс «frames:» нельзя опустить.
Этот режим берёт для вывода только первую видеодорожку. Если вывод не является видеодорожкой, разбиение произведено не будет.
Примечание
Номера, заданные с этим аргументом, интерпретируются на основе числа выводимых блоков Matroska. Единый блок Matroska содержит либо полный кадр (для прогрессивного содержимого) или одно поле (для содержимого с чередованием). mkvmerge не различает их и просто подсчитывает количество блоков. Например: если вы хотите разделить после 25-го полного кадра с чередующимся содержимым, вам придётся в качестве точки разделения указать 50 (два поля на полный кадр).
Синтаксис: --split chapters:all or --split chapters:A[,B[,C...]]
Пример: --split chapters:5,8
Все параметры A, B, C и далее должны быть целыми положительными числами. Нумерация начинается с 1. Список номеров глав разделяется запятыми. Разделение произойдёт непосредственно перед первым ключевым кадром, метка времени которого равна или больше начальной метки времени для глав, номера которых указаны. Глава, начинающаяся с 0s, никогда не рассматривается для разделения и отбрасывается без изменений.
Вместо указания номеров всех глав, достаточно использовать ключевое слово all.
Префикс «chapters:» нельзя опустить.
Примечание
Формат файла Matroska поддерживает произвольные глубоко вложенные структуры глав, которые называются «записями издания» и «атомами глав». Однако этот режим учитывает лишь самый высокий уровень глав во всех записях издания.
Для этого режима разделения имя исходного файла обрабатывается иначе, чем для обычной операции. Он может содержать printf, выражение на подобии «%d», включая необязательную ширину поля, напр. «%02d». Если это так, то номер текущего файла будет отформатирован соответствующим образом и вставлен в это место имени файла. Если такого шаблона нет, то перед расширением файла предусматривается шаблон «-%03d»: «-o output.mkv» приведёт к «output-001.mkv» и т. д. Если расширения нет, к имени будет добавлено «-%03d».
Другим возможным шаблоном является «%c», который будет заменён названием первой главы в файле. Обратите внимание, что когда присутствует «%c», шаблон «-%03d» не будет добавлен автоматически.
--link
--link-to-previous segment-UID
Если SID начинается с =, то остальное будет распознано как имя файла Matroska, чей сегмент UID считывается и используется.
--link-to-next segment-UID
Если SID начинается с =, то остальное будет распознано как имя файла Matroska, чей сегмент UID считывается и используется.
--append-mode режим
Когда 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 ']'
=
Также можно поставить «=» перед следующим именем файла. Поэтому следующие две команды эквивалентны:
$ 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 ')'
Следует отметить несколько моментов:
Поддержка вложений (другие глобальные параметры)¶
--attachment-description описание
--attachment-mime-type тип MIME
Если для вложения не задан тип MIME, то его тип будет определён автоматически.
--attachment-name имя
--attach-file имя-файла, --attach-file-once имя-файла
mkvextract(1) может использоваться для извлечения вложений из файла Matroska.
--enable-legacy-font-mime-types
Это влияет как на новые вложения, если их тип MIME обнаружен автоматически, так и на существующие вложения, чьи сохранённые типы MIME будут заменены устаревшими.
Затрагиваются типы MIME: «font/sfnt», «font/ttf» и «font/collection»; они сопоставляются с «application/x-truetype-fonts» и «font/otf», который сопоставляется с «application/vnd .ms-opentype».
Параметры, которые можно использовать для каждого входного файла¶
-a, --audio-tracks [!]n,m,...
Вместо идентификаторов дорожек вы также можете предоставить коды языков ISO 639-2. Это будет работать только для исходных файлов, которые содержат языковые теги для своих дорожек.
По умолчанию: копировать любые подобные дорожки.
Если идентификаторы имеют префикс !, то значение меняется: копировать все дорожки этого типа, кроме тех, которые перечислены после !.
-d, --video-tracks [!]n,m,...
Вместо идентификаторов дорожек вы также можете предоставить коды языков ISO 639-2. Это будет работать только для исходных файлов, которые содержат языковые теги для своих дорожек.
Если идентификаторы имеют префикс !, то значение меняется: копировать все дорожки этого типа, кроме тех, которые перечислены после !.
-s, --subtitle-tracks [!]n,m,...
Вместо идентификаторов дорожек вы также можете предоставить коды языков ISO 639-2. Это будет работать только для исходных файлов, которые содержат языковые теги для своих дорожек.
Если идентификаторы имеют префикс !, то значение меняется: копировать все дорожки этого типа, кроме тех, которые перечислены после !.
-b, --button-tracks [!]n,m,...
Вместо идентификаторов дорожек вы также можете предоставить коды языков ISO 639-2. Это будет работать только для исходных файлов, которые содержат языковые теги для своих дорожек.
Если идентификаторы имеют префикс !, то значение меняется: копировать все дорожки этого типа, кроме тех, которые перечислены после !.
--track-tags [!]n,m,...
Если идентификаторы имеют префикс !, то значение разворачиваются: копировать всё кроме идентификаторов, перечисленных после !.
-m, --attachments [!]n[:all|first],m[:all|first],...
По умолчанию копирует все вложения во все выходные файлы.
Если идентификаторы имеют префикс !, то значение разворачиваются: копировать всё кроме идентификаторов, перечисленных после !.
-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, созданных программой MakeMKV. Причина в том, что MakeMKV использует последовательные числа (1, 2, 3...) в качестве UID, а не создаёт случайные.
-y, --sync TID:d[,o[/p]]
o/p: поправка временных меток с помощью o/p, чтобы исправить линейные смещения. По умолчанию в случае пропуска p равно 1. И o и p могут быть числами с плавающей запятой.
По умолчанию: ручная коррекция синхронизации отключена (что равноценно d = 0 и o/p = 1.0).
Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
--cues TID:none|iframes|all
По умолчанию — «iframes» для дорожек видео и субтитров и «none» для звуковых дорожек. Смотрите также параметр --no-cues, который препятствует созданию записей cue, независимо от используемых параметров --cues.
Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
--default-track-flag TID[:bool]
Если пользователь явно не выбирает дорожку во время воспроизведения, проигрыватель должен выбрать одну из дорожек, для которой установлен флаг «дорожка по умолчанию», учитывая, например, такие предпочтения пользователя, как язык.
Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
--track-enabled-flag TID[:bool]
Для воспроизведения следует рассматривать только дорожки, для которых установлен флаг «дорожка включена».
Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
--forced-display-flag TID[:bool]
Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
--hearing-impaired-flag TID[:bool]
Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
--visual-impaired-flag TID[:bool]
Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
--text-descriptions-flag TID[:bool]
Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
--original-flag TID[:bool]
Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
--commentary-flag TID[:bool]
Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
--track-name TID:имя
--language TID:язык
Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
-t, --tags TID:имя-файла
--aac-is-sbr TID[:0|1]
Если исходным файлом является файл Matroska, то CodecID должно быть достаточно для обнаружения SBR AAC. Однако, если CodecID неправильный, то этот переключатель можно использовать, чтобы исправить его.
Если mkvmerge неверно определяет файл AAC в виде SBR, то вы можете добавить ':0' к идентификатору дорожки.
--audio-emphasis TID:n|symbolic-name
--reduce-to-core TID
В настоящее время этот параметр влияет только на дорожки DTS. Дорожки TrueHD, которые содержат встроенное ядро AC-3, вместо этого представлены как две отдельные дорожки, для которых пользователь может выбрать, какую дорожку копировать. Для DTS такая схема не будет работать, потому что расширения HD нельзя декодировать сами по себе – в отличие от данных TrueHD.
--remove-dialog-normalization-gain TID
На данный момент этот параметр влияет только на дорожки AC-3, DTS и TrueHD.
--timestamps TID:имя-файла
--default-duration TID:x
Если длительность по умолчанию не является принудительной, mkvmerge попытается получить длительность дорожки по умолчанию из контейнера и/или закодированного битового потока для определённых типов дорожек, например, AVC/H.264 или MPEG-2.
Этот параметр также может быть использован для изменения частоты кадров видеодорожек без необходимости использования внешнего файла временных меток.
--fix-bitstream-timing-information TID[:0|1]
Примечание
Это было реализовано только для видеодорожек AVC/H.264.
--compression TID:n
Метод сжатия «mpeg4_p2»/«mpeg4p2» является специальным методом сжатия, который называется «удаление заголовка» и доступен только для видеодорожек MPEG4 part 2.
По умолчанию для некоторых типов субтитров используется сжатие «zlib». Этот метод сжатия поддерживает большинство, если не все программы воспроизведения. Поддержка других методов сжатия, кроме «none», не гарантируется.
Параметры, применяемые только к видеодорожкам¶
-f, --fourcc TID:FourCC
--display-dimensions TID:widthxheight
Другим способом указания значений является использование параметра --aspect-ratio или --aspect-ratio-factor (см. ниже). Эти параметры являются взаимоисключающими.
--aspect-ratio TID:ratio|width/height
Другим способом указать значения является использование параметров --aspect-ratio-factor или --display-dimensions (см. выше и ниже). Эти параметры являются взаимоисключающими.
--aspect-ratio-factor TID:factor|n/d
Другим способом указать значения является использование параметров --aspect-ratio или --display-dimensions (см. выше и ниже). Эти параметры являются взаимоисключающими.
--cropping TID:слева,сверху,справа,снизу
--color-matrix-coefficients TID:n
Допустимые значения и их расшифровка:
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
--chroma-subsample TID:hori,vert
Пример: Для видео с цветовая субдискретизация 4:2:0 следует указать параметр TID:1,1.
--cb-subsample TID:hori,vert
Пример: для видео с цветовой субдискретизацией 4:2:1, параметр --chroma-subsample должен быть установлен до TID:1,0 и подвыборка Cb должна быть установлена до TID:1,0.
--chroma-siting TID:hori,vert
--color-range TID:n
--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
--max-frame-light TID:n
--chromaticity-coordinates TID:red-x,red-y,green-x,green-y,blue-x,blue-y
--white-color-coordinates TID:x,y
--max-luminance TID:float
--min-luminance TID:float
--projection-type TID:method
--projection-private TID:данные
--projection-pose-yaw TID:float
--projection-pose-pitch TID:float
--projection-pose-roll TID:float
--field-order TID:n
0: прогрессивный; 1: чересстрочный с отображением верхнего поля первым, первым сохраняется верхнее поле; 2: неопределённый порядок полей; 6: чересстрочный с отображением нижнего поля первым, первым сохраняется нижнее поле; 9: чересстрочный с отображением нижнего поля первым, первым сохраняется нижнее поле; 14: чересстрочный с отображением верхнего поля первым, первым сохраняется нижнее поле
--stereo-mode TID:n|symbolic-name
Параметры, применяющиеся только к текстовым субтитрам¶
--sub-charset TID:кодировка
Этот параметр можно использовать несколько раз для входного файла, применяемого к нескольким дорожкам, с указанием разных идентификаторов дорожек.
Прочие параметры¶
-i, --identify имя-файла
Формат вывода результата может быть изменён параметром --identification-format.
-J имя-файла
-F, --identification-format формат
Этот формат не для анализа. Выходные данные будут переведены в язык, используемый в mkvmerge(1) (см. также --ui-language).
mkvmerge-identification-output-schema-v20.json[3]
Все версии схемы JSON доступны как онлайн, так и в выпущенных архивах исходного кода.
--probe-range-percentage процент
Если известно, что дорожки присутствуют, но не найдены, то процент для проверки можно изменить с помощью этого параметра. Минимальный размер 10 МБ является встроенным и не может быть изменён.
--list-audio-emphasis
--list-languages
--list-stereo-modes
-l, --list-types
--priority приоритет
Выбор "самого низкого" также приводит к тому, что mkvmerge(1) выбирает приоритет холостого ввода-вывода в дополнение к самому низкому возможному приоритету процесса.
--command-line-charset кодировка
--output-charset кодировка
-r, --redirect-output имя-файла
--flush-on-close
--ui-language код
--abort-on-warnings
--deterministic seed
Зерно может быть произвольной строкой и не обязательно должно быть числом.
Результат работы байт-идентичных файлов гарантируется только при следующих условиях:
Использование других версий mkvmerge(1) или других параметров командной строки может выдать тот же файл, идентичный до байта, но это не гарантируется.
--debug тематика
--engage функция
--gui-mode
@файл-параметров.json
--capabilities
-h, --help
-V, --version
ИСПОЛЬЗОВАНИЕ¶
Для каждого файла пользователь может выбрать, какие дорожки mkvmerge(1) должен взять. Все они помещаются в файл, указанный с параметром -o. Список известных (и поддерживаемых) входных форматов можно получить с помощью параметра -l.
Важно
Порядок параметров в командной строке очень важен. Пожалуйста, прочтите раздел «Порядок параметров», если вы незнакомы с программой.
ПОРЯДОК ПАРАМЕТРОВ¶
Порядок ввода важен для некоторых параметров. Они делятся на две категории:
Параметры обрабатываются слева направо. Если параметр появляется несколько раз в пределах одной области, будет использовано последнее вхождение. Поэтому заголовок будет установлен на «что-то другое» в следующем примере:
$ mkvmerge -o выход.mkv --title 'Такой' вход.avi --title 'Другой'
В следующем примере показано, что использование параметра --language дважды является нормальным, так как они используется в различных областях. Несмотря на то, что они применяются к одному и тому же идентификатору дорожки, они применяются к разным исходным файлам и, следовательно, имеют разную область действия:
$ mkvmerge -o выход.mkv --language 0:fre français.ogg --language 0:deu deutsch.ogg
ПРИМЕРЫ¶
Предположим, у вас есть файл Моё-видео.avi и аудиодорожка в отдельном файле, например «Моё-видео.wav». Для начала вы хотите закодировать аудио в OggVorbis:
$ 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 и наслаждайтесь. Если у вас есть несколько аудиодорожек (или даже дорожек видео), вы можете указать mplayer'у какую дорожку проигрывать, используя параметры '-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) или пакет subrip, который можно найти в исходных файлах transcode(1) в каталоге «contrib/subrip». Общий процесс таков:
$ tccat -i /path/to/copied/dvd/ -T 1 -L | tcextract -x ps1 -t vob -a 0x20 | subtitle2pgm -o мойфильм
$ pgm2txt моёвидео
$ ispell -d american *txt
$ srttool -s -w -i мойфильм.srtx -o мойфильм.srt
Выходной файл может быть использован как входной для mkvmerge(1):
$ mkvmerge -o мойфильм.mkv мойфильм.avi мойфильм.srt
Если вы хотите указать язык для определённой дорожки, это легко сделать. Сначала узнайте код ISO 639-2 для вашего языка. mkvmerge(1) может перечислить все эти коды для вас:
$ mkvmerge --list-languages
Найдите список нужных вам языков. Допустим, вы поместили две звуковые дорожки в файл Matroska и хотите установить коды своих языков, а также идентификаторы дорожек 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
ИДЕНТИФИКАТОРЫ ДОРОЖЕК¶
Обычные идентификаторы дорожек¶
Некоторые параметры в 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 дорожек назначаются следующим образом:
Параметры, использующие идентификаторы треков это те, описание которых содержит 'TID'. Следующие параметры также используются идентификаторы треков: -- audio-tracks, --video-tracks, --subtitle-tracks, --button-tracks и --track-tags.
Специальные идентификаторы дорожки¶
Есть несколько идентификаторов, которые имеют особое значение и не встречаются в выходных данных идентификации.
Специальный идентификатор дорожки «-1» является символом подстановки и применяет данный переключатель ко всем дорожкам, которые считываются из входного файла.
Специальный идентификатор дорожки «-2» ссылается на главы в исходном файле. В данный момент только параметр --sync использует этот специальный идентификатор. В качестве альтернативы --sync -2:... можно использовать параметр --chapter-sync ....
РАБОТА С ЯЗЫКАМИ¶
Matroska поддерживает два различных типа языковых элементов: старый, устаревший элемент «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 можно выбрать метод нормализации, применяемый к расширенным языковым подтегам.
ПРЕОБРАЗОВАНИЕ ТЕКСТОВЫХ ФАЙЛОВ И КОДИРОВОК¶
Примечание
Этот раздел относится ко всем программам в MKVToolNix, даже если в нём упоминается только mkvmerge(1).
Введение¶
Весь текст в файле Matroska закодирован в UTF-8. это означает, что mkvmerge(1) должен преобразовать каждый текстовый файл, который он читает, а также каждый текст, представленный в командной строке, из любого набора символов в UTF-8. В свою очередь это также означает, что вывод mkvmerge(1) необходимо преобразовать обратно в этот набор символов из UTF-8, например, если не-английский перевод используется с --ui-language или для текста, происходящего из файла Matroska.
mkvmerge(1) выполняет это преобразование автоматически на основе наличия маркера порядка байтов (коротко: BOM) или текущей локали системы. То, как набор символов выводится из локали, зависит от операционной системы, в которой mkvmerge(1) выполняется.
Маркеры последовательности байтов (BOM)¶
Текстовые файлы, начинающиеся с BOM, уже закодированы в одном представлении UTF. mkvmerge(1) поддерживает следующие пять режимов: UTF-8, UTF-16 Little и Big Endian, UTF-32 Little и Big Endian. Текстовые файлы из BOM автоматически конвертируются в UTF-8. Любые параметры, которые иначе установят набор символов для такого файла (например, --sub-charset), молча игнорируется.
Linux и Unix-подобные системы, включая macOS¶
В Unix-системах mkvmerge(1) использует системный вызов setlocale()3, который, в свою очередь, использует переменные среды LANG, LC_ALL и LC_CYPE. Полученный набор символов часто является одним из семейства UTF-8 или ISO-8859-* и используется для всех операций с текстовыми файлами и для кодирования строк в командной строке и для вывода в консоль.
Windows¶
В Windows набор символов по умолчанию, используемый для преобразования текстовых файлов, определяется вызовом системного вызова GetACP().
Чтение командной строки завершается функцией GetCommandLineW(), которая возвращает строку Unicode. Поэтому параметр --command-line-charset игнорируется в Windows.
Вывод консоли состоит из трёх сценариев:
Параметры командной строки¶
Существуют следующие параметры для указания специфичных кодировок:
ФАЙЛЫ ПАРАМЕТРОВ¶
Файлом параметров является файл, из которого mkvmerge(1) может считать дополнительные аргументы командной строки. Это можно использовать для того, чтобы обойти определённые ограничения оболочки или операционной системы во время выполнения внешних программ, например, при ограниченной длине командной строки.
Файл параметров содержит данные в формате JSON. Его содержимое должно быть действительным массивом JSON, состоящим исключительно из строк JSON. Кодировка файла должна быть UTF-8. Файл не должен начинаться с маркера порядка байтов (BOM), но если он существует, он будет пропущен.
Правила для экранирования специальных символов внутри JSON приведены в официальной спецификации JSON, RFC 7159[4].
Само имя файла параметров должно быть указано в виде аргумента командной строки с префиксом «@».
Командная строка «mkvmerge -o "мой файл.mkv" -A "фильм.avi" звук.ogg» может быть преобразована в следующий файл параметров JSON под названием, например, «options.json»:
[
"-o",
"c:\\Matroska\\мой файл.mkv",
"--title",
"#65",
"-A",
"фильм.avi",
"звук.ogg" ]
Тогда соответствующая команда будет «mkvmerge @options.json».
СВЯЗЫВАНИЕ ФАЙЛА¶
Matroska поддерживает связывание файлов, которое просто говорит, что конкретный файл является предшественником или преемником текущего файла. Если быть точным, то на самом деле связаны не файлы, а сегменты Matroska. Поскольку большинство файлов, вероятно, будут содержать только один сегмент Matroska, в приведённых ниже объяснениях используется термин «связывание файлов», хотя «связывание сегментов» было бы более подходящим.
Каждый сегмент идентифицируется уникальным 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.
СТАНДАРТНЫЕ ЗНАЧЕНИЯ¶
Спецификация Matroska утверждает, что некоторые элементы имеют значение по умолчанию. Обычно элемент не записывается в файл, если его значение равно значению по умолчанию, чтобы сэкономить место. Элементы, которые пользователь может пропустить в выводе mkvinfo(1), — это элементы язык и флаг дорожки по умолчанию. Значением по умолчанию для элемента язык является английский ('eng'), а значением по умолчанию для элемента флаг дорожки по умолчанию является да. Поэтому, если вы использовали --language 0:eng для дорожки, оно не будет отображаться в выводе mkvinfo(1).
ВЛОЖЕНИЯ¶
Возможно, вы также хотите сохранить некоторые фотографии вместе со своим файлом Matroska, или вы используете субтитры SSA и нуждаетесь в специальном шрифте TrueType, который очень редко встречается. В этих случаях вы можете вложить эти файлы в файл Matroska. Они будут не просто добавлены в файл, а встроены в него. Затем проигрыватель сможет показать эти файлы (случай «фотографий») или использовать их для воспроизведения субтитров (случай «шрифты TrueType»).
Вот пример вложения фотографии и шрифта TrueType в выходной файл:
$ 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 с вложением, то mkvmerge(1) скопирует вложения в новый файл. Выбор того, какие вложения копируются, а какие нет, можно изменить с помощью параметров --attachments и --no-attachments.
ГЛАВЫ¶
Система глав Matroska более обширна, чем старая известная система, используемая в файлах OGM. Полная документация расположена на сайте Matroska[1].
mkvmerge(1) поддерживает два типа файлов глав в качестве входных данных. Первый формат под названием «простой формат главы» является тем же форматом, который ожидают инструменты OGM. Второй формат — это формат глав на основе XML, который поддерживает все функции глав Matroska.
Помимо специальных файлов глав mkvmerge(1) может также читать главы из других форматов (например, MP4, Ogg, Blu-rays или DVD).
Простой формат глав¶
Этот формат состоит из пар строк, начинающихся с «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. Он не устанавливает какой-либо ChapterTrackNumbe, что означает, что все главы применяются ко всем дорожкам в файле.
Поскольку это текстовый файл, может потребоваться преобразование набора символов. Смотрите раздел о текстовых файлах и наборах символов для разъяснения, как mkvmerge(1) преобразует между наборами символов.
Формат глав на основе 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>
У этого формата есть три возможности, отсутствующие в простом формате глав:
Дистрибутив 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)
Чтение глав из Blu-ray¶
mkvmerge(1) может читать главы из незашифрованных дисков Blu-ray. Для этого вы можете использовать путь к одному из списков воспроизведения MPLS с параметром --chapters.
Пример: --chapters /srv/blurays/BigBuckBunny/BDMV/PLAYLIST/00001.mpls
Чтение глав из DVD¶
Когда MKVToolNix собран с библиотекой libdvdread, mkvmerge(1) может читать главы с DVD. Для этого вы можете использовать путь к одной из папок или файлов на DVD с параметром --chapters. Поскольку DVD-диски могут содержать более одного заголовка, а каждый заголовок имеет свой собственный набор глав, вы можете добавить двоеточие и желаемый номер имени в конец аргумента имени файла. Номер имени по умолчанию равен 1.
Пример: --chapters /srv/dvds/BigBuckBunny/VIDEO_TS:2
Общие замечания¶
При разделении файлов mkvmerge(1) также правильно корректирует главы. Это означает, что каждый файл содержит только записи глав, которые к нему относятся, и что метки времени будут смещены в соответствии с новыми метками времени каждого исходного файла.
mkvmerge(1) может копировать главы из входных файлов Matroska, если они явно не отключены с помощью параметра --no-chapters. Главы из всех источников (файлы Matroska, файлы Ogg, файлы MP4, текстовые файлы глав) обычно не объединяются, а выходят в отдельные ChapterEdition. Только если главы читаются из нескольких файлов Matroska или XML, имеющих одинаковые идентификаторы UID издания, будут объединены в единый ChapterEdition. Если такое объединение желательно и в других ситуациях, пользователь должен сначала извлечь главы из всех источников с помощью mkvextract(1) затем вручную объединить файлы XML, а затем мультиплексировать их.
МЕТКИ¶
Введение¶
Система тегов Matroska аналогична системе других контейнеров: набор пар KEY=VALUE. Однако в Matroska эти теги также могут быть вложенными, и как KEY, так и VALUE являются собственными элементами. Пример файла example-tags-2.xml показывает, как использовать эту систему.
Область применения тегов¶
Теги Matroska не применяются автоматически ко всему файлу. Они могут могут применяться к разным частям файла: к одной или нескольким дорожкам, к одной или нескольким главам или даже к комбинации обоих. Спецификация Matroska[5] содержит более подробную информацию об этом факте.
Одним из важных фактов является то, что теги связываются с дорожками или главами с помощью элемент тега Targets Matroska и что, UID, используемые для этого связывания, не являются идентификаторами дорожек, которые mkvmerge(1) использует везде. Вместо номеров используются UID, которые mkvmerge(1) вычисляет автоматически (если дорожка взята из формата файла, отличного от Matroska) или которые копируются из входного файла, если входной файл дорожки является файлом Matroska. Поэтому трудно узнать, какие UID использовать в файле тегов, прежде чем файл будет передан в mkvmerge(1).
mkvmerge(1) знает два варианта, с помощью которых вы можете добавить теги к файлам Matroska: параметры --global-tags и --tags. Разница в том, что первый параметр, --global-tags, заставит теги применяться ко всему файлу, удалив любой из упомянутых выше элементов Targets. Второй параметр, --tags, автоматически вставляет UID, который mkvmerge(1) создаёт для тега, указанного с помощью части TID параметра --tags.
Пример¶
Допустим, вы хотите добавить теги к видеодорожке, прочитанной из файла AVI. mkvmerge --identify file.avi сообщает вам, что ИД видеодорожки (не путайте этот идентификатор с UID!) равен 0. Итак, вы создаёте файл тегов, оставив все элементы Targets и выполнив mkvmerge(1):
$ mkvmerge -o файл.mkv --tags 0:теги.xml файл.avi
Формат файла тегов¶
mkvmerge(1) поддерживает формат файла тега на основе XML. Формат очень точно смоделирован по спецификации Matroska[5]. Как двоичный, так и дистрибутив исходников MKVToolNix поставляются с образцом файла с именем example-tags-2.xml, который просто перечисляет все известные теги и может использоваться в качестве основы для реальных файлов тегов.
Основы:
Типы данных¶
Новая система тегов Matroska знает только два типа данных: строку UTF-8 и двоичный тип. Первый используется для имени тега и элемента <String>, а двоичный тип используется для элемента <Binary>.
Поскольку двоичные данные сами по себе не помещаются в файл XML mkvmerge(1) поддерживает два других метода хранения двоичных данных. Если содержимое тега XML начинается с '@', то следующий текст рассматривается как имя файла. Содержимое соответствующего файла копируется в элемент Matroska.
В противном случае ожидается, что данные будут закодированы в Base64. Это кодировка, которая преобразует двоичные данные в ограниченный набор символов ASCII и используется, например, в программах электронной почты. mkvextract(1) выведет данные, закодированные в Base64 для двоичных элементов.
Устаревшей системе тегов известны ещё некоторые типы данных, которые можно найти в официальной спецификации тегов Matroska. Поскольку mkvmerge(1) больше не поддерживает эту систему, эти типы здесь не описаны.
Известные теги файла формата 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)
ИНФОРМАЦИЯ О СЕГМЕНТАХ¶
С помощью XML-файла сегментной информации можно задать определённые значения в поле заголовка «информация о сегменте» файла Matroska. Все эти значения нельзя задать с помощью других параметров командной строки.
Другие поля заголовка «информации о сегментах» можно установить с помощью параметров командной строки, но не с помощью файла 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)
КОМПОНОВКА ФАЙЛА Matroska¶
Компоновка файла Matroska достаточно гибкая. mkvmerge(1) будет отображать файл заранее предопределённым образом. Результирующий файл выглядит так:
[Заголовок EBML] [сегмент {метапоиск #1} [информация о сегменте] [информация о дорожке] {вложения} {главы} [кластер 1] {кластер 2} ... {кластер n} {cue} {метапоиск #2} {метки}]
Элементы в фигурных скобках необязательны и зависят от использованного содержимого и параметров. Пара замечаний:
Наиболее короткий файл Matroska выглядит так:
[Заголовок EBML] [сегмент [информация о сегменте] [информация о дорожке] [кластер 1]]
Это пример файла, содержащий только с аудио.
ВНЕШНИЕ ФАЙЛЫ МЕТОК ВРЕМЕНИ¶
mkvmerge(1) позволяет пользователю самостоятельно выбирать метки времени для определённой дорожки. Это можно использовать для создания файлов с переменной частотой кадров или для включения тишины в аудио. В этом случае кадр является элементом, который создаёт отдельно для блока Matroska. Для видео это ровно один кадр, для аудио это один пакет определённого типа аудио. например, для AC-3 это будет пакет, содержащий 1536 сэмплов.
Файлы временных меток, используемые при добавлении дорожек друг к другу, должны указываться только для первой части цепочки дорожек. Например, если вы добавляете два файла, v1.avi и v2.avi, и хотите использовать временные метки, ваша командная строка должна выглядеть примерно так:
$ mkvmerge ... --timestamps 0:мои_временные_метки.txt v1.avi +v2.avi
Существует четыре формата, которые распознает mkvmerge(1). Первая строка всегда содержит номер версии. Пустые строки и строки, содержащие только пробелы, и строки, начинающиеся с «#», игнорируются.
Формат файла меток времени v1¶
Этот формат начинается со строки версии. Вторая строка объявляет количество кадров в секунду по умолчанию. Все последующие строки содержат три числа, разделённые запятыми: начальный кадр (0 — первый кадр), конечный кадр и количество кадров в этом диапазоне. FPS — это число с плавающей запятой с точкой '.' в качестве десятичной запятой. Диапазоны могут содержать разрывы, для которых используется стандартное значение FPS. Например:
# timestamp format v1 assume 27.930 800,1000,25 1500,1700,30
Формат файла меток времени v2¶
В этом формате каждая строка содержит метку времени для соответствующего кадра. Эта временная метка должна быть указана с точностью до миллисекунд. Это может быть число с плавающей запятой, но это не обязательно. Вы должны предоставить как минимум столько строк временных меток, сколько кадров в дорожке. Метки времени в этом файле должны быть отсортированы. Пример для 25 кадров в секунду:
# timestamp format v2 0 40 80
Формат файла меток времени v3¶
В этом формате каждая строка содержит длительность в секундах, за которой следует дополнительное количество кадров в секунду. Оба могут быть числами с плавающей запятой. Если количество кадров в секунду отсутствует, используется значение по умолчанию. Для аудио вы должны позволить кодеку самостоятельно вычислить метки времени кадра. Для этого вы должны использовать 0,0 в качестве количества кадров в секунду. Вы также можете создать разрывы в потоке, используя ключевое слово 'gap', за которым следует длительность разрыва. Пример аудиофайла:
# timestamp format v3 assume 0.0 25.325 7.530,38.236 gap, 10.050 2.000,38.236
Формат файла меток времени v4¶
Формат идентичен формату v2. Единственное отличие в том, что временные метки не должны быть отсортированы. Этот формат не следует когда-либо использовать.
КОДЫ ЗАВЕРШЕНИЯ¶
mkvmerge(1) завершается с одним из трёх кодов:
ПЕРЕМЕННЫЕ СРЕДЫ¶
mkvmerge(1) использует стандартные переменные, определяющие системный язык (например: LANG и семейство LC_*). Дополнительные переменные:
MKVMERGE_DEBUG, MKVTOOLNIX_DEBUG и его краткая форма MTX_DEBUG
MKVMERGE_ENGAGE, MKVTOOLNIX_ENGAGE и его краткая форма MTX_ENGAGE
СМОТРИТЕ ТАКЖЕ¶
mkvinfo(1), mkvextract(1), mkvpropedit(1), mkvtoolnix-gui(1)
ДОМАШНЯЯ СТРАНИЦА¶
Последняя версия программы всегда доступна на домашней странице MKVToolNix[6].
АВТОР¶
Мориц Бункус <moritz@bunkus.org>
ПРИМЕЧАНИЯ¶
- 1.
- сайт Matroska
- 2.
- домашней странице IANA
- 3.
- mkvmerge-identification-output-schema-v20.json
- 4.
- RFC 7159
- 5.
- Спецификация Matroska
- 6.
- домашней странице MKVToolNix
2024-10-19 | MKVToolNix 88.0 |