mkvextract -- извлечение дорожки из файлов Matroska(tm) в другие файлы

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

mkvextract {имя-файла-источника} {режим1} параметры свойства-извлечения1 режим2 параметры свойства-извлечения2 …

# 2. Описание

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

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

В настоящее время поддерживается извлечение дорожек, тегов, вложений, глав, файлов разметки CUE, меток времени и cue.

## 2.1. Общие параметры

Следующие параметры доступны во всех режимах и описываются в этом разделе единожды.

Option | Description
--- | ---
-f, --parse-fully | Устанавливает режим анализа на 'полный'. Стандартный режим не анализирует весь файл, а использует элементы метапоиска для нахождения элементов в исходном файле. В 99 % случаев этого достаточно. Но для повреждённых файлов и для тех, в которых нет элементов метапоиска, пользователю придётся использовать этот режим. Полное сканирование файла может потребовать несколько минут, в то время как быстрое сканирование проходит за секунды.
--command-line-charset кодировка | Устанавливает кодировку для конвертации строк, указанных в командной строке. Стандартная кодировка привязана с системной локализации.
--output-charset кодировка | Указывает кодировку, в которую конвертируются выходные строки. По умолчанию используется текущая кодировка системного языка.
-r, --redirect-output имя-файла | Все сообщения записываются в файл имя-файла вместо консоли. Хотя это можно сделать и через перенаправление вывода, есть отдельные случаи применения именно этого параметра: когда терминал интерпретирует в другой способ вывода перед записью файла. Кодировка, указанная в --output-charset, учитывается.
--flush-on-close | Указывает программе сбросить все данные, закэшированные в памяти, в хранилище при закрытии файлов, открытых для записи. Это может быть использовано для предотвращения потери данных при отключении питания или для обхода определённых проблем в операционной системе или драйверах. Недостатком является то, что паковка займёт больше времени, так как mkvmerge придётся ждать, пока все данные не будут записаны в хранилище перед выходом. Смотрите проблемы #2469 и #2480 в трекере ошибок MKVToolNix, где подробно прокомментированы плюсы и минусы.
--ui-language код | Принудительно использовать перевод на код языка (напр., «de_DE» для немецкого). Если указать «list» на месте кода, то отобразится список доступных переводов.
--abort-on-warnings | Указывает mkvmerge прерывание после появления первого предупреждения. Код завершения программы будет 1.
--debug тематика | Включить режим отладки для указанной функции. Этот параметр полезен только для разработчиков.
--engage функция | Включить экспериментальные функции. Список доступных функций может быть вызван с помощью mkvextract --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).

## 2.2. Режим извлечения дорожки

Синтаксис: mkvextract имя-исходного-файла дорожки [параметры] TID1:имя-целевого-файла1 [TID2:имя-целевого-файла2 ...]

Следующие параметры командной строки доступны для каждой дорожки в режиме извлечения «tracks». Они должны присутствовать перед указанием дорожки (см. ниже), к которой будут применяться.

Option | Description
--- | ---
-c кодировка | Указывает набор символов, который должна содержать следующая дорожка субтитров после конвертации. Применяется только тогда, когда ID следующей дорожки указывает на дорожку субтитров. По умолчанию используется UTF-8.
--blockadd уровень | Сохранить BlockAdditions только до этого уровня. По умолчанию сохраняются все уровни. Этот параметр влияет только на определённый тип кодеков, например WAVPACK4.
--cuesheet | Выполняет с помощью mkvextract(1) извлечение списков CUE из информации о разделах и из данных тегов данной дорожки в файл с названием выходной дорожки и расширением '.cue'.
--raw | Извлекает необработанные данные в файл без контейнера. В отличие от флага --fullraw этот параметр не приводит к записи содержимого элемента CodecPrivate в файл. Этот режим работает со всеми CodecIDs, даже с теми, которые mkvextract(1) не поддерживает, но это может привести к созданию повреждённого файла.
--fullraw | Извлекает необработанные данные в файл без контейнера. Содержимое элемента CodecPrivate будет записано первым в файл, если дорожка содержит подобный элемент заголовка. Этот режим работает со всеми CodecIDs, даже с теми, которые mkvextract(1) не поддерживает, но это может привести к созданию повреждённого файла.
TID:выходное-имя | Извлекает дорожку с ID TID в файла выходное_имя при условии, что такая дорожка содержится во исходном файле. Этот параметр можно задавать несколько раз. ID дорожек должны быть такие же как и при выводе информации командой mkvmerge(1) с параметром --identify.

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

    $ mkvextract input.mkv tracks 0:video.h264 2:output-two-vobsub-tracks.idx 3:output-two-vobsub-tracks.idx

## 2.3. Режим извлечения вложений

Синтаксис: mkvextract имя-исходного-файла вложения [параметры] AID1:выходное-имя1 [AID2:выходное-имя2 ...]

Option | Description
--- | ---
AID:выходное-имя | Производит извлечение вложения из ID AID в файл outname при условии, если такое вложение содержится во входном файле. Если же оставить outname пустым, то будет использоваться название вложения из входного файла Matroska(tm). Этот параметр можно использовать несколько раз. ID вложений должны быть такие же как и при выводе информации командой mkvmerge(1) с параметром --identify.

