mkvpropedit -- Смена свойств существующих файлов Matroska без полного ремультиплексирования

mkvpropedit -- Смена свойств существующих файлов Matroska(tm) без полного ремультиплексирования

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

mkvpropedit параметры {имя-исходного-файла} {действия}

# 2. Описание

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

Параметры:

Option | Description
--- | ---
-l, --list-property-names | Перечисляет все известные и редактируемые имена свойств, их тип (строка, целое число, логическое значение и т. п) и краткое описание. После этого программа завершается. Поэтому параметр source-filename не нужно указывать.
-p, --parse-mode режим | Устанавливает режим разбора. Параметр 'режим' может быть 'быстрым' (которым он также является по умолчанию) или 'полным'. 'Быстрый' режим не анализирует весь файл, а использует мета-элементы поиска для поиска необходимых элементов исходного файла. В 99 % случаев этого достаточно. Но для файлов, которые не содержат элементов метапоиска или повреждённых, пользователю придётся установить 'полный' режим анализа. Полное сканирование файла может занять несколько минут, а быстрое сканирование займёт всего несколько секунд.

Действия для работы с дорожками и свойствами информационных сегментов:

Option | Description
--- | ---

-e, --edit selector

Устанавливает раздел файла Matroska(tm) (информацию о сегменте или заголовках определенной дорожки), с которым действуют все последующие действия add, set и delete. Этот параметр можно использовать несколько раз для внесения изменений в несколько элементов.

По умолчанию mkvpropedit(1) будет править раздел информации о сегменте.

Смотрите раздел редактирование селекторов для полного описания синтаксиса.

-a, --add name=значение | Добавляет свойство name со значением. Свойство будет добавлено, даже если оно уже существует. Примечание: большинство свойств уникально и не могут встречаться более одного раза.
-s, --set name=значение | Задаёт для всех вхождений свойства имя значение переменной. Если такого свойства не существует, то оно будет добавлено.
-d, --delete name | Удаляет все вхождения свойства name. Примечание: некоторые свойства обязательны и не могут быть удалены.

Действия для работы с тегами и главами:

Option | Description
--- | ---

-t, --tags selector:имя-файла

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

selector должен быть одним из слов all, global или track. Для all mkvpropedit(1) заменит или удалит все теги в файле. С global только глобальные теги будут заменены или удалены.

С дорожкой mkvpropedit(1) заменит теги для определённой дорожки. Кроме того, теги, прочитанные из filename, будут назначены той же дорожке. Дорожка указывается так же, как указываются селекторы редактирования (см. ниже), например, --tags track:a1:new-audio-tags.xml.

--add-track-statistics-tags | Вычисляет статистику для всех треков в файле и добавляет новые теги статистики для них. Если файл уже содержит эти теги, то они будут обновлены.
--delete-track-statistics-tags | Удаляет все метки статистики существующей дорожки из файла. Если в файле нет меток статистики дорожки, они не будут изменены.
-c, --chapters имя-файла | Добавляет или заменяет главы в файле соответствующим из filename или удаляет их, если filename пуст. mkvpropedit(1) считывает те же XML и простые форматы глав, что и mkvmerge(1).

Действия для обработки вложений:

Option | Description
--- | ---

--add-attachment имя-файла

Добавляет новое вложение из имя-файла.

Если параметр --attachment-name использовался до этого параметра, его значение используется как имя нового вложения. Иначе он является производным от filename.

Если параметр --attachment-mime-type использовался до этого параметра, его значение используется как тип MIME нового вложения. Иначе он автоматически обнаруживается из содержимого filename.

Если параметр --attachment-description использовался до этого параметра, его значение используется как описание нового вложения. Иначе описание не устанавливается.

Если параметр --attachment-uid использовался до этого параметра, его значение используется как UID нового вложения. В ином случае будет автоматически создан случайный UID.

--replace-attachment селектор: имя-файла

Заменяет одно или несколько вложений, которые совпадают с selector по filename файла. Если более одного доступного вложения соответствует selector, то всё их содержимое будет заменено содержимым filename.

selector может иметь одну из четырёх форм. Они описаны ниже в разделе селекторы вложений.

Если параметр --attachment-name использовался до этого параметра, его значение устанавливается в виде нового имени для каждого изменённого вложения. Иначе имена не меняются.

Если параметр --attachment-mime-type использовался до этого параметра, его значение устанавливается в виде нового типа MIME для каждого изменённого вложения. Иначе типы MIME не меняются.

Если параметр --attachment-description использовался до этого параметра, его значение устанавливается в виде нового описания для каждого изменённого вложения. Иначе описания не меняются.

Если параметр --attachment-uid использовался до этого параметра, его значение устанавливается в виде нового UID для каждого изменённого вложения. Иначе UID не меняются.

--update-attachment селектор

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

