mkvextract -- витягування доріжок з файлів Matroska(tm) до інших файлів

# 1. Короткий опис

mkvextract {source-filename} {mode1} options extraction-spec1 mode2 options extraction-spec2 …

# 2. Опис

Ця програма витягує певні частини з файлу Matroska(tm) в інші корисні формати. Першим аргументом є ім'я вихідного файлу, яким має бути файл Matroska(tm).

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

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

## 2.1. Загальні параметри

Нижчевказані параметри доступні у всіх режимах і тому лише раз описуються в данному розділі.

Option | Description
--- | ---
-f, --parse-fully | Встановлює режим аналізу як 'full'. За допомогою типового режиму не аналізується увесь файл, а використовуються елементи метапошуку для виявлення необхідних елементів вхідного файла. В 99% випадків цього достатньо. Але для аналізу файлів, що не містять елементів метапошуку або є пошкодженими треба використовувати цей режим. Повне сканування файлу може тривати кілька хвилин, в той час як швидке - кілька секунд.
--command-line-charset character-set | Встановлює набір символів заданого в командному рядку для конвертації. Типово використовується набір символів згідно поточної локалі системи.
--output-charset character-set | Встановлює вихідний набір символів заданого в командному рядку для конвертації. Типово використовується набір символів згідно поточної локалі системи.
-r, --redirect-output file-name | Всі повідомлення записуються до файлу file-name замість консолі. Хоча це можна зробити через переспрямування виводу, є деякі випадки, коли необхідно застосовувати саме даний параметр: коли термінал інтерпретує в інший спосіб вивід перед записом до файлу. Набір символів, заданий через --output-charset враховується.
--no-bom | Normally text files that are created & encoded in one of the UTF variants will start with a byte order marker (BOM). Using this option disables writing that byte order marker.
--flush-on-close | Повідомляє програмі перенести до сховища кешовані в пам’яті дані під час закриття файлів, що були відкриті на запис. Це можна використовувати, щоб запобігти втраті даних при відключенні електроенергії або обійти певні проблеми в операційній системі чи драйверах. Недоліком є те, що мультиплексування займе більше часу, оскільки mkvmerge буде чекати, поки всі дані будуть записані в сховище, перш ніж вийти. Дивіться проблемы 2469 і 2480 баг-трекера MKVToolNix щоб дізнатися про переваги та недоліки.
--ui-language code | Використовується примусовий переклад для мови code (наприклад, 'de_DE' для німецького перекладу). Після введення list' як code програма відобразить список доступних перекладів.
--abort-on-warnings | Повідомляє програмі припинити роботу після першого попередження. Код виходу з програми буде 1.
--debug topic | Увімкнути налагодження для певної функції. Цей параметр корисний лише для розробників.
--engage feature | Увімкнути експериментальні функції. Список доступних функцій можна запросити за допомогою mkvextract --engage list. Ці функції не призначені для використання у звичайних ситуаціях.
--gui-mode | Вмикає режим графічного інтерфейсу. У цьому режимі можуть бути виведені спеціально відформатовані рядки, які можуть повідомляти керуючому графічному інтерфейсу, що відбувається. Ці повідомлення мають формат '#GUI#message'. За повідомленням можуть слідувати пари ключ/значення, як у '#GUI#message#key1=value1#key2=value2…'. Ані повідомлення, ані ключі ніколи не перекладаються і завжди виводяться англійською.
-v, --verbose | Задає відображення розширеної інформації про важливі елементи Matroska(tm).
-h, --help | Відображається інформація про використання додатку і відбувається завершення роботи додатку.
-V, --version | Відображається інформація про версію додатку і відбувається завершення роботи додатку.
@options-file.json | Читає додаткові аргументи командного рядка з файлу options-file. Повне пояснення про підтримувані формати для таких файлів див. розділ "Файли параметрів" у посібнику користувача mkvmerge(1).

## 2.2. Режим витягування доріжок