## 2.4. Режим извлечения глав

Синтаксис: mkvextract имя-исходного-файла главы [параметры] имя-выходного-файла.xml

Option | Description
--- | ---
-s, --simple | Экспорт главы информации в простой формат, используемый в инструментах OGM (ГЛАВА01=..., ГЛАВА01ИМЯ=...). В этом режиме некоторая информация должна быть отброшена. По умолчанию главы выводятся в формате XML.
--simple-language язык | Если включён простой формат, то mkvextract(1) будет выводить только единственную запись для каждого встречающегося атома глав, даже если атом глав содержит более одного названия главы. По умолчанию mkvextract(1) будет использовать первый обнаруженный заголовок главы для каждого атома вне зависимости от его языка.

Использование этого параметра даёт возможность пользователю определить, какие имена глав выводятся, если атомы содержат более одного имени главы. Параметр language должен быть кодом из ISO 639-1 или ISO 639-2.

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

## 2.5. Режим извлечения меток

Синтаксис: mkvextract имя-исходного-файла теги [параметры] имя-выходного-файла.xml

Option | Description
--- | ---
-T, --no-track-tags | Экспортирует только теги, которые не являются специфическими для дорожек.

Теги записаны в указанный выходной XML-файл, понятный для mkvmerge(1). Если в файле нет тегов, то выходной файл не создан.

## 2.6. Режим извлечения файлов разметки CUE

Синтаксис: mkvextract имя-исходного-файла cuesheet [параметры] имя-выходного-файла.cue

Cue sheet (файл разметки) записан в указанный выходной файл. Если в файле нет глав или тегов, то выходной файл не создан.

## 2.7. Режим извлечения метки времени

Синтаксис: mkvextract имя-исходного-файла метки-времени_v2 [параметры] TID1:имя-целевого-файла1 [TID2:имя-целевого-файла2 ...]

Option | Description
--- | ---
TID:выходное-имя | Извлекает временные метки дорожки с ИД TID в файла выходное_имя при условии, что такая дорожка содержится во исходном файле. Этот параметр можно задавать несколько раз. ИД дорожек должны быть такие же как и при выводе информации командой mkvmerge(1) с параметром --identify.

Пример:

    $ mkvextract input.mkv timestamps_v2 1:ts-track1.txt 2:ts-track2.txt

## 2.8. Режим извлечения файлов разметки CUE

Синтаксис: mkvextract имя-исходного-файла cue-файлы [параметры] TID1:имя-целевого-файла1 [TID2:имя-целевого-файла2 ...]

Option | Description
--- | ---
TID:имя-целевого-файла | Извлекает дорожку с ID TID в файла выходное_имя при условии, что такая дорожка содержится во исходном файле. Этот параметр можно задавать несколько раз. ID дорожек должны быть такие же как и при выводе информации командой mkvmerge(1) с параметром --identify, при этом не должны совпадать с цифрами, содержащимися в элементе CueTrack.

Выходной формат представлен в текстовом виде: один элемент CuePoint на линию с парой ключ=значение. Если элемент параметра не представлен в CuePoint (напр. CueDuration), то вместо значения будет тире.

Пример:

    timestamp=00:00:13.305000000 duration=- cluster_position=757741 relative_position=11

Возможные ключи:

Option | Description
--- | ---
метка времени | Длительность точки cue с точностью до наносекунд. Формат: HH:MM:SS.nnnnnnnnn. Этот элемент всегда устанавливается.
длительность | Длительность точки cue с точностью до наносекунд. Формат: HH:MM:SS.nnnnnnnnn.
cluster_position | Абсолютная позиция в байтах внутри файла Matroska(tm), с которой начинается кластер, содержащий ссылочный элемент. Note: Внутри файла Matroska(tm) CueClusterPosition находится относительно начального смещения данных сегмента. Однако значение, выводимое в режиме извлечения cue mkvextract(1), уже содержит это смещение и является абсолютным смещением от начала файла.
relative_position | Относительное положение в байтах внутри кластера, где начинаются элементы BlockGroup или SimpleBlock, на которые ссылается cue-точка. Note: Внутри файла Matroska(tm) CueRelativePosition относительно начальному смещению данных кластера. Однако значение, выводимое режимом извлечения метки mkvextract(1), зависит от идентификатора кластера. Абсолютное положение внутри файла можно вычислить добавлением cluster_position и relative_position.

Пример:

    $ mkvextract input.mkv cues 1:cues-track1.txt 2:cues-track2.txt

# 3. Примеры

Извлечение глав и тегов в их соответствующие форматы XML за один раз:

    $ mkvextract фильм.mkv chapters главы-фильма.xml tags теги-фильма.xml

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

    $ mkvextract "Другой фильм.mkv" tracks 0:video.h265 "1:основное аудио.aac" "2:комментарии режиссёра.aac" временные метки_v2 "0:временные метки видео.txt" "1:временные метки основного аудио.txt" "2:временные метки комментариев режиссёра.txt"