selector может иметь одну из четырёх форм. Они описаны ниже в разделе селекторы вложений.

Если параметр --attachment-name использовался до этого параметра, его значение устанавливается в виде нового имени для каждого изменённого вложения. Иначе имена не меняются.

Если параметр --attachment-mime-type использовался до этого параметра, его значение устанавливается в виде нового типа MIME для каждого изменённого вложения. Иначе типы MIME не меняются.

Если параметр --attachment-description использовался до этого параметра, его значение устанавливается в виде нового описания для каждого изменённого вложения. Иначе описания не меняются.

Если параметр --attachment-uid использовался до этого параметра, его значение устанавливается в виде нового UID для каждого изменённого вложения. Иначе UID не меняются.

--delete-attachment селектор | Удаляет одно или несколько вложений подходящих под селектор selector может иметь одну из четырёх форм. Они описаны ниже в разделе селекторы вложений.

Параметры действий над вложениями:

Option | Description
--- | ---
--attachment-name имя | Задаёт использование имени для следующей операции --add-attachment или --replace-attachment.
--attachment-mime-type тип-mime | Задаёт использование типа MIME для следующей операции --add-attachment или --replace-attachment.
--attachment-description описание | Задаёт использование описания для следующей операции --add-attachment или --replace-attachment.

--enable-legacy-font-mime-types

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

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

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

Прочие параметры:

Option | Description
--- | ---

--disable-language-ietf

Обычно, когда пользователь запрашивает изменения в свойстве заголовка дорожки 'language', mkvpropedit(1) применяет то же изменение к новому элементу заголовка дорожки LanguageIETF в дополнение к устаревшему элементу Language. Если используется этот параметр, изменение будет применено только к устаревшему элементу Language.

Этот параметр не влияет на изменения, запрашиваемые через свойство 'language-ietf' заголовка дорожки.

--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» не является расширенным языковым подтегом.

Эта нормализация применяется только к элементам, которые фактически изменены:

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

- Во время редактирования глав подвергаются воздействию все языковые элементы всех элементов главы, поскольку существующие главы всегда заменяются полностью.

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

Лучший способ нормализовать все имеющиеся языковые теги в файле — это сделать его ремультиплексирование с помощью mkvmerge(1) и установить его параметр «--normalize-language-ietf» в требуемый режим.

--command-line-charset кодировка | Устанавливает кодировку для конвертации строк, указанных в командной строке. Стандартная кодировка привязана с системной локализации.
--output-charset кодировка | Указывает кодировку, в которую конвертируются выходные строки. По умолчанию используется текущая кодировка системного языка.
-r, --redirect-output имя-файла | Записывает все сообщения в файл file-name вместо консоли. Хотя это можно легко сделать с помощью перенаправления вывода, есть случаи, когда этот параметр нужен: если терминал повторно интерпретирует выход перед записью его в файл. Набор символов, установленный с --output-charset, учитывается.
--ui-language код | Принудительно использовать перевод на код языка (напр., «de_DE» для немецкого). Если указать «list» вместо кода, то отобразится список доступных переводов.
--abort-on-warnings | Указывает mkvmerge прерывание после появления первого предупреждения. Код завершения программы будет 1.
--debug тематика | Включить режим отладки для указанной функции. Этот параметр полезен только для разработчиков.
--engage функция | Включает экспериментальные функции. Список доступных функций можно запросить с помощью mkvpropedit --engage list. Эти функции не предназначены для использования в обычных ситуациях.
--gui-mode | Включает режим графического интерфейса. В этом режиме могут отображаться специально отформатированные строки для отправки управляющих сообщений интерфейсу. Формат сообщений — '#GUI#message'. За сообщением могут быть указаны пары ключа и значения, например '#GUI#message#key1=value1#key2=value2…'. Сообщения и ключи не переводятся и всегда выводятся на английском.
-v, --verbose | Вести расширенный вывод и показывать все важные элементы Matroska(tm) по мере их чтения.
-h, --help | Показать сведения об использовании и выйти.
-V, --version | Показать сведения о версии и выйти.
@файл-параметров.json | Считывает дополнительные аргументы командной строки из файла options-file. Полное описание поддерживаемых форматов для таких файлов смотрите в разделе "Файлы параметров" на странице документации mkvmerge(1).

# 3. Редактирование селекторов

Параметр --edit устанавливает раздел файла Matroska(tm) (информация о сегменте или заголовках определённого трека), с которым выполняются все последующие действия add, set и delete. Это остаётся действительным до тех пор, пока не будет найден следующий параметр --edit. Аргумент этого параметра называется селектором редактирования.

По умолчанию mkvpropedit(1) будет править раздел информации о сегменте.

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

Информацию о сегменте можно выбрать одним из трёх слов: «info», «segment_info» или «segmentinfo». Он содержит такие свойства, как заголовок сегмента или UID сегмента.

