mkvmerge(1) | Користувацькі команди | mkvmerge(1) |
mkvmerge - Об’єднує мультимедійні потоки в файли Matroska
mkvmerge [global options] {-o out} [options1] {file1} [[options2] {file2}] [@options-file.json]
Ця програма бере вхідні дані з кількох медіа-файлів і об’єднує їхні потоки (усі або лише виділені) в файл Matroska; див. веб-сайт Matroska[1].
Важливим є порядок параметрів командного рядка. Будь ласка, прочитайте розділ "Порядок параметрів", якщо ви новачок у програмі.
-v, --verbose
-q, --quiet
-o, --output file-name
-w, --webm
Для глав і тегів дозволяється лише підмножина елементів. mkvmerge(1) автоматично видалить усі елементи, не дозволені специфікацією.
--title title
--default-language language-code
Кодом мови за замовчуванням є 'und' для 'не визначено'.
--segmentinfo filename.xml
Додаткову інформацію див. у розділі "файли XML із інформацією про сегмент".
--segment-uid SID1,SID2,...
Якщо SID починається з "=", то його залишок інтерпретується як ім’я файлу Matroska, UID сегмента якого читається та використовується.
Кожен створений файл містить один сегмент, і кожен сегмент має один UID сегмента. Якщо вказано більше UID сегментів, ніж створено сегментів, то зайві UID ігноруються. Якщо вказано менше UID, ніж створено сегментів, для них будуть створені випадкові UID.
--chapter-language language-code
Цей параметр можна використовувати як для простих файлів глав, так і для вихідних файлів, які містять глави, але не містять інформації про мову глав, наприклад файли MP4 і OGM.
Мова, встановлена цим параметром, також використовується, коли глави створюються за допомогою параметра --generate-chapters.
--chapter-charset character-set
Цей перемикач також застосовується до глав, які скопійовані з певних типів контейнерів, наприклад файли Ogg/OGM і MP4. Додаткову інформацію див. у розділі про глави нижче.
--chapter-sync d[,o[/p]]
o/p: налаштуйте мітки часу на o/p, щоб виправити лінійні зсуви. Параметр p за замовчуванням має значення 1, якщо його опустити. І o, і p можуть бути числами з плаваючою комою.
Значення за замовчуванням: немає ручної корекції синхронізації (це те саме, що d = 0 і o/p = 1.0).
Цей параметр можна використовувати кілька разів, щоб вхідний файл застосовувався до кількох доріжок, вибираючи щоразу різні ідентифікатори доріжок.
--generate-chapters mode
Цей режим також працює з режимами розділення 'parts:' і 'parts-frames:'. Для цих режимів буде створено одну главу для кожного доданого діапазону міток часу (тих, чиї початкові мітки часу мають префікс '+').
Приклад: --generate-chapters interval:45s
Назви нових глав керуються параметром --generate-chapters-name-template. Мова встановлюється за допомогою --chapter-language, яка має бути наведена перед --generate-chapters.
--generate-chapters-name-template template
Існує кілька змінних, які можна використовувати в шаблоні, що замінюються їхніми фактичними значеннями під час створення глави. Рядок '<NUM>' буде замінено номером глави. Рядок '<START>' буде замінено міткою часу початку глави.
The strings '<FILE_NAME>' and '<FILE_NAME_WITH_EXT>' are only filled when generating chapters for appended files. They will be replaced by the appended file's name without respectively with its extension. Note that only the file's base name and extension are inserted, not its directory or drive components.
Ви можете вказати мінімальну кількість місць для номера глави за допомогою '<NUM:places>', наприклад '<NUM:3>'. Отримане число буде доповнено провідними нулями, якщо кількість місць менше зазначеної.
Ви можете керувати форматом, який використовується початковою міткою часу, за допомогою <START:format>. Формат за замовчуванням має значення '%H:%M:%S', якщо жодного не вказано. Допустимі коди формату:
--cue-chapter-name-format format
Якщо цей параметр не вказано, mkvmerge(1) за замовчуванням має формат '%p - %t' (виконавець, за яким слідує пробіл, тире, інший пробіл і заголовок).
Якщо вказано формат, то все, крім наступних метасимволів, копіюється як є, а метасимволи замінюються таким чином:
--chapters file-name
--global-tags file-name
--track-order FID1:TID1,FID2:TID2,...
--cluster-length spec
Якщо одиниця не використовується, mkvmerge(1) помістить щонайбільше n блоків даних у кожному кластері. Максимальна кількість блоків – 65535.
Якщо число d має постфікс 'ms', тоді mkvmerge(1) розміщує щонайбільше d мілісекунд даних у кожен кластер. Діапазон для d — від '100 мс' до '32000 мс'.
mkvmerge(1) за замовчуванням містить щонайбільше 65535 блоків даних і 5000 мс даних у кластер.
Програми, які намагаються знайти певний фрейм, можуть шукати лише безпосередньо кластер, а потім читати весь кластер. Тому створення більших кластерів може призвести до неточного або повільного пошуку.
--clusters-in-meta-seek
--timestamp-scale factor
Зазвичай 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 mode
У канонічній формі всі підтеги, для яких існують бажані значення, замінюються цими бажаними значеннями. Це перетворює, наприклад, 'zh-yue-jyutping' до 'yue-jyutping' або 'fr-FX' до 'fr-FR'.
Для форми розширених мовних підтегів спочатку будується канонічна форма. Після цього всі основні мови, для яких існує розширений мовний підтег, замінюються цим розширеним мовним підтегом та його префіксом. Це перетворює, наприклад, 'yue-jyutping' повертається до 'zh-yue-jyutping', але не впливає на 'fr-FR', оскільки 'fr' не є розширеним мовним підтегом.
--split specification
На даний момент mkvmerge(1) підтримує такі режими:
Синтаксис: --split [size:]d[k|m|g]
Приклад: --split size:700m or --split 150000000
Параметр d може закінчуватися на 'k', 'm' або 'g', щоб вказати, що розмір у КБ, МБ або ГБ відповідно. В іншому випадку передбачається розмір у байтах. Після того як поточний вихідний файл досягне цього обмеження розміру, буде створено новий.
Префікс 'size:' може бути опущений з міркувань сумісності.
Синтаксис: --split [duration:]HH:MM:SS.nnnnnnnnn|ds
Приклад: --split duration:00:60:00.000 or --split 3600s
Параметр повинен мати форму HH:MM:SS.nnnnnnnn для визначення тривалості з точністю до наносекунди або бути числом d, за яким слідує літера 's' для тривалості в секундах. Параметр HH – це кількість годин, MM - хвилин, SS - секунд і nnnnnnnn - наносекунд. Як кількість годин, так і кількість наносекунд можна опустити. Після коми може бути до дев’яти цифр. Після того, як тривалість вмісту поточного виводу досягне цієї межі, буде запущено новий вихідний файл.
Префікс 'duration:' може бути опущено з міркувань сумісності.
Синтаксис: --split timestamps:A[,B[,C...]]
Приклад: --split timestamps:00:45:00.000,01:20:00.250,6300s
Параметри A, B, C тощо повинні мати той самий формат, що й ті, що використовуються для тривалості (див. вище). Список міток часу розділяється комами. Після того, як вхідний потік досяг мітки часу поточної точки розділення, створюється новий файл. Тоді використовується наступна точка розділення, зазначена в цьому списку.
Не можна опускати префікс 'timestamps:'.
Синтаксис: --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 до кінця вихідних файлів.
Синтаксис: --split parts-frames:start1-end1[,[+]start2-end2[,[+]start3-end3...]]
Приклади:
Режим parts-frames повідомляє mkvmerge(1) зберегти певні діапазони номерів кадрів/полів, відкидаючи інше. Діапазони, які потрібно зберегти, мають бути перелічені після ключового слова parts-frames: і розділені комами. Сам діапазон складається з початкового та кінцевого номера кадра/поля. Нумерація починається з 1.
Якщо початковий номер не вказано, то за замовчуванням буде використовуватися кінцевий номер попереднього діапазону. Якщо попереднього діапазону не було, то за замовчуванням це буде початок файлу (див. приклад 3).
Якщо кінцевий номер не вказано, то за замовчуванням ним буде кінець вихідних файлів, що в основному повідомляє mkvmerge(1) залишити решту (див. приклад 3).
Зазвичай кожен діапазон записується в новий файл. Це можна змінити, щоб послідовні діапазони записувалися в один файл. Для цього користувач повинен поставити перед початковим номером знак +. Це повідомляє mkvmerge(1) не створювати новий файл, а замість цього додати діапазон до того самого файлу, в який був записаний попередній діапазон. Мітки часу будуть налаштовані таким чином, щоб у вихідному файлі не було пробілів, навіть якщо у вхідному файлі був пробіл у двох діапазонах.
У прикладі 2 mkvmerge(1) створить лише один файл. Цей файл міститиме вміст, починаючи з 733 до 912, і вміст, починаючи з 1592 до 2730.
У прикладі 3 mkvmerge(1) створить два файли. Перший міститиме вміст від початку вихідних файлів до 430. Другий файл міститиме вміст, починаючи з 2512 до кінця вихідних файлів.
У цьому режимі розглядається лише перша відеодоріжка, яка виводиться. Якщо відеодоріжка не виводиться, розділення не відбудеться.
Синтаксис: --split frames:A[,B[,C...]]
Приклад: --split frames:120,237,891
Усі параметри A, B, C тощо мають бути цілими додатними числами. Нумерація починається з 1. Список номерів кадрів/полів розділяється комами. Після того, як вхідний потік досягнув номера кадру/поля поточної точки розділення, створюється новий файл. Тоді використовується наступна точка розділення, зазначена в цьому списку.
Не можна опускати префікс 'frames:'.
У цьому режимі розглядається лише перша відеодоріжка, яка виводиться. Якщо відеодоріжка не виводиться, розділення не відбудеться.
Синтаксис: --split chapters:all or --split chapters:A[,B[,C...]]
Приклад: --split chapters:5,8
Усі параметри A, B, C тощо мають бути цілими додатними числами. Нумерація починається з 1. Список номерів глав розділяється комами. Розділення відбудеться безпосередньо перед першим ключовим кадром, мітка часу якого дорівнює або більша за початкову мітку часу для глав, номери яких вказані. Глава, що починається з 0s, ніколи не розглядається для розділення та відкидається без змін.
Ключове слово all можна використовувати замість того, щоб перераховувати всі номери глав вручну.
Не можна опускати префікс 'chapters:'
Для цього режиму розділення ім’я вихідного файлу обробляється інакше, ніж для звичайної операцій. Він може містити 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 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[,...]
Якщо цей параметр був пропущений, використовується стандартне зіставлення. Це стандартне зіставлення додає кожну доріжку з поточного файлу до доріжки з попереднього файлу з тим самим ID доріжки. Це дозволяє легко додавати, якщо фільм було розділено на дві частини і обидва файли мають однакову кількість доріжок та ID доріжок за допомогою команди mkvmerge -o output.mkv part1.mkv +part2.mkv.
+
$ mkvmerge -o full.mkv file1.mkv + file2.mkv $ mkvmerge -o full.mkv file1.mkv +file2.mkv
[ file1 file2 ]
Це альтернативний синтаксис використання '+' між іменами файлів. Тому наступні дві команди є еквівалентними:
$ mkvmerge -o full.mkv file1.mkv + file2.mkv $ mkvmerge -o full.mkv '[' file1.mkv file2.mkv ']'
=
Знак '=' можна також поставити перед наступним ім'ям файлу. Тому наступні дві команди є еквівалентними:
$ mkvmerge -o full.mkv = file1.mkv $ mkvmerge -o full.mkv =file1.mkv
( file1 file2 )
Це можна використовувати, наприклад, для файлів VOB, що надходять із транспортних потоків DVD або MPEG. Його не можна використовувати, якщо кожен файл містить власний набір заголовків, що зазвичай буває з окремими файлами, такими як AVI або MP4.
Введення імені файлу в дужки також запобігає mkvmerge; від пошуку додаткових файлів з такою ж базовою назвою, як описано в налаштуванні =. Тому ці два командні рядки є еквівалентними:
$ mkvmerge -o out.mkv = file.mkv $ mkvmerge -o out.mkv '(' file.mkv ')'
Дещо треба зауважити:
--attachment-description description
--attachment-mime-type MIME type
Якщо для вкладення не вказано тип MIME, його тип буде визначено автоматично.
--attachment-name name
--attach-file file-name, --attach-file-once file-name
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
-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]
Цей параметр можна використовувати кілька разів, щоб вхідний файл застосовувався до кількох доріжок, вибираючи щоразу різні ідентифікатори доріжок.
--forced-track TID[:bool]
Цей параметр можна використовувати кілька разів, щоб вхідний файл застосовувався до кількох доріжок, вибираючи щоразу різні ідентифікатори доріжок.
--forced-track TID[:bool]
Цей параметр можна використовувати кілька разів, щоб вхідний файл застосовувався до кількох доріжок, вибираючи щоразу різні ідентифікатори доріжок.
--default-track TID[:bool]
Цей параметр можна використовувати кілька разів, щоб вхідний файл застосовувався до кількох доріжок, вибираючи щоразу різні ідентифікатори доріжок.
--forced-track TID[:bool]
Цей параметр можна використовувати кілька разів, щоб вхідний файл застосовувався до кількох доріжок, вибираючи щоразу різні ідентифікатори доріжок.
--forced-track TID[:bool]
Цей параметр можна використовувати кілька разів, щоб вхідний файл застосовувався до кількох доріжок, вибираючи щоразу різні ідентифікатори доріжок.
--blockadd TID:level
--track-name TID:name
--language TID:language
Цей параметр можна використовувати кілька разів, щоб вхідний файл застосовувався до кількох доріжок, вибираючи щоразу різні ідентифікатори доріжок.
-t, --tags TID:file-name
--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:file-name
--default-duration TID:x
Якщо тривалість за замовчуванням не є примусовою, mkvmerge спробує отримати тривалість доріжки за замовчуванням з контейнера та/або закодованого бітового потоку для певних типів доріжок, наприклад, AVC/H.264 або MPEG-2.
Цей параметр також можна використовувати для зміни FPS відео доріжок без використання зовнішнього файлу позначок часу.
--fix-bitstream-timing-information TID[:0|1]
--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:left,top,right,bottom
--color-matrix 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:data
--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:character-set
Цей параметр можна використовувати кілька разів, щоб вхідний файл застосовувався до кількох доріжок, вибираючи щоразу різні ідентифікатори доріжок.
-i, --identify file-name
Формат виводу, який використовується для результату, можна змінити за допомогою параметра --identification-format.
-J file-name
-F, --identification-format format
Цей формат не призначений для аналізу. Результат буде перекладено мовою, що використовує mkvmerge(1) (також дивіться --ui-language).
mkvmerge-identification-output-schema-v17.json[3]
Усі версії схеми JSON доступні як в Інтернеті, так і у випущених архівах вихідного коду.
--probe-range-percentage percentage
Якщо відомо, що доріжки присутні, але не знайдені, то відсоток для перевірки можна змінити за допомогою цього параметра. Мінімальний розмір 10 МБ є вбудованим і не може бути змінений.
--list-audio-emphasis
--list-languages
--list-stereo-modes
-l, --list-types
--priority priority
Вибір 'найнижчий' також викликає mkvmerge(1) щоб вибрати пріоритет неактивного введення-виведення на додаток до найнижчого можливого пріоритету процесу.
--command-line-charset character-set
--output-charset character-set
-r, --redirect-output file-name
--flush-on-close
--ui-language code
--abort-on-warnings
--deterministic seed
Сід може бути довільним рядком і не обов’язково бути числом.
Результат ідентичних до байту файлів гарантується лише за таких умов:
Використання інших версій mkvmerge(1) або інших параметрів командного рядка можуть призвести до того самого файлу, ідентичного до байту, але це не гарантується.
--debug topic
--engage feature
--gui-mode
@options-file.json
--capabilities
-h, --help
-V, --version
Для кожного файлу користувач може вибрати, які доріжки mkvmerge(1) слід взяти. Усі вони поміщаються у файл, зазначений з параметром -o. Список відомих (та підтримуваних) вхідних форматів можна отримати за допомогою параметра -l.
Важливим є порядок параметрів командного рядка. Будь ласка, прочитайте розділ "Порядок параметрів", якщо ви новачок у програмі.
Для деяких параметрів порядок введення параметрів є важливим. Параметри діляться на дві категорії:
Параметри оброблюються зліва направо. Якщо параметр з’являється кілька разів у межах однієї області, буде використано останнє входження. Тому заголовок буде встановлено на "Щось інше" в наступному прикладі:
$ mkvmerge -o output.mkv --title 'This and that' input.avi --title 'Something else'
Наступний приклад показує використання параметра --language двічі, що не стає проблемою завдяки тому, що вони використовується в різних сферах. Незважаючи на те, що вони застосовуються до одного ідентифікатора доріжки, вони застосовуються до різних вхідних файлів і, отже, мають різну область дії:
$ mkvmerge -o output.mkv --language 0:fre français.ogg --language 0:deu deutsch.ogg
Припустимо, у вас є файл MyMovie.avi та аудіо доріжка в окремому файлі, наприклад 'MyMovie.wav'. Спочатку ви хочете закодувати аудіо до OggVorbis:
$ oggenc -q4 -oMyMovie.ogg MyMovie.wav
Через пару хвилин ви можете з'єднати відео та аудіо:
$ mkvmerge -o MyMovie-with-sound.mkv MyMovie.avi MyMovie.ogg
Якщо ваш AVI вже містить звукову доріжку, то вона також буде скопійована (якщо mkvmerge(1) підтримує її аудіоформат). Щоб уникнути цього, просто зробіть наступне
$ mkvmerge -o MyMovie-with-sound.mkv -A MyMovie.avi MyMovie.ogg
Після кількох хвилин роздумів ви обираєте іншу звукову доріжку, наприклад коментарі режисера або іншомовну доріжку до 'MyMovie-add-audio.wav'. Кодуєте ще раз і об’єднуєте з іншим файлом:
$ oggenc -q4 -oMyMovie-add-audio.ogg MyMovie-add-audio.wav $ mkvmerge -o MM-complete.mkv MyMovie-with-sound.mkv MyMovie-add-audio.ogg
Такого ж результату можна досягти за допомогою
$ mkvmerge -o MM-complete.mkv -A MyMovie.avi MyMovie.ogg MyMovie-add-audio.ogg
Тепер використовуйте mplayer та насолоджуйтеся. Якщо ви маєте декілька аудіо доріжок (або навіть відео доріжок), тоді ви можете вказати mplayer-у яку доріжке програвати, використовуючи параметри '-vid' та '-aid'. Вони засновані на 0 і не розрізняють відео та аудіо.
Якщо вам потрібна синхронізація звукової доріжки, ви можете зробити це легко. Спочатку дізнайтеся, з яким ідентифікатором є доріжка Vorbis
$ mkvmerge --identify outofsync.ogg
Тепер ви можете використовувати цей ID у наступному командному рядку:
$ mkvmerge -o goodsync.mkv -A source.avi -y 12345:200 outofsync.ogg
Це додасть 200 мс тиші на початку звукової доріжки з ідентифікатором 12345, взятим із 'outofsync.ogg'.
Деякі фільми починають синхронізуватися правильно, але повільно втрачають її. Для таких фільмів ви можете вказати коефіцієнт затримки, який буде застосовано до всіх міток часу – дані не додаються та не видаляються. Тому якщо ви зробите цей коефіцієнт занадто великим або занадто малим, ви отримаєте погані результати. Наприклад, епізод має розсинхронізацію 0.2 секунди в кінці фільму довжиною 77340 кадрів. При частоті кадрів29.97fps 0.2 секунди становлять приблизно 6 кадрів. Тому я зробив
$ mkvmerge -o goodsync.mkv -y 23456:0,77346/77340 outofsync.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 mymovie
$ pgm2txt mymovie
$ ispell -d american *txt
$ srttool -s -w -i mymovie.srtx -o mymovie.srt
Отриманий файл можна використовувати як інший вхідний файл для mkvmerge(1):
$ mkvmerge -o mymovie.mkv mymovie.avi mymovie.srt
Якщо ви хочете вказати мову для певної доріжки, це легко зробити. Спочатку дізнайтеся код ISO 639-2 для вашої мови. mkvmerge(1) може перерахувати всі ці коди для вас:
$ mkvmerge --list-languages
Знайдіть у списку потрібні мови. Припустимо, ви помістили дві звукові доріжки в файл Matroska і хочете встановити коди своїх мов, а також ідентифікатори доріжок 2 та 3. Це можна зробити за допомогою
$ mkvmerge -o with-lang-codes.mkv --language 2:ger --language 3:dut without-lang-codes.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 no-compression.mkv --compression -1:none MyMovie.avi --compression -1:none mymovie.srt
Деякі параметри для mkvmerge(1) потребують ідентифікатор доріжки щоб визначити до якої доріжки вони мають бути застосовані. Ці ідентифікатори доріжок друкуються зчитувачами під час демуксування поточного вхідного файлу, або якщо mkvmerge(1) виконується з параметром --identify. Приклад такого виводу:
$ mkvmerge -i v.mkv File 'v.mkv': container: Matroska Track ID 0: video (V_MS/VFW/FOURCC, DIV3) Track ID 1: audio (A_MPEG/L3)
Не плутайте ідентифікатори доріжок, які призначаються доріжкам у вихідному файлі MKV, з ідентифікаторами доріжок вхідних файлів. Для параметрів, які потребують цих значень, використовуються лише ідентифікатори доріжок вхідних файлів.
Також зауважте, що кожен вхідний файл має свій власний набір ідентифікаторів доріжок. Тому ідентифікатори доріжок для файлу 'file1.ext' як повідомляє 'mkvmerge --identify' не змінюються незалежно від того, скільки там інших вхідних файлів і в якому положенні 'file1.ext' використовуються.
Ідентифікатори доріжок призначаються таким чином:
Параметри, що використовують ідентифікатори доріжок це ті, опис яких містить 'TID'. Наступні параметри також використовують ідентифікатори доріжок: --audio-tracks, --video-tracks, --subtitle-tracks, --button-tracks та --track-tags.
Існує кілька ідентифікаторів, які мають особливе значення і не зустрічаються в ідентифікаційних виводах.
Спеціальний ідентифікатор доріжки '-1' є символом підстановки і застосовує даний перемикач до всіх доріжок, які зчитуються з вхідного файлу.
Спеціальний ідентифікатор доріжки '-2' посилається на глави у вихідному файлі. Зараз тільки параметр --sync використовує цей спеціальний ідентифікатор. Як альтернатива до --sync -2:... може бути використано параметр --chapter-sync ....
Цей розділ застосовується до всіх програм у MKVToolNix, навіть якщо в ньому згадується лише mkvmerge(1).
Весь текст у файлі Matroska закодований у UTF-8. Це означає, що mkvmerge(1) має перетворити кожен текстовий файл, який він читає, а також кожен текст, поданий у командному рядку, з будь-якого набору символів в UTF-8. Натомість це також означає, що вихідні дані mkvmerge(1) потрібно перетворити назад у цей набір символів з UTF-8, наприклад якщо не-англійський переклад використовується з --ui-language або для тексту, що походить із файла Matroska.
mkvmerge(1) виконує це перетворення автоматично на основі наявності маркера порядку байтів (коротко: BOM) або поточної локалі системи. Як набор символів виводится із локалі залежить від операційної системи, в якій mkvmerge(1) виконується.
Текстові файли, які починаються з BOM, вже закодовані в одному представленні UTF. mkvmerge(1) підтримує наступні п'ять режимів: UTF-8, UTF-16 Little та Big Endian, UTF-32 Little та Big Endian. Текстові файли з BOM автоматично конвертуються в UTF-8. Будь-які параметри які інакше встановив набір символів для такого файлу (наприклад --sub-charset) мовчки ігнорується.
На Unix-системах mkvmerge(1) використовує системний виклик setlocale(3), який, у свою чергу, використовує змінні середовища LANG, LC_ALL та LC_CYPE. Отриманий набір символів часто є одним із сімейства UTF-8 або ISO-8859-* і використовується для всіх операцій з текстовими файлами та для кодування рядків у командному рядку та для виведення у консоль.
У Windows набір символів за замовчуванням, який використовується для перетворення текстових файлів, визначається системного викликом GetACP().
Читання командного рядка завершується функцією GetCommandLineW(), яка повертає рядок Unicode. Тому параметр --command-line-charset ігнорується у Windows.
Вивід у консоль складається з трьох сценаріїв:
Існують такі параметри, які дозволяють вказати набори символів:
Файлом параметрів є файл, з якого mkvmerge(1) може читати додаткові аргументи командного рядка. Це можна використовувати для того, щоб обійти певні обмеження оболонки або операційної системи під час виконання зовнішніх програм, наприклад, обмежена довжина командного рядка.
Файл параметрів містить дані у форматі JSON. Його вміст має бути дійсним масивом JSON, що складається виключно з рядків JSON. Кодування файлу має бути UTF-8. Файл не повинен починатися з маркера порядку байтів (BOM), але якщо він існує, його буде пропущено.
Правила екранування спеціальних символів всередині JSON відповідають офіційній специфікації JSON, RFC 7159[4].
Саме ім'я файлу параметрів має бути вказано як аргумент командного рядка з префіксом '@'.
Командний рядок 'mkvextract tracks source.mkv --raw 1:destination.raw' може бути перетворений на наступний конфігураційний файл:
[
"-o",
"c:\\Matroska\\my file.mkv",
"--title",
"#65",
"-A",
"a movie.avi",
"sound.ogg" ]
Тоді буде відповідна команда 'mkvmerge @options.json'.
Matroska підтримує зв'язування файлів, яке просто говорить, що конкретний файл є попередником або наступником поточного файлу. Якщо бути точним, то насправді пов’язані не файли, а сегменти Matroska. Оскільки більшість файлів, ймовірно, міститиме лише один сегмент Matroska, у наведених нижче поясненнях використовується термін «зв'язування файлів», хоча «зв'язування сегментів» було б більш доречним.
Кожен сегмент ідентифікується унікальним 128-бітовим UID сегмента. Цей UID автоматично генерується mkvmerge(1). Зв’язування здійснюється головним чином шляхом розміщення UID сегментів (скорочено: SID) попереднього/наступного файлу в інформацію заголовка сегмента. mkvinfo(1) друкує ці ідентифікатори SID, якщо їх знайде.
Якщо файл розбитий на кілька менших і використовується зв’язування, то мітки часу не починатимуться знову з 0, а продовжуватимуться там, де зупинився останній файл. Таким чином зберігається абсолютний час, навіть якщо попередні файли недоступні (наприклад, під час потокової передачі). Якщо зв’язування не використовується, мітки часу мають починатися з 0 для кожного файлу. За замовчуванням mkvmerge(1) не використовує зв'язування файлів. Якщо ви хочете, ви можете ввімкнути його за допомогою параметра --link. Цей параметр корисний, лише якщо також активовано розділення.
Незалежно від того, активоване розділення чи ні, користувач може визначити mkvmerge(1) щоб зв’язувати створені файли з конкретними SIDs. Це досягається за допомогою параметрів --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-ray або 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) will transform every pair or lines into one Matroska ChapterAtom. It does not set any ChapterTrackNumber which means that all chapters apply to all tracks in the file.
Оскільки це текстовий файл, може знадобитися перетворення набору символів. Дивись розділ про текстові файли та набори символів для пояснення, як mkvmerge(1) перетворює між наборами символів.
Формат глав, що базується на 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)
mkvmerge(1) може читати глави з незашифрованих дисків Blu-ray. Для цього ви можете використовувати шлях до одного зі списків відтворення MPLS з параметром --chapters.
Приклад: --chapters /srv/blurays/BigBuckBunny/BDMV/PLAYLIST/00001.mpls
Коли MKVToolNix компілюється з бібліотекою libdvdread, mkvmerge(1) може читати глави з DVD-дисків. Для цього ви можете використовувати шлях до однієї з папок або файлів на DVD з параметром --chapters. Оскільки DVD-диски можуть містити більше одного заголовка, а кожен заголовок має власний набір глав, ви можете додати двокрапку та потрібний номер назви в кінець аргументу імені файлу. Номер назви за замовчуванням дорівнює 1.
Приклад: --generate-chapters interval:45s
Під час розділення файлів mkvmerge(1) також правильно коригує глави. Це означає, що кожен файл містить лише записи глав, які до нього стосуються, і що мітки часу будуть зміщені відповідно до нових міток часу кожного вихідного файлу.
mkvmerge(1) може копіювати глави з вхідних файлів Matroska, якщо це явно не вимкнено за допомогою параметра --no-chapters. Глави з усіх джерел (файли Matroska, файли Ogg, файли MP4, текстові файли глав) зазвичай не об’єднуються, а виходять в окремі ChapterEditions. Тільки якщо глави читаються з кількох 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 повідомляє, що ID відеодоріжки (не плутайте цей ідентифікатор з UID!) дорівнює 0. Отже, ви створюєте файл тегів залишаючи всі елементи Targets та виконуєте mkvmerge(1):
$ mkvmerge -o file.mkv --tags 0:tags.xml file.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, їх типи даних і, за необхідності, дійсний діапазон їх значень:
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 досить гнучкий. mkvmerge(1) відтворить файл у наперед визначений спосіб. Отриманий файл виглядає так:
[EBML head] [segment {meta seek #1} [segment information] [track information] {attachments} {chapters} [cluster 1] {cluster 2} ... {cluster n} {cues} {meta seek #2} {tags}]
Елементи в фігурних дужках є необов’язковими і залежать від вмісту та параметрів, що використовуються. Пара приміток:
Найкоротший можливий файл Matroska буде виглядати так:
[EBML head] [segment [segment information] [track information] [cluster 1]]
Це може бути у випадку з аудіо файлами.
mkvmerge(1) дозволяє користувачеві самостійно вибирати мітки часу для певної доріжки. Це можна використовувати для створення файлів із змінною частотою кадрів або для включення тиши у аудіо. У цьому випадку кадр є елементом, який mkvmerge(1) створює окремо для блока Matroska. Для відео це рівно один кадр, для аудіо це один пакет певного типу аудіо. наприклад для AC-3 це буде пакет, що містить 1536 семплів.
Файли міток часу, які використовуються, коли доріжки додаються одна до одної, необхідно вказувати лише для першої частини ланцюжка доріжок. Наприклад, якщо ви додаєте два файли, v1.avi та v2.avi, і хочете використовувати позначки часу, ваш командний рядок має виглядати приблизно так:
$ mkvmerge ... --timestamps 0:my_timestamps.txt v1.avi +v2.avi
Є чотири формати, які розпізнає mkvmerge(1). Перший рядок завжди містить номер версії. Порожні рядки, рядки, що містять лише пробіли, і рядки, що починаються з '#', ігноруються.
Цей формат починається з рядка версії. Другий рядок оголошує кількість кадрів за секунду за замовчуванням. Усі наступні рядки містять три числа, розділені комами: початковий кадр (0 — перший кадр), кінцевий кадр і кількість кадрів у цьому діапазоні. FPS — це число з плаваючою комою з крапкою '.' як десятковою комою. Діапазони можуть містити розриви, для яких використовується стандартне значення FPS. Наприклад:
# Формат мітки часу версії 1 assume 27.930 800,1000,25 1500,1700,30
У цьому форматі кожен рядок містить мітку часу для відповідного кадру. Ця мітка часу має бути вказана з точністю до мілісекунд. Це може бути число з плаваючою комою, але це не обов’язково. Ви повинні надати принаймні стільки рядків міток часу, скільки кадрів у доріжці. Мітки часу в цьому файлі повинні бути відсортовані. Приклад для 25 кадрів в секунду:
# timestamp format v2 0 40 80
У цьому форматі кожен рядок містить тривалість у секундах, за якою слідує необов’язкова кількість кадрів в секунду. Обидва можуть бути числами з плаваючою комою. Якщо кількість кадрів в секунду відсутня, використовується значення за замовчуванням. Для аудіо ви повинні дозволити кодеку самостійно обчислити мітки часу кадру. Для цього ви повинні використовувати 0,0 як кількість кадрів в секунду. Ви також можете створити розриви в потоці, використовуючи ключове слово 'gap', за яким слідує тривалість розриву. Приклад аудіофайлу:
# timestamp format v3 assume 0.0 25.325 7.530,38.236 gap, 10.050 2.000,38.236
Цей формат ідентичний формату 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 <moritz@bunkus.org>
2023-02-12 | MKVToolNix 74.0.0 |