Извлечение глав в формат Ogg/OGM и перекодирование дорожки текстовых субтитров в другую кодировку:

    $ mkvextract "Мой фильм.mkv" chapters --simple "Мои главы.txt" tracks -c MS-ANSI "2:Мои субтитры.srt"

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

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

# 5. Форматы файлов на выходе

Решение о формате файла на выходе выбирается на основании типа дорожки, а не расширения выходного файла. В настоящее время поддерживаются следующие типы дорожек:

Option | Description
--- | ---
A_AAC/MPEG2/*, A_AAC/MPEG4/*, A_AAC | Все файлы AAC будут записаны в файл AAC с заголовками ADTS перед каждым пакетом. Заголовки ADTS не будут содержать устаревшее поле особого назначения.
A_AC3, A_EAC3 | Это будет извлечено в необработанные файлы AC-3.
A_ALAC | Дорожки ALAC(tm) записаны в файлы CAF(tm).
A_DTS | Это будет извлечено в необработанные файлы DTS.
A_FLAC | Дорожки FLAC(tm) записаны в файлы FLAC(tm).
A_MPEG/L2 | Потоки MPEG-1 Audio Layer II будут извлечены в необработанные файлы MP2.
A_MPEG/L3 | Это будет извлечено в необработанные файлы MP3.
A_OPUS | Дорожки Opus(tm) записаны в файлы OggOpus(tm).
A_PCM/INT/LIT, A_PCM/INT/BIG | Необработанные данные PCM будут записаны в файл WAV. Данные виде целочисленных с большим концом будут сконвертированы в данные с малым концом в процессе.
A_REAL/* | Дорожки RealAudio(tm) записаны в файлы RealMedia(tm).
A_TRUEHD, A_MLP | Это будет извлечено в необработанные файлы TrueHD/MLP.
A_TTA1 | Дорожки TrueAudio(tm) записываются в файлы TTA. Имейте в виду, что из-за ограниченной точности временных меток Matroska(tm), извлечённые заголовки файлов будут разными, как указано в двух полях: data_length (суммарное количество семплов в файле) и CRC.
A_VORBIS | Аудио-файлы Vorbis будут записаны в файл OggVorbis(tm).
A_WAVPACK4 | Дорожки WavPack(tm) записаны в файлы WV(tm).
S_HDMV/PGS | Субтитры PGS будут записаны в файлы SUP.
S_HDMV/TEXTST | Субтитры TextST будут записаны в виде файла, созданного специально для mkvmerge(1) и mkvextract(1).
S_KATE | Потоки Kate(tm) будут записаны в контейнер Ogg(tm).
S_TEXT/SSA, S_TEXT/ASS, S_SSA, S_ASS | Текстовые субтитры SSA и ASS будут записаны в виде файлов SSA/ASS соответственно.
S_TEXT/UTF8, S_TEXT/ASCII | Простые текстовые субтитры будут записаны в виде файлов SRT.
S_VOBSUB | Субтитры VobSub(tm) будут записаны в виде файлов SUB с соответствующими файлами индексов в виде IDX.
S_TEXT/USF | Текстовые субтитры USF будут записаны в виде файлов USF.
S_TEXT/WEBVTT | Текстовые субтитры WebVTT будут записаны в виде файлов WebVTT.
V_MPEG1, V_MPEG2 | Видеодорожки MPEG-1 и MPEG-2 будут записаны в виде элементарных потоков MPEG.
V_MPEG4/ISO/AVC | Видеодорожки H.264 / AVC будут записаны в виде элементарных потоков H.264, которые в дальнейшем могут обработаны, например, с помощью MP4Box(tm) из пакеты GPAC(tm).
V_MPEG4/ISO/HEVC | Видеодорожки H.265 / EVC будут записаны в виде элементарных потоков H.265, которые в дальнейшем могут обработаны, например, с помощью MP4Box(tm) из пакеты GPAC(tm).
V_MS/VFW/FOURCC | Видеодорожки с фиксированной кадровой частотой и с данным CodecID записаны в виде файлов AVI./
V_REAL/* | Дорожки RealVideo(tm) записаны в файлы RealMedia(tm).
V_THEORA | Потоки Theora(tm) будут записаны в контейнер Ogg(tm)
V_VP8, V_VP9 | Дорожки VP8 / VP9 записаны в файлы IVF.
Метки | Теги конвертируются в формат XML. Этот же формат mkvmerge(1) использует для чтения тегов.
Вложения | Вложения записываются в выходной файл как есть. Никаких преобразований не выполняется.
Главы | Главы конвертируются в формат XML. Этот же формат mkvmerge(1) используется для чтения глав. Либо можно извлечь урезанную версию в упрощённый стилевой формат OGM.
Метки времени | Временные метки сначала сортируются и затем выводятся в формате временных меток v2, совместимом для использования в mkvmerge(1). Извлечение в другие форматы (v1, v3 и v4) не поддерживается.

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

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

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

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

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

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

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

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

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

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

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

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