Синтаксис: mkvextract source-filename tracks [options] TID1:dest-filename1 [TID2:dest-filename2 ...]

Наступні параметри командного рядка доступні для кожної доріжки в режимі витягування 'tracks'. Вони мають бути присутні після вказання доріжки (див. нижче), до якої будуть застосовуватись.

Option | Description
--- | ---
-c character-set | Задається набір символів, який має містити наступна доріжка субтитрів після конвертації. Застосовується лише тоді, коли ID наступної доріжки вказує на доріжку субтитрів. Типовим набором символів є UTF-8.
--blockadd level | Залишати лише BlockAdditions до цього рівня. Типово враховуються усі рівні. Даний параметр може вплинути лише на деякі кодеки, як то WAVPACK4.
--cuesheet | Відбувається витягування списків CUE з інформацією про розділи і дані тегів даної доріжки у файл, ім’я якого є вихідною назвою доріжки з додаванням розширення '.cue'.
--raw | Відбувається витягування необраблених даних до файлу без контейнера. На відміну від прапорця --fullraw даний параметр не призводить до запису складових елементу CodecPrivate до файлу. Даний режим може працювати з усіма CodecIDs, навіть з тими, які mkvextract(1) не підтримує, але це може призвести до створення пошкодженого файлу.
--fullraw | Відбувається витягування необроблених даних до файлу без контейнера. Складові елементу CodecPrivate будуть записуватися до файлу першими, якщо доріжка містить такий елемент заголовку. Даний режим може працювати з усіма CodecIDs, навіть з тими, які mkvextract(1) не підтримує, але це може призвести до створення пошкодженого файлу.
TID:outname | Відбувається витягування доріжки з ID TID до файлу outname за умови, якщо така доріжка міститься у вхідному файлі. Даний параметр можна задавати декілька разів. 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 source-filename attachments [options] AID1:outname1 [AID2:outname2 ...]

Option | Description
--- | ---
AID:outname | Відбувається витягування вкладення з ID AID до файлу outname за умови, якщо таке вкладення міститься у вхідному файлі. Якщо ж залишити outname пустим, то буде використовуватися назва вкладення з вхідного файла Matroska(tm). Даний параметр можна задавати декілька разів. ID вкладень мають бути такі самі як і при виведенні інформації командою mkvmerge(1) з параметром --identify.

## 2.4. Режим витягування розділів

Синтаксис: mkvextract source-filename chapters [options] output-filename.xml

Option | Description
--- | ---
-s, --simple | Витягується інформація про розділи у простому форматі, що використовується в інструментарії для роботи з OGM (CHAPTER01=..., CHAPTER01NAME=...). В цьому режимі деяка інформація пропускається. За замовчуванням розділи витягуються у форматі XML.
--simple-language language | Якщо ввімкнено простий формат, mkvextract(1) виведе лише один запис для кожного зустріченого атома розділу, навіть якщо атом розділу містить більше однієї назви розділу. За замовчуванням mkvextract(1) використовуватиме назву першого розділу, знайдену для кожного атома, незалежно від його мови. Використання цього параметра дозволяє користувачеві визначити, які назви розділів виводяться, якщо атоми містять більше однієї назви глави. Параметр language має бути кодом ISO 639-1 або ISO 639-2.

Розділи записуються у вказаний вихідний файл. За замовчуванням використовується зрозумілий mkvmerge(1) формат XML. Якщо у файлі не знайдено жодних розділів, вихідний файл не створюється.

## 2.5. Режим витягування тегів

Синтаксис: mkvextract source-filename tags [options] output-filename.xml

Option | Description
--- | ---
-T, --no-track-tags | Експортує лише теґи, що не є специфічними для доріжки.

Теги записуються у вказаний вихідний файл у зрозумілий mkvmerge(1) формат XML. Якщо у файлі не знайдено тегів, вихідний файл не створюється.

## 2.6. Режим витягування списків Cue