## 3.2. Заголовки дорожки

Заголовки дорожек можно выбрать с помощью несколько более сложного селектора. Все варианты начинаются с «track:». Свойства заголовка дорожки включают такие элементы, как код языка, флаг «дорожка по умолчанию» или название дорожки.

Option | Description
--- | ---
track: n | Если параметр n является цифрой, то будет выбрана дорожкой с номером n. Порядок дорожек такой же, как и при выводе информации командой mkvmerge(1) с параметром --identify. Нумерация начинается с 1.

track: tn

Если параметр начинается с одного символа t, за которым следует n, то будет выбрана n-ная дорожка определённого типа дорожек. Параметр типа дорожки t должен быть одним из четырёх символов: 'a' для звуковой дорожки, 'b' для дорожки кнопки, 's' для дорожки субтитров и 'v' для видеодорожки. Порядок отслеживания такой же, как и параметр --identify вывода mkvmerge(1).

Нумерация начинается с 1.

track:=uid | Если параметр начинается с «=», за которым следует число uid, будет выбрана дорожка, элемент дорожки UID которой равен данному uid. UID дорожек можно получить с помощью mkvinfo(1).
track:@номер | Если параметр начинается с «@», за которым следует число number, будет выбрана дорожка, элемент которой дорожки равен этому number. Номера дорожек можно получить с помощью mkvinfo(1).

## 3.3. Примечания

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

# 4. Селекторы вложений

Селектор вложений используется для двух действий: --replace-attachment и --delete-attachment. Он может принимать одну из следующих четырёх форм:

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

2. Выбор по УИД (уникальному идентификатору) вложения. В этой форме селектор представляет собой символ = с последующим числом, являющимся УИД вложения. Его узнать с помощью детальной команды идентификации mkvmerge(1).

3. Выбор по названию вложения. В этой форме селектором является буквенное слово name:, за которым следует имя имеющегося вложения. Если этот селектор используется с --replace-attachment, то двоеточия в названии для соответствия должны экранироваться с помощью \c.

4. Выбор по типу MIME. В этой форме селектором является буквенное слово mime-type:, за которым следует MIME-тип существующего вложения. Если этот селектор используется с --replace-attachment, то двоеточия в типе MIME для соответствия должны экранироваться с помощью \c.

# 5. Примеры

Следующий пример редактирует файл под названием 'movie.mkv'. Он устанавливает название сегмента и изменяет код языка аудио и дорожки субтитров. Обратите внимание, что этот пример можно сократить, исключив первый параметр --edit, поскольку редактирование элемента информации сегмента является стандартным для всех параметров, найденных перед первым параметром --edit.

    $ mkvpropedit фильм.mkv --edit info --set "title=Фильм" --edit track:a1 --set language=fre --edit track:a2 --set language=ita

Второй пример удаляет «флаг дорожка по умолчанию» с первой дорожки субтитров и устанавливает его для второй. Обратите внимание, что mkvpropedit(1) в отличие от mkvmerge(1), не устанавливает «флаг дорожка по умолчанию» для других дорожек на «0», если для некоторой дорожки автоматически установлено значение «1».

    $ mkvpropedit фильм.mkv --edit track:s1 --set flag-default=0 --edit track:s2 --set flag-default=1

Замена тегов во второй дорожке субтитров файла выглядит так:

    $ mkvpropedit фильм.mkv --tags track:s2:new-subtitle-tags.xml

Удаление всех тегов требует указания имени файла:

    $ mkvpropedit фильм.mkv --tags all:

Замена глав в файле выглядит так:

    $ mkvpropedit фильм.mkv --chapters новые-главы.xml

Удаление всех глав происходит без указания имени выходного файла:

    $ mkvpropedit фильм.mkv --chapters ''

Добавление файла шрифта (Arial.ttf) в виде вложения:

    $ mkvpropedit фильм.mkv --add-attachment Arial.ttf

Добавление файла шрифта (89719823.ttf) в виде вложения и описание информации, что это Arial:

    $ mkvpropedit фильм.mkv --attachment-name Arial.ttf --attachment-description 'Шрифт Arial в виде шрифта TrueType' --attachment-mime-type application/x-truetype-font --add-attachment 89719823.ttf

Замена вложенного файла шрифта (Comic.ttf) другим (Arial.ttf):

    $ mkvpropedit фильм.mkv --attachment-name Arial.ttf --attachment-description 'Шрифт Arial в виде шрифта TrueType' --replace-attachment name:Comic.ttf:Arial.ttf

Удаление второго вложенного файла, неважно какого именно:

    $ mkvpropedit фильм.mkv --delete-attachment 2

Удаление всех вложенных шрифтов по типу MIME:

    $ mkvpropedit фильм.mkv --delete-attachment mime-type:application/x-truetype-font

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

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

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

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

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

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

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

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

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

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

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

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

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

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