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, учитывается.
--no-bom | Обычно текстовые файлы, созданные и закодированные в одном из вариантов UTF, начинаются с метки порядка байтов (BOM). Использование этого параметра отключает запись этой метки порядка байтов.
--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:t n | Если параметр начинается с одного символа 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. Работа с языками

mkvpropedit(1) в основном старается делать правильные вещи по умолчанию. Поэтому изменения свойства language заставят mkvpropedit(1) применить то же самое изменение как к новому элементу «LanguageIETF», так и к старому элементу «Language», подобно тому, как mkvmerge(1) применяет язык к обоим элементам. Например, при использовании mkvpropedit movie.mkv --edit track:2 --set language=zh-TW элемент «LanguageIETF» будет установлен на zh-TW, а старый элемент «Language» на chi.

Кроме того, есть новое свойство заголовка дорожки под названием language-ietf, которое можно установить или удалить. Изменения этого свойства применяются только к новому элементу заголовка дорожки «LanguageIETF». Оговорка заключается в том, что старый элемент заголовка дорожки «Language» является обязательным элементом в Matroska — это означает, что даже если он отсутствует в файле, он все равно имеет подразумеваемое значение. Когда пользователь устанавливает только свойство language-ietf, но не свойство language, mkvpropedit(1) будет добавлять старый элемент «Language» в определённых случаях и установит его в und (что означает «неопределённый»), так как пользователь не указал для него значение.

При чтении файлов глав XML или тегов mkvpropedit(1) работает так же, как mkvmerge(1).

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

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

# 6. Примеры

Следующий пример редактирует файл под названием '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

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

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

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

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

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

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

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

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

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

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

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

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

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

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