Синтаксис: mkvextract source-filename cuesheet [options] output-filename.cue

Список cue записується у вказаний вихідний файл. Якщо у файлі не знайдено жодних розділів або теґів, вихідний файл не створюється.

## 2.7. Режим витягування міток часу

Синтаксис: mkvextract source-filename timestamps_v2 [options] TID1:dest-filename1 [TID2:dest-filename2 ...]

Option | Description
--- | ---
TID:outname | Відбувається витягування міток часу доріжок з ID TID до файлу outname за умови, якщо така доріжка міститься у вхідному файлі. Даний параметр можна задавати декілька разів. ID доріжок мають бути такі самі як і при виведенні інформації командою mkvmerge(1) з параметром --identify. Наприклад:
    $ mkvextract input.mkv timestamps_v2 1:ts-track1.txt 2:ts-track2.txt

## 2.8. Режим витягування списків Cue

Синтаксис: mkvextract source-filename cues [options] TID1:dest-filename1 [TID2:dest-filename2 ...]

Option | Description
--- | ---
TID:dest-filename | Відбувається витягування списків cue для доріжки з ID TID до файлу outname за умови, якщо така доріжка міститься у вхідному файлі. Даний параметр можна задавати декілька разів. ID доріжок мають бути такі самі як і при виведенні інформації командою mkvmerge(1) з параметром --identify, а не числа, що містяться в елементі CueTrack.

Формат виведення є простим текстовим форматом: один рядок на елемент CuePoint з парами key=value. Якщо необов’язковий елемент відсутній у 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.
позиція_кластеру | Абсолютна позиція в байтах всередині файла Matroska(tm), де починається кластер що містить посилання на елемент. Note: Всередині файла Matroska(tm) CueClusterPosition є відносним зміщенням початку даних сегмента. Однак значення, виведене mkvextract(1) у режимі витягування списка cue, вже містить це зміщення і воно є абсолютним зміщенням від початку файлу.
відносна_позиція | Відносна позиція в байтах всередині кластера, звідки починається елемент BlockGroup або SimpleBlock, на який посилається точка списка cue. Note: Всередині файла Matroska(tm) CueRelativePosition є відносним зміщенням початку даних кластера. Однак значення, виведене mkvextract(1) у режимі витягування списка cue, є відносним до ID кластера. Абсолютну позицію всередині файлу можна обчислити додавши cluster_position і relative_position.

Наприклад:

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

# 3. Приклади

Витягування розділів і теґів у відповідні XML формати одночасно:

    $ mkvextract movie.mkv chapters movie-chapters.xml tags movie-tags.xml

Витягування кількох доріжок і відповідних міток часу одночасно:

    $ mkvextract "Another Movie.mkv" tracks 0:video.h265 "1:main audio.aac" "2:director's comments.aac" timestamps_v2 "0:timestamps video.txt" "1:timestamps main audio.txt" "2:timestamps director's comments.txt"

Витягування розділів у форматі Ogg/OGM і перекодування доріжки текстових субтитрів в інший набір символів:

    $ mkvextract "My Movie.mkv" chapters --simple "My Chapters.txt" tracks -c MS-ANSI "2:My Subtitles.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. В процесі big-endian цілі дані будуть перетворені в little-endian дані.
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 | USF текстові субтитри будуть записані до файлів USF.
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/HEVC записуються до елементарних потоків H.265, які можуть надалі бути оброблені за допомогою, наприклад, MP4Box(tm) зі збірки GPAC(tm).
V_MS/VFW/FOURCC | Доріжки відео з виправленим FPS з таким 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.
Мітки часу | Мітки часу спочатку сортуються і потім виводяться у сумісному файловому форматі міток часу версії 2 для використання mkvmerge(1). Витягування до інших форматів (версій 1, 3 і 4) не підтримується.

# 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. WWW

Остання версія завжди може бути знайдена на веб-сторінці MKVToolNix.