mkvmerge -- マルチメディアストリームを Matroska ファイルに結合（マルチプレクス）します

# 1. 書式

mkvmerge 共通オプション {-o 出力ファイル名} オプション1 {入力ファイル1} オプション2 {入力ファイル2} @options-file.json

# 2. 説明

このプログラムは、複数のメディアファイルを入力として受け取り、それらのストリーム（すべて、または選択したもの）を結合して 1 つの Matroska ファイルを作成します。詳細は Matroska 公式サイト を参照してください。

Important:

コマンドラインオプションの順序は非常に重要です。このプログラムを初めて使用する場合は、 「オプションの順序」セクションを必ず読んでください。

## 2.1. 共通オプション（Global options）

Option | Description
--- | ---
-v, --verbose | 詳細出力を有効にします。
-q, --quiet | ステータス出力を抑制します。
-o, --output ファイル名 | ファイル名で指定したファイルに書き込みます。ファイル分割が有効な場合は，このオプションは僅かに異なって取り扱われます。詳細は--splitオプションの説明をご覧ください。
-w, --webm | WebM 準拠のファイルを作成します。出力ファイルの拡張子が「.webm」の場合も自動的に有効になります。このモードではいくつかの制限が課されます。使用できるコーデックは、ビデオでは VP8/VP9、オーディオでは Opus/Vorbis のみに限定されます。また、DocType ヘッダー項目は「webm」に変更されます。 チャプターとタグについては、一部の要素のみが許可されます。仕様で許可されていない要素は、 mkvmerge(1) によって自動的に削除されます。
--title タイトル | 出力ファイルの全体タイトル（映画名など）を設定します。
--default-language 言語コード | --language オプションで言語が指定されておらず、かつソースコンテナからも言語情報が得られないトラックに使用される、デフォルトの言語コードを設定します。 デフォルトの言語コードは「und」（undetermined：未指定）です。

## 2.2. セグメント情報の処理（共通オプション）

Option | Description
--- | ---
--segmentinfo ファイル名.xml | セグメント情報を XML ファイルから読み取ります。このファイルには、セグメントファミリー UID、セグメント UID、および前後のセグメント UID 要素を含めることができます。 MKVToolNix の配布パッケージに、サンプルファイルと DTD が含まれています。 詳細は、後述の 「セグメント情報 XML ファイル」セクションを参照してください。
--segment-uid SID1,SID2,... | 使用するセグメント UID を設定します。これは 128 ビットのセグメント UID をカンマで区切ったリストです。 UID は標準的な形式（32 桁の 16 進数、接頭辞 「0x」 やスペースの有無は任意）で記述してください。 SID が「=」で始まる場合、それ以降の文字列は Matroska ファイルの名前として解釈され、そのファイルから読み取られたセグメント UID が使用されます。 作成される各ファイルには 1 つのセグメントが含まれ、各セグメントには 1 つのセグメント UID が割り当てられます。作成されるセグメントの数よりも多くのセグメント UID が指定された場合、余分な UID は無視されます。指定された UID が作成されるセグメント数より少ない場合は、不足分に対してランダムな UID が生成されます。

## 2.3. チャプターおよびタグの処理（共通オプション）

Option | Description
--- | ---
--chapter-language 言語コード | 各楽章項目に書き込むISO 639-2言語コードを設定します。既定は 'eng' です。詳細は楽章についての節をご覧ください。 このオプションは、単純なチャプターファイルだけでなく、チャプターは含まれているが言語情報が欠落しているソースファイル（MP4 や OGM ファイルなど）に対しても使用できます。 ここで設定した言語は、 --generate-chapters オプション でチャプターを自動生成する場合にも適用されます。
--chapter-charset 文字セット | 単純なチャプターファイルを UTF-8 に変換する際に使用する文字セットを設定します。 mkvmerge(1) が文字セット間でどのように変換を行うかの説明については、 「テキストファイルと文字セット」セクションを参照してください。 この切替は楽章が特定のコンテナ種別（例: Ogg・OGMやMP4ファイル）から複製する際にも適用されます。詳細については後述の楽章についての節をご覧ください。
--chapter-sync d[,o[/p]] | 次に入力されるソースファイル内のチャプタータイムスタンプを d ミリ秒調整します。代わりに、特殊トラック ID 「-2」を指定して --sync オプションを使用することもできます（詳細は「特殊トラック ID」セクションを参照）。 o/p： タイムスタンプを o/p 倍に調整し、線形ドリフトを補正します。 p を省略した場合、デフォルト値は 1 です。 o と p にはどちらも浮動小数点数を指定可能です。 デフォルト設定： 手動同期補正なし（d = 0 かつ o/p = 1.0 と同等）。 このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。

--generate-chapters モード

mkvmerge(1)で楽章を自動生成することができます。現在，次の二つのモードに対応しています:

- 「when-appending」： ファイルの先頭、およびファイルが追加（連結）されるたびにチャプターを作成します。

  このモードは、分割モードの「parts:」および「parts-frames:」でも機能します。これらのモードでは、追加された各タイムスタンプ範囲（開始タイムスタンプに「+」が付加されているもの）ごとにチャプターが生成されます。

  Note:

  ファイルを新しく追加した際にmkvmerge(1)が感知できるように，映像または音声トラックが存在する必要があります。複数の映像トラックが混在していた場合，始めのトラックを使用します。それ以外の場合，始めの音声トラックを使用します。

- 「interval: time-spec」モードでは，time-specで指定した間隔ごとに一つの楽章を生成します。指定する形式は，HH:MM:SS.nnnnnnnnn形式か's'，'ms'，またはus単位が続く数字のいずれかです。

  例： --generate-chapters interval:45s

新規楽章の名前は--generate-chapters-name-templateオプションで制御します。言語は--chapter-languageで設定し，--generate-chaptersの後ろでなければなりません。

--generate-chapters-name-template テンプレート

--generate-chapters オプションで生成されるチャプター名のテンプレートを設定します。このオプションを使用しない場合、デフォルトの「Chapter <NUM:2>」が使用されます。

雛形では幾つかの変数が使用でき，それらは楽章が生成する際に実際の値に置き換わります。文字列 '<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;場所>」という形式で指定できます（例: <NUM:3>）。指定した数より場所が少ない場合は，番号をゼロ埋めして出力します。

<START:形式>によって開始する時刻表示の書式を制御できます。なにも指定されていない場合の既定の書式は「%H:%M:%S」です。有効な書式指定子は以下の通りです:

- %h – 時

- %H – 2 桁でゼロ埋めされた時

- %m – 分

- %M – 2 桁でゼロ埋めされた分

- %s – 秒

- %S – 2 桁でゼロ埋めされた秒

- %n – 9 桁のナノ秒

- %<1-9>n – 最大 9 桁までのナノ秒（例：%3n なら 3 桁）

The string '<TITLE>' is only filled when generating chapters for appended files. It'll be replaced by the appended file's title if one is present.

--cue-chapter-name-format 書式

mkvmerge(1) は、オーディオファイル用の CUE シートをチャプター入力として読み込むことができます。 CUE シートの各インデックスエントリには通常 PERFORMER（演奏者）と TITLE（タイトル）が含まれており、 mkvmerge(1) はこれらを組み合わせてチャプター名を作成します。このオプションでその書式を指定できます。

このオプションが指定されない場合、デフォルトの書式は「%p - %t」（演奏者、スペース、ダッシュ、スペース、タイトル）となります。

書式を指定した場合、以下のメタ文字以外の文字はそのままコピーされ、メタ文字は次のように置換されます：

- %p： そのエントリの PERFORMER 文字列に置換されます,

- %t： そのエントリの TITLE 文字列に置換されます,

- %n： 現在のトラック番号に置換されます

- %N： 現在のトラック番号に置換されます（10 未満の場合は先頭にゼロが付加されます）。

--chapters ファイル名 | チャプター情報を指定されたファイル（file-name）から読み込みます。詳細は後述の「チャプター」セクションを参照してください。
--global-tags ファイル名 | 共通タグ（global tags）を指定されたファイル（file-name）から読み込みます。詳細は後述の「タグ」セクションを参照してください。

## 2.4. 全般的な出力制御（高度な共通オプション）

Option | Description
--- | ---
--track-order FID1:TID1,FID2:TID2,... | このオプションは入力されたトラックが配置される順序を変更します。オプション引数は読点区切りのID組の列です。各組は最初を0として命令行の何番目に指定したファイルであるかを示すファイルID(FID1)と、そのファイルの中の何番目のトラックかを示すトラックID(TID1)からなります。ここで指定されなかったトラックは、指定されたトラックの後に配置されます。 このオプションが指定されない場合、トラックはまず「種類」、次に「ソースファイルの順序」でソートされます。具体的にはビデオトラックが最初で、次にオーディオ、字幕と続き、その他のあまり使用されない種類のトラックが最後になります。

--cluster-length 指定

各クラスター内のデータブロック数、またはデータの持続時間を制限します。 spec パラメータには、単位なしの数値 n 、または「ms」を付加した数値 d を指定できます。

単位が指定されない場合、 mkvmerge(1) は各クラスターに最大 n 個のデータブロックを格納します。ブロック数の最大値は 65535 です。

数値に「ms」が付加されている場合、 mkvmerge(1) は各クラスターに最大 d ミリ秒分のデータを格納します。指定可能な最小値は 「100ms」、最大値は 「32000ms」です。

mkvmerge(1) のデフォルト設定では、 1 つのクラスターに最大 65535 個のデータブロック、または 5000 ミリ秒分のデータを格納します。

特定のフレームを探索するプログラムは、まずクラスターを直接シークし、その後にクラスター全体を読み込む必要があります。そのため、クラスターのサイズを大きくしすぎると、シークが不正確になったり低速になったりする可能性があります。

--clusters-in-meta-seek | すべてのクラスター情報を含むメタシーク要素（Meta Seek Element）をファイルの終端に生成します。詳細は「Matroska ファイルレイアウト」セクションを参照してください。

--timestamp-scale 係数

タイムスタンプのスケーリング係数を指定された 係数 に強制します。有効な値は 1000 から 10000000 の範囲、または特殊値の -1 です。

通常、 mkvmerge(1) は 1000000 を使用します。これはタイムスタンプと期間が 1 ミリ秒（1ms）の精度を持つことを意味します。ビデオトラックを含まず、少なくとも 1 つのオーディオトラックを含むファイルの場合、 mkvmerge(1) はすべてのタイムスタンプと期間が 1 オーディオサンプル単位の精度になるよう、スケーリング係数を自動的に選択します。これによりオーバーヘッドは増加しますが、より正確なシークや抽出が可能になります。

特殊値 -1 を使用すると、ビデオトラックが存在する場合でも、サンプル単位の精度が適用されます。

--enable-durations | すべてのブロックに持続時間（duration）を書き込みます。ファイルサイズは増大しますが、現時点では再生プレイヤー側で活用されるメリットはほとんどありません。
--no-cues | キューデータ（AVI のインデックスに相当するもの）を作成しないようにします。 Matroska(tm) ファイルはキューデータがなくても再生可能ですが、シークが不正確になり低速化する可能性があります。ディスク容量を極限まで節約したい場合や、テスト目的以外では使用しないでください。各入力ファイルごとに指定可能な --cues オプションも併せて参照してください。
--no-date | 既定では、mkvmerge(1)は多重化が開始された時刻と日付を "date" 区分情報欄に書き込みます。このオプションを指定すると，この欄には何も書き込まれなくなります。
--date タイムスタンプ | Sets the DateUTC field written to the segment information. The timestamp must be ISO 8601-like: YYYY-mm-ddTHH:MM:SSZ for UTC or with an offset ±HH:MM (a space instead of T is also accepted), e.g. 2017-03-28T17:28:00Z or 2017-03-28 17:28:00+02:00. If used together with --no-date, --no-date takes precedence and no date will be written.
--disable-lacing | すべてのトラックでレーシング（Lacing）を無効にします。これにより、特にオーディオトラックが多い場合にファイルサイズが増大します。このオプションは通常の用途向けではありません。
--disable-track-statistics-tags | 通常、 mkvmerge(1) は各トラックの統計情報を含む特定のタグを書き込みます。すでにこれらのタグが存在する場合は上書きされます。書き込まれるタグは、 BPS、 DURATION、 NUMBER_OF_BYTES、および NUMBER_OF_FRAMES です。 このオプションを有効にすると、 mkvmerge(1) はこれらのタグの書き込みを行わず、同名の既存タグも変更しません。
--disable-language-ietf | 通常、 mkvmerge(1) はトラックヘッダ、チャプター、およびタグに、従来の言語要素に加えて新しい IETF BCP 47 言語要素を書き込みます。このオプションを使用すると、従来の要素のみが書き込まれます。

--normalize-language-ietf モード

すべての IETF BCP 47 言語タグの正規化を有効にします。「canonical」モードでは標準形式に、「extlang」モードでは拡張言語サブタグ形式に正規化されます。「off」で無効にできます。デフォルトでは標準形式（canonical）への正規化が適用されます。

標準形式（canonical）では、より好ましい値が存在するすべてのサブタグがその値に置換されます。例えば、「zh-yue-jyutping」は「yue-jyutping」に、「fr-FX」は「fr-FR」に変換されます。

拡張言語サブタグ形式では、まず標準形式が作成されます。その後、拡張言語サブタグが存在するすべての主要言語が、その拡張言語サブタグと接頭辞の組み合わせに置換されます。これにより、例えば「yue-jyutping」は「zh-yue-jyutping」に戻されますが、「fr-FR」には影響しません（「fr」は拡張言語サブタグではないため）。

--stop-after-video-ends | メインのビデオトラックが終了した時点で処理を停止し、他のトラックの残りのパケットを破棄します。

## 2.5. ファイルの分割、リンク、追加、および連結（その他の共通オプション）

Option | Description
--- | ---

--split 指定

Splits the output file after a given size or a given time. Please note that tracks can only be split right before a key frame. Therefore the split point may be a bit off from what the user has specified.

現在、 mkvmerge(1) は以下のモードをサポートしています：

1. サイズによる分割。

   構文： --split [size:]d[k|m|g]

   例： --split size:700m または --split 150000000

   パラメータdの後ろには'k'・'m'・'g'を付けて、単位がそれぞれKB・MB・GBであることを示すことができます。付けない場合はバイト単位になります。出力中のファイルがこの上限に達したら、次の新しいファイルへの出力が開始されます。

   「size:」接頭辞は、互換性のために省略可能です。

2. 持続時間による分割。

   構文： --split [duration:]HH:MM:SS.nnnnnnnnn|ds

   例： --split duration:00:60:00.000 または --split 3600s

   パラメータはHH:MM:SS.nnnnnnnnnという形式でナノ秒精度で長さを指定するか、数字dのあとに's'と書いて秒数で長さを指定しなければなりません。HHは時間、MMは分、SSは秒数でnnnnnnnnnナノ秒を示します。時間及びナノ秒は省略できます。小数点の後ろには9桁までの数字を指定できます。指定した長さだけ出力されたら、次のファイルへの出力が開始されます。

   「duration:」接頭辞は、互換性のために省略可能です。

3. 特定のタイムスタンプによる分割。

   構文： --split timestamps: A[,B[,C...]]

   例： --split timestamps:00:45:00.000,01:20:00.250,6300s

   パラメータA、B、C…は、期間を指定するのに用いる形式（上記参照）と同じ形式で指定しなければなりません。時刻印の一覧は読点で区切られます。入力流が現在の分割点に達すると次のファイルが作成され、この一覧から次の分割点が使用されます。

   「timestamps:」接頭辞は省略できません。

4. タイムスタンプ範囲を指定して特定のパーツのみを保持し、他を破棄する。

   構文： --split parts: 開始1-終了1[,[+]開始2-終了2[,[+]開始3-終了3...]]

   例：

   1. --split parts:00:01:20-00:02:45,00:05:50-00:10:30

   2. --split parts:00:01:20-00:02:45,+00:05:50-00:10:30

   3. --split parts:-00:02:45,00:05:50-

   「parts」モードは、指定したタイムスタンプ範囲のみを保持し、それ以外を破棄するよう mkvmerge(1) に指示します。保持する範囲は parts: キーワードの後にカンマ区切りで指定します。範囲は開始と終了のタイムスタンプで構成され、形式は他の分割オプションと同様です（例：00:01:20 と 80s は同じ時間を指します）。

   開始タイムスタンプを省略した場合、直前の範囲の終了タイムスタンプが使用されます。直前の範囲がない場合は、ファイルの先頭が使用されます（例 3 を参照）。

   終了タイムスタンプを省略した場合、ソースファイルの終端が使用されます。これは、それ以降のすべてのコンテンツを保持することを意味します（例 3 を参照）。

   通常、各範囲は個別のファイルに書き込まれますが、連続する範囲を同じファイルに書き込むように変更することも可能です。その場合は、開始タイムスタンプの前に「+」を付加します。これにより、新しいファイルを作成せず、前の範囲と同じファイルに追記されます。入力ファイル上の 2 つの範囲の間に隙間があっても、出力ファイル上では隙間がなくなるようタイムスタンプが調整されます。

   例 1 では、 mkvmerge(1) は 2 つのファイルを作成します。最初のファイルには 00:01:20 から 00:02:45 まで、2 番目のファイルには 00:05:50 から 00:10:30 までの内容が含まれます。

   例 2 では、 mkvmerge(1) は 1 つのファイルのみを作成します。このファイルには、 00:01:20 から 00:02:45 までと、 00:05:50 から 00:10:30 までの両方の内容が含まれます。

   例 3 では、 mkvmerge(1) は 2 つのファイルを作成します。最初のファイルにはソースファイルの先頭から 00:02:45 まで、2 番目のファイルには 00:05:50 からソースファイルの終端までの内容が含まれます。

   Note:

   注意： mkvmerge(1) はキーフレームの位置でのみ分割を決定します。これは各範囲の開始と終了の両方に適用されます。そのため、終了タイムスタンプが 2 つのキーフレームの間にある場合、 mkvmerge(1) はその終了タイムスタンプを過ぎても、次のキーフレームの直前までのフレームを出力し続けます。

5. フレーム番号またはフィールド番号の範囲を指定して特定のパーツのみを保持し、他を破棄する。

   構文： --split parts-frames: 開始1-終了1[,[+]開始2-終了2[,[+]開始3-終了3...]]

   例：

   1. --split parts-frames:137-258,548-1211

   2. --split parts-frames:733-912,+1592-2730

   3. --split parts-frames:-430,2512-

   「parts-frames」モードは、指定したフレーム番号（またはフィールド番号）の範囲のみを保持し、それ以外を破棄するよう mkvmerge(1) に指示します。保持する範囲は parts-frames: キーワードの後にカンマ区切りで指定します。範囲は開始と終了の番号で構成され、番号は 1 から始まります。

   開始番号を省略した場合、直前の範囲の終了番号がデフォルトとして使用されます。直前の範囲がない場合は、ファイルの先頭が使用されます（例 3 を参照）。

   終了番号を省略した場合、ソースファイルの終端がデフォルトとして使用されます。これは、それ以降のすべての内容を保持することを意味します（例 3 を参照）。

   通常、各範囲は個別のファイルに書き込まれますが、連続する範囲を同じファイルに書き込むように変更可能です。その場合は、開始番号の前に「+」を付加します。これにより新しいファイルを作成せず、前の範囲と同じファイルに追記されます。入力ファイル上の 2 つの範囲に隙間があっても、出力ファイル上では隙間がなくなるようタイムスタンプが調整されます。

   Note:

   注意： mkvmerge(1) はキーフレームの位置でのみ分割を決定します。これは各範囲の開始と終了の両方に適用されます。そのため、終了フレーム番号が 2 つのキーフレームの間にある場合、 mkvmerge(1) はその番号を過ぎても、次のキーフレームの直前までのフレームを出力し続けます。

   例 1 では、 mkvmerge(1) は 2 つのファイルを作成します。最初のファイルには、フレーム 137 以降の最初のキーフレームから、フレーム 258 以降の最初のキーフレームの直前までの内容が含まれます。2 番目のファイルには、フレーム 548 から 1211 までの内容が含まれます。

   例 2 では、 mkvmerge(1) は 1 つのファイルのみを作成します。このファイルには、フレーム 733 から 912 までと、フレーム 1592 から 2730 までの両方の内容が含まれます。

   例 3 では、 mkvmerge(1) は 2 つのファイルを作成します。最初のファイルにはソースファイルの先頭からフレーム 430 まで、2 番目のファイルにはフレーム 2512 からソースファイルの終端までの内容が含まれます。

   This mode considers only the first video track that is output. If no video track is output no splitting will occur.

   Note:

   The numbers given with this argument are interpreted based on the number of Matroska(tm) blocks that are output. A single Matroska(tm) block contains either a full frame (for progressive content) or a single field (for interlaced content). mkvmerge does not distinguish between those two and simply counts the number of blocks. For example: If one wanted to split after the 25th full frame with interlaced content one would have to use 50 (two fields per full frame) as the split point.

6. 特定のフレーム/フィールドの後で分割します。

   Syntax: --split frames: A[,B[,C...]]

   Example: --split frames:120,237,891

   The parameters A, B, C etc must all be positive integers. Numbering starts at 1. The list of frame/field numbers is separated by commas. After the input stream has reached the current split point's frame/field number a new file is created. Then the next split point given in this list is used.

   接頭辞「frames:」は省略できません。

   This mode considers only the first video track that is output. If no video track is output no splitting will occur.

   Note:

   The numbers given with this argument are interpreted based on the number of Matroska(tm) blocks that are output. A single Matroska(tm) block contains either a full frame (for progressive content) or a single field (for interlaced content). mkvmerge does not distinguish between those two and simply counts the number of blocks. For example: If one wanted to split after the 25th full frame with interlaced content one would have to use 50 (two fields per full frame) as the split point.

7. 指定した各チャプタで分割します。

   構文: --split chapters:all又は--split chapters: A[,B[,C...]]

   例: --split chapters:5,8

   A, B, C等のパラメータは正整数でなくてはなりません。番号は1始まりです。複数のチャプタ番号はコンマで区切られます。分割が行なわれるのは、指定された番号の各チャプタが開始するタイムスタンプと等しい又はより大きいタイムスタンプである最初のキーこまの直前です。0秒から開始するチャプタは分割されることなく、通知なしに破棄されます。

   全てのチャプタ番号を手で入力する代わりに、allキーワードが使えます。

   接頭辞「chapters:」は省略できません。

   Note:

   The Matroska(tm) file format supports arbitrary deeply nested chapter structures called 'edition entries' and 'chapter atoms'. However, this mode only considers the top-most level of chapters across all edition entries.

この分割モードでは、出力ファイル名は通常の操作とは異なる扱いを受けます。このモードでは出力ファイル名はprintfのように'%d'というパターンを含むことができます。'%02d'のように幅指定を追加することもできます。出力ファイル名がこのパターンを含む場合、ファイル番号が適切な形式で指定された位置に挿入されます。含まない場合、'-%03d'というパターンがファイルの拡張子の直前に指定されたものとみなされ、例えば'-o output.mkv'を指定した場合、'output-001.mkv'等のファイル名に出力されます。拡張子が存在しない場合、'-%03d'はファイル名の末尾に追加されます。

もう一つの指定可能なパターンは「%c」で、これはファイル内の最初のチャプター名に置換されます。なお、「%c」が含まれる場合、デフォルトの「-%03d」パターンは自動付加されません。

--link | 出力ファイルの分割時に、各ファイルを相互にリンクします。詳細は後述の ファイルリンク セクションを参照してください。
--link-to-previous segment-UID | 最初の出力ファイルを segment-UID パラメータで指定されたセグメント UID にリンクします。詳細は後述の ファイルリンク セクションを参照してください。 SID が「=」で始まる場合、それ以降の文字列は Matroska ファイルの名前として解釈され、そのファイルから読み取られたセグメント UID が使用されます。
--link-to-next segment-UID | 最後の出力ファイルを segment-UID パラメータで指定されたセグメント UID にリンクします。詳細は後述の ファイルリンク セクションを参照してください。 SID が「=」で始まる場合、それ以降の文字列は Matroska ファイルの名前として解釈され、そのファイルから読み取られたセグメント UID が使用されます。

--append-mode モード

ファイルを結合する際のタイムスタンプの計算方法を決定します。パラメータ mode には、既定値である 'file' と、 'track' の 2 つの値を指定できます。

mkvmergeが二つめのファイル(以後'file2'と呼ぶ)のトラック(以後'track2_1'と呼ぶ)を、一つめのファイル(以後'file1'と呼ぶ)のトラック(以後'track1_1'と呼ぶ)と結合する際、'track2_1'の時刻印は一定量だけずらす必要があります。'file'モードでは、ずらす量は'file1'の中の'track1_1'以外のトラックを含む全てのトラックの中で一番大きい時刻印の値になります。'track'モードでは、'track1_1'の中で一番大きい時刻印の値になります。

残念ながら mkvmerge は、どちらのモードが適切かを確実には判断できません。そのため、既定値は 'file' モードになっています。'file' モードは、個別に作成されたファイル（AVI や MP4 など）を結合する際に適しています。一方 'track' モードは、元々 1 つの大きなファイルの一部であったソース（VOB や EVO など）に対してより効果的に機能する場合があります。

字幕トラックについては、実際に 'track' モードが有効であっても、常に 'file' モードとして処理されます。

--append-to SFID1:STID1:DFID1:DTID1[,...] | このオプションは、どのトラックがどのトラックに追加されるのかを制御します。ファイルID、トラックID、追加するファイルID、追加するトラックIDの4つのIDで一組の指定を構成します。最初のファイルIDとトラックIDの組み合わせは、追加される対象のトラックを指定します。次のファイルIDとトラックIDは、そのトラックに追加されるトラックを指定します。 このオプションが指定されない場合、標準のマッピングが使用されます。この場合、前のファイルのトラックに、現在のファイルのトラックIDが同じであるトラックが追加されます。これにより、動画が二つのファイルに分割されており、かつ同じトラック数とトラックIDを持つ場合、mkvmerge -o output.mkv part1.mkv +part2.mkvのようにして簡単に結合することができます。

+

単一の '+' を指定すると、次に指定されたファイルは「追加」ではなく「結合」として扱われます。'+' は次のファイル名の直前に置くことも可能です。したがって、次の 2 つのコマンドは等価になります:

    $ mkvmerge -o full.mkv file1.mkv + file2.mkv
    $ mkvmerge -o full.mkv file1.mkv +file2.mkv

[ file1 file2 ]

角括弧（`[]`）内に複数のファイル名を記述すると、2 番目以降のすべてのファイルが、括弧内の最初のファイルに結合されます。

これはファイル名の間に「+」を記述するのと同等の構文です。したがって、以下の 2 つのコマンドは等価です:

    $ mkvmerge -o full.mkv file1.mkv + file2.mkv
    $ mkvmerge -o full.mkv '[' file1.mkv file2.mkv ']'

=

特定のファイル形式（MPEG プログラムストリーム ＝ VOB）において、 mkvmerge(1) は通常、入力ファイルと同じディレクトリにある「同じベース名で連番のみが異なるファイル（例：VTS_01_1.VOB、VTS_01_2.VOB、VTS_01_3.VOB 等）」を自動的に探し、それらを 1 つの大きなファイルとして連結処理します。単一の「=」オプションを指定すると、これら追加ファイルの自動探索を無効にします。

'=' は次のファイル名の直前に置くことも可能です。したがって、次の 2 つのコマンドは等価になります:

    $ mkvmerge -o full.mkv = file1.vob
    $ mkvmerge -o full.mkv =file1.vob

( file1 file2 )

複数のファイル名が括弧 `( )` 内に含まれている場合、それらのファイルは、各ファイルの内容が順に並んだ「1つの大きな論理ファイル」として連結して扱われます。

これは、DVD の VOB ファイルや MPEG トランスポートストリーム等に対して使用できます。AVI や MP4 のように、各ファイルが独自のヘッダーセットを持つ「スタンドアローン」形式のファイルには使用できません。

ファイル名を括弧で囲むと、オプション = で説明した「同じベース名を持つ連番ファイルの自動検索」を無効にする効果もあります。したがって、以下の 2 つのコマンドラインは等価です:

    $ mkvmerge -o out.mkv = file.mkv
    $ mkvmerge -o out.mkv '(' file.mkv ')'

いくつか注意事項があります：

1. 開始括弧 `(` の後と、終了括弧 `)` の前には、それぞれ空白（スペース）が必要です。

2. 括弧内のすべてのパラメータはファイル名として解釈されます。そのため、この論理ファイル全体に適用するオプションは、必ず開始括弧の前に記述する必要があります。

3. 一部のシェルでは括弧を特殊文字として扱います。そのため、上の例のように括弧をエスケープするか、引用符で囲む必要があります。

## 2.6. 添付ファイルへの対応（広域オプションの続き）

Option | Description
--- | ---
--attachment-description description | 次に指定する添付ファイルの説明文（プレーンテキスト）を指定します。この設定は、直後の --attach-file または --attach-file-once オプションに適用されます。
--attachment-mime-type MIME type | 次の添付ファイルのMIMEタイプを指定します。--attach-file及び--attach-file-onceオプションに適用されます。公式に認知されているMIMEタイプは例えばIANAのホームページに掲載されています。MIMEタイプは添付ファイルに必須です。 添付ファイルに対して MIME タイプが指定されない場合、そのタイプは自動的に判別されます。
--attachment-name name | この添付ファイルの、出力ファイル内での名前を指定します。このオプションが指定されなかった場合、--attach-fileまたは--attach-file-onceで指定されたファイル名がそのまま使用されます。
--attach-file file-name, --attach-file-once file-name | Matroska(tm) ファイル内に添付ファイルを作成します。2 つのオプションの違いは分割出力時の挙動です。 --attach-file で指定したファイルはすべての出力ファイルに添付されますが、 --attach-file-once の場合は最初に作成された出力ファイルにのみ添付されます。分割機能を使用しない場合は、どちらも同じ結果になります。 mkvextract(1) を使用して、Matroska(tm) ファイルから添付ファイルを抽出することができます。
--enable-legacy-font-mime-types | 特定のフォント添付ファイルに対して、レガシーな MIME タイプの使用を有効にします。例えば、TrueType フォントに対して 'fonts/ttf' の代わりに 'application/x-truetype-font' が使用されるようになります。 これは、MIME タイプが自動判別される新規の添付ファイルと、保存済みの MIME タイプがレガシーなものに再マッピングされる既存の添付ファイルの両方に影響します。 影響を受ける MIME タイプは、'font/sfnt'、'font/ttf'、'font/collection'（これらはすべて 'application/x-truetype-fonts' にマッピング）および 'font/otf'（'application/vnd.ms-opentype' にマッピング）です。

## 2.7. 各入力ファイルに指定できるオプション

Option | Description
--- | ---
-a, --audio-tracks [!]n,m,... | 音声トラック n, m 等をコピーします。番号は --identify オプションで得られるトラック ID であり、単なるトラック番号ではありません（「トラック ID」節を参照）。既定では、すべての音声トラックをコピーします。 トラック ID の代わりに、ISO 639-2 言語コードを指定することも可能です。ただし、これはトラックに言語タグが含まれているソースファイルでのみ機能します。 デフォルト：この種類のすべてのトラックをコピーします。 ID の前に ! を付加すると、意味が反転します。すなわち、 ! の後にリストされた ID 以外のすべての該当種類のトラックをコピーします。
-d, --video-tracks [!]n,m,... | 映像トラック n, m 等をコピーします。番号は --identify オプションで得られるトラック ID であり、単なるトラック番号ではありません（「トラック ID」節を参照）。既定では、すべての映像トラックをコピーします。 トラック ID の代わりに、ISO 639-2 言語コードを指定することも可能です。ただし、これはトラックに言語タグが含まれているソースファイルでのみ機能します。 ID の前に ! を付加すると、意味が反転します。すなわち、 ! の後にリストされた ID 以外のすべての該当種類のトラックをコピーします。
-s, --subtitle-tracks [!]n,m,... | 字幕トラック n, m 等をコピーします。番号は --identify オプションで得られるトラック ID であり、単なるトラック番号ではありません（「トラック ID」節を参照）。既定では、すべての字幕トラックをコピーします。 トラック ID の代わりに、ISO 639-2 言語コードを指定することも可能です。ただし、これはトラックに言語タグが含まれているソースファイルでのみ機能します。 ID の前に ! を付加すると、意味が反転します。すなわち、 ! の後にリストされた ID 以外のすべての該当種類のトラックをコピーします。
-b, --button-tracks [!]n,m,... | ボタントラック n, m 等をコピーします。番号は --identify オプションで得られるトラック ID であり、単なるトラック番号ではありません（「トラック ID」節を参照）。既定では、すべてのボタントラックをコピーします。 トラック ID の代わりに、ISO 639-2 言語コードを指定することも可能です。ただし、これはトラックに言語タグが含まれているソースファイルでのみ機能します。 ID の前に ! を付加すると、意味が反転します。すなわち、 ! の後にリストされた ID 以外のすべての該当種類のトラックをコピーします。
--track-tags [!]n,m,... | トラックn、m…の標識を複製します。番号は--identifyオプションで得られるトラックIDであり，単にトラック番号を示すものではありません（「トラックID」節を参照）。既定: 全てのトラックの標識を複製します。 ID の前に ! を付加すると、意味が反転します。すなわち、 ! の後にリストされた ID 以外のすべての要素をコピーします。

-m, --attachments [!]n[:all|first],m[:all|first],...

ID が n, m 等の添付ファイルを、すべてまたは最初の出力ファイルにコピーします。各 ID の後ろには、 ':all' (未指定時のデフォルト) または ':first' を付加できます。分割出力が有効な場合、 ':all' が指定された ID の添付ファイルはすべての出力ファイルにコピーされますが、それ以外は最初の出力ファイルにのみコピーされます。分割出力が無効な場合は、どちらを指定しても同じ結果になります。

デフォルトでは、すべての添付ファイルがすべての出力ファイルにコピーされます。

ID の前に ! を付加すると、意味が反転します。すなわち、 ! の後にリストされた ID 以外のすべての要素をコピーします。

-A, --no-audio | このファイルから音声トラックを一切コピーしません。
-D, --no-video | このファイルから映像トラックを一切コピーしません。
-S, --no-subtitles | このファイルから字幕トラックを一切コピーしません。
-B, --no-buttons | このファイルからボタントラックを一切コピーしません。
-T, --no-track-tags | このファイルからトラック固有のタグを一切コピーしません。
--no-chapters | このファイルからチャプターをコピーしません。
-M, --no-attachments | このファイルから添付ファイルをコピーしません。
--no-global-tags | このファイルからグローバルタグをコピーしません。
--regenerate-track-uids | Matroska ソースファイルに対してこのオプションを使用すると、mkvmerge(1) はファイル内の既存の ID を保持する代わりに、新しいランダムなユニークトラック ID (UID) を作成します。同じファイルから読み込まれたチャプターやタグ内の既存トラック UID も、新しく生成された値に再マッピングされます。 この挙動は、MakeMKV ソフトウェアで作成された Matroska ファイルに対しては自動的に有効になります。その理由は、MakeMKV がランダムな UID を生成する代わりに、連番（1, 2, 3...）を UID として使用するためです。
-y, --sync TID:d[,o[/p]] | トラック ID が TID のトラックのタイムスタンプを d ミリ秒だけ調整します。トラック ID は --identify オプションで得られるものと同じです（「トラック ID」節を参照）。 o/p： タイムスタンプを o/p 倍に調整し、線形ドリフトを補正します。 p を省略した場合、デフォルト値は 1 です。 o と p にはどちらも浮動小数点数を指定可能です。 デフォルト設定： 手動同期補正なし（d = 0 かつ o/p = 1.0 と同等）。 このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。

--cues TID:none|iframes|all

指定されたトラックについて、どのトラック演奏指令（目録）項目が作成されるのかを指定します（「トラックID」節を参照）。「none」を指定すると演奏指令項目を作成しません。「iframes」を指定すると前方参照及び後方参照を含まない区画（映像トラックではI齣）のみが演奏指令用紙に挿入されます。「all」を指定するとmkvmerge(1)は全ての区画に対して演奏指令項目を作成し、非常に大きなファイルが出力されます。

The default is 'iframes' for video and subtitle tracks and 'none' for audio tracks. See also option --no-cues which inhibits the creation of cue entries regardless of the --cues options used.

このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。

--default-track-flag TID[:bool]

オプション引数 bool に 1 を設定するか、引数を省略した場合、指定されたトラック（「トラック ID」節を参照）に対して「デフォルトトラック (default track)」フラグを設定します。ソースコンテナがその情報を提供しておらず、かつユーザーがこのオプションで指定しなかった場合に、このフラグがセットされます。

再生中にユーザーが明示的にトラックを選択しなかった場合、プレーヤーは「デフォルトトラック」フラグが設定されているトラックの中から、ユーザーが好む言語などの設定を考慮して 1 つを選択する必要があります。

このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。

--track-enabled-flag TID[:bool]

Sets the "track enabled" flag for the given track (see section track IDs) to the given value bool (0 or 1; defaults to 1 if not specified). Tracks are enabled by default if no option is specified for them and the source container doesn't provide this information either.

「トラック有効」フラグが設定されているトラックのみが再生候補として考慮されるべきです。

このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。

--forced-display-flag TID[:bool] | 任意引数真偽値に1を設定あるいは何も設定しなかった場合に，所与のトラック（「トラックID」節参照）に対して、「強制表示」標旗を設定します。画面表示文や外国語の会話文があるトラックに使用してください。 このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--hearing-impaired-flag TID[:bool] | Sets the "hearing impaired" flag for the given track (see section track IDs) if the optional argument bool is set to 1 or if it isn't present. This flag can be set if the track is suitable for users with hearing impairments. このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--visual-impaired-flag TID[:bool] | 任意引数boolに1を設定あるいは何も設定しなかった場合に，所与のトラック（「トラックID」節参照）に対して、「視覚障害」標旗を設定します。当トラックが視覚障害者に適しているなら，この標旗を設定するといいでしょう。 このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。

--text-descriptions-flag TID[:bool]

Sets the "text descriptions" flag for the given track (see section track IDs) if the optional argument bool is set to 1 or if it isn't present. This flag can be set if the track contains textual descriptions of video content suitable for playback via a text-to-speech system for a visually-impaired user.

このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。

--original-flag TID[:bool] | Sets the "original language" flag for the given track (see section track IDs) if the optional argument bool is set to 1 or if it isn't present. This flag can be set if the track is in the content's original language (not a translation). このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--commentary-flag TID[:bool] | Sets the "commentary" flag for the given track (see section track IDs) if the optional argument bool is set to 1 or if it isn't present. This flag can be set if the track contains commentary. このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--track-name TID:name | 指定されたトラック（「トラック ID」節を参照）のトラック名を name に設定します。
--language TID:language | 指定したトラックの言語を設定します(トラックIDのセクションも参照)。ISO 639-2 言語コード及び ISO 639-1 国別コードが使用できます。国別コードは言語コードへ自動的に変換されます。ISO 639-2 に含まれる全てのコードは--list-languagesオプションで一覧できます。 このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
-t, --tags TID:file-name | トラック番号 TID のトラック用タグを、ファイル file-name から読み込みます。詳細は、後述のタグに関するセクションを参照してください。

--aac-is-sbr TID[:0|1]

mkvmerge(1)にIDがTIDのトラックがSBR AAC (別名HE-AAC又はAAC+)であることを教えます。このオプションは、 a) ソースファイルが(Matroska(tm)ファイルではなく)AACファイルでありかつ b) AACファイルがSBR AACデータを含む場合に必要です。このスイッチが存在する理由は、通常のAACファイルとSBR AACファイルを自動的に区別することは、AACこまを完全にデコードしなければ技術的に不可能であるためです。AACはいくつかの特許問題を抱えているため、mkvmerge(1)は将来的にもこのデコードステージを含むことはありません。よって、SBR AACにはこのスイッチが必須となります。このスイッチが指定されなかった場合、出力ファイルは正常に再生ができなくなるか、完全に再生不能になるでしょう。

ソースファイルが Matroska(tm) ファイルの場合、通常は CodecID によって SBR AAC を検知できます。しかし、 CodecID が間違っている場合には、このスイッチを使用して修正することができます。

もし mkvmerge(1) が AAC ファイルを誤って SBR と認識してしまった場合、トラック ID に ':0' を付加することで指定を解除できます。

--audio-emphasis TID:n|symbolic-name | Sets the emphasis for the audio track with the track ID TID. The mode can either be a number n (certain values between 0 and 16) or a symbolic name. All valid numbers & symbolic names can be listed with the --list-audio-emphasis option.
--reduce-to-core TID | 一部の音声コーデックは、不可逆圧縮の「コア」と、ロスレス（可逆）デコードを実装するためのオプションの「拡張」を持っています。このオプションを使用すると、 mkvmerge(1) はコアのみをコピーし、拡張部分はコピーしません。デフォルトでは、 mkvmerge(1) はコアと拡張の両方をコピーします。 現在のところ、このオプションの影響を受けるのは DTS トラックのみです。 AC-3 コアが埋め込まれた TrueHD トラックの場合は、代わりに 2 つの独立したトラックとして表示され、ユーザーがどちらをコピーするか選択できます。 DTS の場合は、 HD 拡張部分が（ TrueHD データとは異なり）単体でデコードできないため、このような仕組みは採用されていません。
--remove-dialog-normalization-gain TID | 一部の音声コーデックには、デコーダーやプレーヤーに対し、ダイアログノーマライゼーション（台詞の音量正規化）のために（通常は負の）ゲインを適用するよう指示するヘッダーフィールドが含まれています。このオプションを指定すると、 mkvmerge(1) は対応するヘッダーフィールドを修正することで、そのゲインを削除または最小化します。 現在のところ、このオプションの影響を受けるのは AC-3 、 DTS 、 TrueHD トラックのみです。
--timestamps TID:file-name | 指定したトラックIDの時刻印を、file-nameから読み込みます。これらの時刻印はmkvmerge(1)が通常計算する時刻印を強制的に上書きします。外部時刻印ファイルのセクションを参照してください。

--default-duration TID:x

指定したトラックの default duration を強制的に設定します。トラックのトラックの時刻印も、 default duration に合うように変更されます。引数xは's'、'ms'、'us'、'ns'、'fps'、p'。'iのうちどれか一つを後置されていなければなりません。それぞれ、 default duration は秒、ミリ秒、マイクロ秒、ナノ秒、'fps'、1秒あたりのプログレッシブこま、1秒あたりのインターレスのこま数単位で指定されます。xは小数または分数で指定できます。

既定のこま持続時間が強制設定されなかった場合、 mkvmerge(1) はコンテナ、または（ AVC/H.264 や MPEG-2 などの特定のトラック形式では）エンコードされたビットストリームから、そのトラックの既定のこま持続時間を取得しようと試みます。

このオプションは、外部タイムスタンプファイルを使用せずに映像トラックの FPS を変更する目的でも使用できます。

--fix-bitstream-timing-information TID[:0|1] | 通常、 mkvmerge(1) は映像ビットストリーム内に記録されているタイミング情報（フレーム/フィールドレート）を変更しません。このオプションを指定すると、その情報をコンテナのタイミング情報と一致するように調整します。コンテナのタイミング情報は、コマンドライン（ --default-duration オプションを参照）、ソースコンテナ、またはビットストリーム自体といった様々なソースから取得されます。 Note: この機能は、現在のところ AVC/H.264 映像トラックに対してのみ実装されています。
--compression TID:n | トラックに使用する圧縮形式を選択します。再生プレーヤー側もその形式をサポートしている必要があることに注意してください。有効な値は 'none' 、 'zlib' 、および 'mpeg4_p2' / 'mpeg4p2' です。 圧縮形式 'mpeg4_p2' / 'mpeg4p2' は、「ヘッダー除去 (header removal)」と呼ばれる特殊な圧縮方法で、 MPEG-4 Part 2 映像トラックに対してのみ使用可能です。 一部の字幕形式では、デフォルトで 'zlib' 圧縮が使用されます。この圧縮形式は、ほとんどすべて（もしすべてでないにしても）の再生アプリケーションがサポートしています。 'none' 以外の他の圧縮形式については、サポートが保証されていません。

## 2.8. 映像トラックにのみ適用されるオプション

Option | Description
--- | ---
-f, --fourcc TID:FourCC | FourCC を指定した値に強制的に設定します。このオプションは、映像トラックが「 MS 互換モード」である場合にのみ有効です。
--display-dimensions TID:widthxheight | Matroska(tm)ファイルは再生時の画像スケールを決定するための二つの値を持ちます。表示幅と表示高さです。これらの値をこのオプションで、例えば'1:640x480'のように指定できます。 これらの値を設定する別の方法として、--aspect-ratio又は--aspect-ratio-factorオプションが使用できます(下記参照)。これらのオプションは互いに排他的です。
--aspect-ratio TID:ratio|width/height | Matroska(tm)ファイルは再生時の画像スケールを決定するための二つの値を持ちます。表示幅と表示高さです。これらの値をこのオプションで、例えば'1:640x480'のように指定できます。このオプションを指定すると、mkvmerge(1)は自動的に表示幅及び表示高さを、画像の元の幅と高さ、そして指定されたアスペクト比から自動的に計算します。アスペクト比は、小数ratioまたは分数'width/height'(例: '16/9')の形式で指定できます。 これらの値を指定する別の方法として、 --aspect-ratio-factor または --display-dimensions オプションを使用することもできます（前述および後述）。これらのオプションは互いに排他的です。
--aspect-ratio-factor TID:factor|n/d | アスペクト比を設定するもう一つの方法は、係数 factor を指定することです。元のアスペクト比にこの係数を乗じたものが、最終的なターゲットアスペクト比として使用されます。 これらの値を指定する別の方法として、 --aspect-ratio または --display-dimensions オプションを使用することもできます（前述参照）。これらのオプションは互いに排他的です。
--cropping TID:left,top,right,bottom | 映像トラックのピクセルクロッピング（切り出し）パラメータを指定された値に設定します。
--color-matrix-coefficients TID:n | 赤・緑・青の三原色から輝度 (luma) および色差 (chroma) の値を導き出すために使用される、映像のマトリックス係数を設定します。パラメータ n は 0 から 10 の範囲の整数です。 有効な値とその意味は以下の通りです: 0: GBR, 1: BT709, 2: 指定なし, 3: 予約済み, 4: FCC, 5: BT470BG, 6: SMPTE 170M, 7: SMPTE 240M, 8: YCOCG, 9: BT2020 非定輝度, 10: BT2020 定輝度
--color-bits-per-channel TID:n | カラーチャネルあたりの符号化ビット数を設定します。値 0 はビット数が未指定であることを示します。
--chroma-subsample TID:hori,vert | 水平または垂直方向に除去されないピクセルごとに、 Cr および Cb チャネルで除去するピクセル量を設定します（クロマサブサンプリングの設定）。 例： 4:2:0 クロマサブサンプリングの映像の場合、パラメータは TID:1,1 に設定する必要があります。
--cb-subsample TID:hori,vert | 水平または垂直方向に除去されないピクセルごとに、 Cb チャネルで除去するピクセル量を設定します。これは --chroma-subsample に加算されます。 例： 4:2:1 クロマサブサンプリングの映像の場合、 --chroma-subsample を TID:1,0 に、 Cb-subsample を TID:1,0 に設定する必要があります。
--chroma-siting TID:hori,vert | クロマの配置位置（水平・垂直）を設定します（ 0: 未指定、 1: 上部同位置 (top collocated)、 2: 中央 (half) ）。
--color-range TID:n | 色域のクリッピングを設定します（ 0: 未指定、 1: 放送用レンジ、 2: フルレンジ（クリッピングなし）、 3: MatrixCoefficients/TransferCharacteristics で定義）。
--color-transfer-characteristics TID:n | 映像の転送特性（ガンマカーブ等）を設定します。 有効な値とその意味は以下の通りです: 0: 予約済み, 1: ITU-R BT.709, 2: 未指定, 3: 予約済み, 4: ガンマ 2.2 曲線, 5: ガンマ 2.8 曲線, 6: SMPTE 170M, 7: SMPTE 240M, 8: リニア, 9: ログ, 10: ログ・ルート, 11: IEC 61966-2-4, 12: ITU-R BT.1361 拡張色域, 13: IEC 61966-2-1, 14: ITU-R BT.2020 10bit, 15: ITU-R BT.2020 12bit, 16: SMPTE ST 2084, 17: SMPTE ST 428-1; 18: ARIB STD-B67 (HLG)
--color-primaries TID:n | 映像のカラープライマリ（色度座標）を設定します。 有効な値とその意味は以下の通りです: 0: 予約済み, 1: ITU-R BT.709, 2: 未指定, 3: 予約済み, 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 蛍光体
--max-content-light TID:n | 単一ピクセルの最大輝度 (最大コンテンツ輝度レベル、MaxCLL) をカンデラ毎平方メートル (cd/m²) 単位で設定します。引数 n は非負の整数である必要があります。
--max-frame-light TID:n | 単一フルフレームの最大輝度 (最大フレーム平均輝度レベル、MaxFALL) をカンデラ毎平方メートル (cd/m²) 単位で設定します。引数 n は非負の整数である必要があります。
--chromaticity-coordinates TID:red-x,red-y,green-x,green-y,blue-x,blue-y | CIE 1931 で定義されている赤・緑・青の色度座標を設定します。
--white-color-coordinates TID:x,y | CIE 1931 で定義されている白色点の色度座標を設定します。
--max-luminance TID:float | 最大輝度をカンデラ毎平方メートル (cd/m²) 単位で設定します。値は 9999.99 未満である必要があります。
--min-luminance TID:float | 最小輝度をカンデラ毎平方メートル (cd/m²) 単位で設定します。値は 999.9999 未満である必要があります。
--projection-type TID:method | 使用する映像投影方式を設定します。有効な値は 0 (矩形投影)、1 (正距円筒図法)、2 (キューブマップ投影)、3 (メッシュ投影) です。
--projection-private TID:data | 特定の投影方式にのみ適用されるプライベートデータを設定します。データは「0x」接頭辞の有無にかかわらず、またスペースの有無にかかわらず、16進数で指定する必要があります。
--projection-pose-yaw TID:float | 投影方式にヨー回転 (左右の回転) を指定します。
--projection-pose-pitch TID:float | 投影方式にピッチ回転 (上下の回転) を指定します。
--projection-pose-roll TID:float | 投影方式にロール回転 (傾き) を指定します。
--field-order TID:n | Sets the field order for the video track with the track ID TID. The order must be one of the following numbers: 0: プログレッシブ、1: インターレース (トップフィールドを先に表示、トップフィールドを先に格納)、2: フィールド順序未確定、6: インターレース (ボトムフィールドを先に表示、ボトムフィールドを先に格納)、9: インターレース (ボトムフィールドを先に表示、トップフィールドを先に格納)、14: インターレース (トップフィールドを先に表示、ボトムフィールドを先に格納)
--stereo-mode TID:n|symbolic-name | Sets the stereo mode for the video track with the track ID TID. The mode can either be a number n between 0 and 14 or a symbolic name. All valid numbers & names can be listed with the --list-stereo-modes option.

## 2.9. テキスト字幕トラックにのみ適用されるオプション

Option | Description
--- | ---
--sub-charset TID:character-set | 指定したトラック ID の UTF-8 字幕を UTF-8 へ変換する際の文字セットを設定します。指定しない場合、現在のロケール設定から文字セットが導出されます。Matroska(tm) ファイルや Kate ストリームから読み込まれる字幕は常に UTF-8 で格納されているため、文字セットの指定は不要です。mkvmerge(1) が文字セット間をどのように変換するかについては、テキストファイルと文字セットのセクションを参照してください。 このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。

## 2.10. その他のオプション

Option | Description
--- | ---
-i, --identify file-name | mkvmerge(1) に単一のファイルを走査させ、その形式、ファイルに含まれるトラックとそのトラック ID を報告させます。このオプションを使用する場合、他に許可されるオプションはファイル名のみです。 結果に使用される出力形式は、--identification-format オプションで変更できます。
-J file-name | これは "--identification-format json --identify file-name" の便利なエイリアスです。

-F, --identification-format format

--identify オプションで使用される出力形式を決定します。次の形式がサポートされています: text (このオプションを使用しない場合の既定) および json。

1. text 形式は短く、人間が読みやすい形式です。見つかった項目 (コンテナ、トラック、添付ファイルなど) ごとに 1 行で構成されます。

   この形式はプログラムによる解析を意図したものではありません。出力は mkvmerge(1) が使用する言語に翻訳されます (--ui-language も参照してください)。

2. json 形式は、機械可読な JSON 表現を出力します。この形式は以下のファイルに記述されている JSON スキーマに従います:

   mkvmerge-identification-output-schema-v20.json

   すべてのバージョンの JSON スキーマは、オンラインおよびリリースされたソースコードアーカイブの両方で入手可能です。

--probe-range-percentage percentage | MPEGプログラムや転送流 (.vob, .m2ts) といったファイル種別においては，ファイルに含まれる全てのトラックを検出する為に一定量の情報を解析する必要が生じます。解析量は原ファイルの0.3%か10MBか大きい方です。 トラックの存在を認識しているのに見付けられなかった場合は，このオプションを用いて探測の度合いを変更することができます。最低値10MBは組み込まれており変更することはできません。
--list-audio-emphasis | --audio-emphasis オプションで使用可能なすべての有効な数値と、それに対応するシンボリック名を一覧表示します。
--list-languages | --language オプションで使用可能なすべての言語とその ISO 639-2 コードを一覧表示します。
--list-stereo-modes | --stereo-mode オプションで使用可能なすべての有効な数値と、それに対応するシンボリック名を一覧表示します。
-l, --list-types | サポートされている入力ファイルの形式を一覧表示します。
--priority priority | mkvmerge(1) を実行する際のプロセスの優先度を設定します。指定可能な値は 'lowest'、'lower'、'normal'、'higher'、および 'highest' です。指定がない場合は 'normal' が使用されます。Unix 系のシステムでは nice(2) 関数を使用するため、'higher' および 'highest' はスーパーユーザーのみが使用できます。Windows では、すべてのユーザーがすべての値を使用可能です。 'lowest' を選択すると、プロセスの優先度が最低になるだけでなく、I/O 優先度もアイドル（idle）に設定されます。
--command-line-charset character-set | コマンドラインで指定された文字列を変換するための元の文字セットを設定します。既定値はシステムの現在のロケールで指定された文字セットです。この設定は、--title、--track-name、および --attachment-description オプションの引数に適用されます。
--output-charset 文字セット | 出力される文字列を変換するのに用いる文字集合を設定します。既定では機構の現行地域特性で指定している文字集合になります。
-r, --redirect-output ファイル名 | 全ての通報を操作卓にではなくファイル名のファイルに書き出します。出力を転送することで同じことが簡単にできるものの、このオプションが必要な場合は存在します:ファイルに転送する前に端末が出力を再解釈してしまう場合です。--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 | 書き込み用に開いたファイルを閉じる際に、プログラムが主記憶上に貯まった全データを補助記憶に排出 (flush) するようにします。停電時のデータ損失を防いだり、運用機構や機器特有の問題を避ける目的で使えるでしょう。欠点として、mkvmergeが終了前に全データを補助記憶に書き込み終わるまで待機するせいで多重化に長い時間を要します。MKVToolNixの不具合追跡局の議題2469号および2480号に、この挙動の長短について詳細な議論があります。
--ui-language コード | 用いる翻訳を指定した言語符号のものに強制します（例えば「de_DE」ならドイツ語翻訳です）。符号に「list」を指定すると利用可能な翻訳の一覧を出力します。
--abort-on-warnings | 最初の警告が出た時点でプログラムを中止するように指示します。この場合のプログラムの終了コードは1になります。

--deterministic seed

同一の原ファイルを，同一のオプション群で，同一の初期種と共にmkvmerge(1)を実行した場合に，バイト単位で同一のファイルを生成できるようにします。注意: "data" 区分情報欄はこのモードでは書き出されません。

シード値には任意の文字列を指定でき、数値である必要はありません。

バイト単位での同一性は、以下の条件下においてのみ保証されます:

1. 同じバージョンの libEBML および libMatroska を用いてビルドされた、同じバージョンの mkvmerge(1) が使用されていること。

2. 使用されるソースファイルがバイト単位で同一であること。

3. 同じコマンドラインオプションが同じ順序で使用されていること（ただし、--output ... は例外です）。

異なるバージョンの mkvmerge(1) や異なるコマンドラインオプションを使用した場合でも、結果としてバイト単位で同一なファイルが生成されることがありますが、それは保証されません。

--debug トピック | 特定の機能のデバッグ出力を有効にします。このオプションは開発者向けです。
--engage 機能 | 実験的な機能を有効にします。利用可能な機能の一覧は mkvmerge --engage list で確認できます。これらの機能は、通常の使用環境での利用を意図したものではありません。
--gui-mode | GUIモードを有効にします。このモードでは、制御しているGUIに状況を伝えるための特殊な形式の行が出力されます。これらのメッセージは「#GUI#メッセージ」という形式に従います。メッセージの後には、「#GUI#メッセージ#キー1=値1#キー2=値2...」のようにキーと値のペアが続くことがあります。メッセージ内容やキー名は翻訳されず、常に英語で出力されます。

@オプションファイル.json

追加のコマンドライン引数をファイル options-file から読み込みます。詳細については、オプションファイル のセクションを参照してください。

'--title' などのオプションの引数の先頭文字として @ 記号を使用したい場合は、2 つ目の @ 記号を付けてエスケープする必要があります。例:

    $ mkvmerge -o midnight-s01e01.mkv --title @@midnight midnight-s01e01.mp4

--capabilities

コンパイル時に組み込まれたオプション機能の情報を一覧表示して終了します。出力の最初の行はバージョン情報です。それ以降の各行には、組み込まれている機能を示す単語が 1 つずつ表示されます。機能は以下の通りです:

- 'FLAC' -- 生の FLAC ファイルの読み込み、および Ogg(tm) や Matroska(tm) などの他のコンテナ内の FLAC トラックの処理。

-h, --help | ヘルプを表示して終了します。
-V, --version | バージョン情報を表示して終了します。

# 3. 使い方

各ファイルについて、利用者はmkvmerge(1)が取り出すべきトラックを選択できます。取り出されたトラックは、すべて-oで指定されたファイルに書き出されます。既知の(サポート済の)入力ファイル形式は-lオプションで取得できます。

Important:

コマンドラインオプションの順序は非常に重要です。このプログラムを初めて使用する場合は、 「オプションの順序」セクションを必ず読んでください。

# 4. オプションの順序

一部のオプションでは、入力する順序が重要になります。オプションは大きく 2 つのカテゴリに分けられます:

1. 特定の入力ファイルに関連付けられず、プログラム全体に影響するオプション。これには --command-line-charset、--output、--title などが含まれますが、これらに限定されません。これらのオプションはコマンドラインのどこに記述してもかまいません。

2. 単一の入力ファイル、または入力ファイル内の単一のトラックに影響するオプション。これらのオプションはすべて、コマンドライン上でその直後に記述された入力ファイルに適用されます。同じ入力ファイル（またはその中のトラック）に適用されるすべてのオプションは、その入力ファイル名の前に記述されていれば、順序は問いません。入力ファイルに適用されるオプションの例としては --no-chapters や --chapter-charset があります。単一のトラックに適用されるオプションの例としては --default-duration や --language があります。

オプションは左から右へと処理されます。同じスコープ内で同じオプションが複数回出現した場合、最後に出現したものが使用されます。したがって、以下の例ではタイトルは "Something else" に設定されます:

    $ mkvmerge -o output.mkv --title 'This and that' input.avi --title 'Something else'

以下の例では、--language オプションを 2 回使用しても問題ないことを示しています。これは、それらが異なるスコープで使用されているためです。同じトラック ID に適用される場合でも、異なる入力ファイルに適用されるため、スコープが異なります:

    $ mkvmerge -o output.mkv --language 0:fre français.ogg --language 0:deu deutsch.ogg

# 5. 例

たとえば、MyMovie.avi というファイルがあり、音声トラックが別のファイル（例: 'MyMovie.wav'）にあるとします。まず、音声を OggVorbis(tm) にエンコードします:

    $ 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(tm) を起動して楽しむことができます。複数の音声トラック（あるいは映像トラック）がある場合は、'-vid' および '-aid' オプションを使用して、どのトラックを再生するかを mplayer(tm) に指示できます。これらは 0 から始まる番号で、映像と音声で区別されません。

音声トラックの同期を調整する必要がある場合も、簡単に行えます。まず、次のようにして Vorbis トラックのトラック ID を確認します

    $ mkvmerge --identify outofsync.ogg

次に、その ID を以下のコマンドラインで使用します:

    $ mkvmerge -o goodsync.mkv -A source.avi -y 12345:200 outofsync.ogg

これにより、'outofsync.ogg' から取り込まれる ID 12345 の音声トラックの先頭に 200ミリ秒の無音が付加されます。

動画によっては、最初は正しく同期していても、再生が進むにつれて徐々に音がずれていくものがあります。このような場合には、すべてのタイムスタンプに適用される「遅延係数」を指定できます。この処理ではデータの追加や削除は行われません。そのため、係数の値が大きすぎたり小さすぎたりすると、不自然な結果になります。例として、私がトランスコードしたあるエピソード（全長 77340 フレーム）では、動画の最後で 0.2 秒のずれが生じていました。29.97fps において 0.2 秒は約 6 フレームに相当します。そこで、私は次のように実行しました

    $ mkvmerge -o goodsync.mkv -y 23456:0,77346/77340 outofsync.mkv

結果は良好でした。

同期オプションは、字幕に対しても同様に使用できます。

テキスト字幕を作成するには、SubRipper(tm) などの Windows 用ソフトウェアを使用するか、transcode(1) のソースにある 'contrib/subrip' ディレクトリ内の subrip(tm) パッケージを使用できます。一般的な手順は以下の通りです:

1. ソースから生の字幕ストリームを抽出します:

       $ tccat -i /path/to/copied/dvd/ -T 1 -L | tcextract -x ps1 -t vob -a 0x20 | subtitle2pgm -o mymovie

2. 生成された PGM 画像を gocr でテキストに変換します:

       $ pgm2txt mymovie

3. 生成されたテキストファイルのスペルチェック（校正）を行います:

       $ ispell -d american *txt

4. テキストファイルを SRT ファイルに変換します:

       $ 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(tm) ファイルに 2 つの音声トラックがあり、それらの言語コードを設定したいとします。トラック ID がそれぞれ 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

指定した言語や既定（default）フラグが mkvinfo(1) の出力に反映されていない場合は、既定値 に関するセクションを参照してください。

入力ファイルの圧縮を無効にします。

    $ mkvmerge -o no-compression.mkv --compression -1:none MyMovie.avi --compression -1:none mymovie.srt

# 6. トラック ID

## 6.1. 通常のトラック ID

mkvmerge(1)のオプションの中には、どのトラックに適用するかを特定するために、トラックIDを指定する必要なものがあります。このトラックIDは、入力ファイルがdemuxされる際に表示されるほか、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 ファイル内のトラックに割り当てられる ID と、入力ファイル側のトラック ID を混同しないようにしてください。トラック ID の指定が必要なオプションで使用するのは、常に入力ファイル側の ID です。

また、各入力ファイルにはそれぞれ固有のトラック ID セットがあります。したがって、'mkvmerge --identify' で報告される 'file1.ext' のトラック ID は、他の入力ファイルがいくつあっても、また 'file1.ext' がコマンドラインのどの位置にあっても変わることはありません。

トラック ID は次のように割り当てられます:

- AVI ファイル: 映像トラックの ID は 0 になります。音声トラックには 1 から順に昇順で ID が割り当てられます。

- AAC、AC-3、MP3、SRT、WAV ファイル: そのファイル内の単一の「トラック」に ID 0 が割り当てられます。

- その他のほとんどのファイル: ファイル内でトラックが検出された順に、0 から順次割り当てられます。

トラックIDを使用するオプションの説明には、'TID'が含まれています。また、--audio-tracks、--video-tracks、--subtitle-tracks、--button-tracks及び--track-tagsオプションもトラックIDを使用します。

## 6.2. 特殊なトラック ID

識別（identify）出力には現れない、特別な意味を持つ ID がいくつかあります。

特殊トラック ID '-1' はワイルドカードとして機能し、入力ファイルから読み込まれるすべてのトラックに指定したスイッチを適用します。

特殊トラック ID '-2' は、ソースファイル内のチャプターを参照します。現在、この特殊 ID を使用するのは --sync オプションのみです。--sync -2:... の代わりに --chapter-sync ... オプションを使用することもできます。

# 7. 言語の取り扱い

Matroska(tm) は 2 種類の言語要素をサポートしています。1 つは従来の非推奨な「Language」要素（ISO 639-2 alpha 3 コード）、もう 1 つは新しい「LanguageIETF」タグ（IETF BCP 47 言語タグ）です。mkvmerge(1) の言語を指定するすべてのオプションは BCP 47 言語タグを受け付けます。mkvmerge(1) は可能な限り、BCP 47 言語タグから非推奨の「Language」要素の値を導き出します。

JSON モードでファイルを識別する際、既存の「LanguageIETF」トラックヘッダー要素は language_ietf トラックプロパティとして出力されます。

ファイルを書き込む際、mkvmerge(1) は常に「LanguageIETF」、「ChapLanguageIETF」、「TagLanguageIETF」要素を書き込みます（後者の 2 つは、それぞれチャプターやタグが書き込まれる場合のみ）。これらの要素に加えて、対応する古い要素も書き込まれます。これらには BCP 47 言語タグの ISO 639-2 コード部分が設定されます。たとえば、トラック言語が sr-Cyrl-RS に設定されている場合、「LanguageIETF」には sr-Cyrl-RS が設定され、古い「Language」要素には srp が設定されます。

「…LanguageIETF」要素をすでに含む既存のファイル（Matroska ファイル、XML チャプター、タグファイルなど）を読み込む場合、既存の要素は保持されます。それ以外の場合は、コマンドラインオプションや、既存の非推奨な「…Language」要素に基づいて「…LanguageIETF」要素が追加されます。

これら 3 つの新しい要素の作成は、コマンドラインオプション --disable-language-ietf を使用して完全に無効にすることができます。

拡張言語サブタグに適用される正規化メソッドは、パラメータ --normalize-language-ietf で選択できます。

# 8. テキストファイルと文字セット変換

Note:

このセクションの内容は、mkvmerge(1) についてのみ言及している場合であっても、MKVToolNix のすべてのプログラムに適用されます。

## 8.1. はじめに

Matroska(tm) ファイル内のすべてのテキストは UTF-8 でエンコードされます。そのため mkvmerge(1) は、読み込むすべてのテキストファイルやコマンドラインで指定されたテキストを、元の文字セットから UTF-8 へ変換する必要があります。逆に mkvmerge(1) の出力についても、--ui-language で英語以外の翻訳を使用している場合や Matroska(tm) ファイル由来のテキストを表示する場合などには、UTF-8 から元の文字セットへ変換して出力されます。

mkvmerge(1) は、バイトオーダーマーク（略称: BOM）の有無、またはシステムの現在のロケールに基づいて、この変換を自動的に行います。ロケールから文字セットを推定する方法は、mkvmerge(1) を実行しているオペレーティングシステムによって異なります。

## 8.2. バイトオーダーマーク (BOM)

BOM で始まるテキストファイルは、すでにいずれかの UTF 形式でエンコードされています。mkvmerge(1) は、UTF-8、UTF-16（リトルエンディアン / ビッグエンディアン）、UTF-32（リトルエンディアン / ビッグエンディアン）の計 5 つのモードをサポートしています。BOM 付きのテキストファイルは自動的に UTF-8 へ変換されます。その際、そのファイルに対して個別に文字セットを指定するパラメータ（--sub-charset など）が指定されていても、それらは無視されます。

## 8.3. Linux および macOS を含む Unix 系システム

Unix 系システムにおいて mkvmerge(1) は、setlocale(3) システムコールを使用します。これは環境変数 LANG, LC_ALL, LC_CTYPE を参照するものです。決定される文字セットは多くの場合 UTF-8 または ISO-8859-* ファミリーのいずれかであり、すべてのテキストファイル操作、コマンドライン文字列のエンコード、およびコンソールへの出力に使用されます。

## 8.4. Windows

Windows において、テキストファイルの変換に使用される既定の文字セットは、GetACP() システムコールの呼び出しによって決定されます。

Windows では、コマンドラインの読み取りに Unicode 文字列を返す GetCommandLineW() 関数を使用します。そのため、Windows では --command-line-charset オプションは無視されます。

コンソールへの出力については、以下の 3 つのシナリオがあります:

1. オプション --redirect-output で出力先を変更した場合、既定の文字コードは UTF-8 になります。これは --output-charset で変更可能です。

2. mkvinfo file.mkv > info.txt のように、cmd.exe 自体の機能で出力をリダイレクトする場合、文字コードは常に UTF-8 となり、変更することはできません。

3. それ以外の場合（コンソールに直接書き込む場合）は、Windows 関数 WriteConsoleW() が使用され、--output-charset オプションは無視されます。コンソールは、対応する言語サポートがインストールされているすべての Unicode 文字を出力できるはずです（例: 英語版 Windows では漢字が表示されない場合があります）。

## 8.5. コマンドラインオプション

文字セットを指定するためのオプションとして、以下のものが利用可能です:

- テキスト字幕ファイル、および文字セットを一意に特定できないコンテナ形式（Ogg ファイルなど）に格納されたテキスト字幕トラック用の --sub-charset,

- チャプターテキストファイル、および文字セットを一意に特定できないコンテナ形式（チャプター情報・トラック名・ファイルタイトルなどを含む Ogg ファイルや、チャプター情報を含む MP4 ファイルなど）に格納されたチャプターやファイルタイトル用の --chapter-charset,

- コマンドライン上のすべての文字列用の --command-line-charset,

- --output-charset は、コンソールまたはファイル（--redirect-output を使用した場合）に書き込まれるすべての文字列の文字コードを指定します。Windows 以外のシステムでは、既定値はシステムの現在の文字コードです。Windows では、--redirect-output によるリダイレクトと cmd.exe 自体によるリダイレクト（例: mkvinfo file.mkv > info.txt）の両方において、既定で UTF-8 が使用されます。

# 9. オプションファイル

オプションファイルは、mkvmerge(1) が追加のコマンドライン引数を読み込むためのファイルです。これは、コマンドラインの長さ制限など、外部プログラムを実行する際のシェルやオペレーティングシステムの制約を回避するために使用されます。

オプションファイルは JSON 形式のデータを含みます。その内容は、JSON 文字列のみで構成される有効な JSON 配列である必要があります。ファイルのエンコーディングは UTF-8 でなければなりません。ファイルはバイト順記号（BOM）で開始すべきではありませんが、存在する場合はスキップされます。

JSON 内部の特殊文字のエスケープ規則は、公式の JSON 仕様である RFC 7159 に準拠します。

オプションファイルの名前自体は、先頭に '@' 文字を付けたコマンドライン引数として指定する必要があります。

'コマンドライン 'mkvmerge -o "my file.mkv" -A "a movie.avi" sound.ogg' は、例えば 'options.json' という名前の以下のような JSON オプションファイルに変換できます:

    [
      "-o",
      "c:\\Matroska\\my file.mkv",
      "--title",
      "#65",
      "-A",
      "a movie.avi",
      "sound.ogg"
    ]

この場合、対応するコマンドは 'mkvmerge @options.json' となります。

# 10. ファイルリンク

Matroska(tm) はファイルリンク機能をサポートしています。これは、特定のファイルが現在のファイルの前方または後方に位置することを定義するものです。厳密には、リンクされるのはファイル自体ではなく Matroska(tm) セグメントです。ほとんどのファイルは Matroska(tm) セグメントを 1 つしか含まないため、本来は「セグメントリンク」と呼ぶのが適切ですが、以下の説明では「ファイルリンク」という用語を使用します。

各セグメントは、一意の 128 ビット幅のセグメント UID によって識別されます。この UID は mkvmerge(1) によって自動的に生成されます。リンク処理は主に、前後ファイルのセグメント UID（略称: SID）をセグメントヘッダー情報に書き込むことで行われます。mkvinfo(1) は、これらの SID を検出した場合にその内容を表示します。

ファイルを複数に分割する際にファイルリンクを使用すると、タイムスタンプは 0 に戻らず、直前のファイルが終了した時点から継続されます。これにより、（ストリーミング時など）前のファイルが利用できない状況でも絶対時間が保持されます。リンクを使用しない場合、各ファイルのタイムスタンプは 0 から開始されます。既定では mkvmerge(1) はファイルリンクを使用しません。リンクを有効にするには --link オプションを使用しますが、このオプションは分割機能が有効な場合にのみ機能します。

分割機能の有効・無効にかかわらず、生成されたファイルを特定の SID にリンクさせるよう mkvmerge(1) に指示できます。これには --link-to-previous および --link-to-next オプションを使用します。これらのオプションには、mkvinfo(1) が出力する形式（'0x' を冠した 0x00 から 0xff までの 16 進数 16 個、例: '0x41 0xda 0x73 0x66 0xd9 0xcf 0xb2 0x1e 0xae 0x78 0xeb 0xb4 0x5e 0xca 0xb3 0x93'）でセグメント SID を指定します。あるいは、'0x' プレフィックスとスペースを除いた短縮形式（例: '41da7366d9cfb21eae78ebb45ecab393'）も使用可能です。

分割機能を使用する場合、最初のファイルは --link-to-previous で指定した SID にリンクされ、最後のファイルは --link-to-next で指定した SID にリンクされます。分割を使用しない場合は、出力された 1 つのファイルが両方の SID にリンクされます。

# 11. 既定値

値が既定値と等しい場合、容量を節約するためにその値は書き込まれません。そのため、mkvinfo(1) の出力において language（言語）や default track flag（既定のトラックフラグ）要素を見落とす可能性があります。 language の既定値は英語（'eng'）であり、 default track flag の既定値は true です。したがって、あるトラックに対して --language 0:eng を指定したとしても、それは mkvinfo(1) の出力には表示されません。

# 12. 添付ファイル

Matroska(tm) ファイルと一緒に写真を保存したい場合や、 SSA 字幕を使用しており、非常に珍しい TrueType(tm) フォントが必要な場合があるかもしれません。そのような状況では、それらのファイルを Matroska(tm) ファイルに添付できます。これらは単にファイルの末尾に追加されるのではなく、ファイル内部に埋め込まれます。再生プレイヤーは、これらのファイルを表示したり（写真の場合）、字幕のレンダリングに使用したり（ TrueType(tm) フォントの場合）することが可能です。

出力ファイルに写真と TrueType(tm) フォントを添付する例を以下に示します:

    $ 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(tm)ファイルが入力ファイルとして使われた場合、mkvmerge(1)はその添付ファイルを新しいファイルに複製します。添付ファイルの複製するか否かは，--attachments及び--no-attachmentsオプションを使って切り替えることができます。

# 13. チャプター

Matroska(tm)チャプタシステムは、OGMファイルで使用されていた従来のシステムより強力です。その仕様の全ては、Matroskaのウェブサイトに記されています。

mkvmerge(1)は2種類のチャプタファイルを入力としてサポートしています。一つ目は'シンプルチャプタファイル'と呼ばれるもので、OGM toolsが想定しているものと同じ形式です。二つ目はXMLベースのチャプタ形式で、Matroska(tm)のチャプタ機能の全てをサポートしています。

専用のチャプタファイルのほか，mkvmerge(1)は他のファイル形式（例: MP4, Ogg, Blu-ray，またはDVD）からチャプタを読み込むことも可能です。

## 13.1. シンプルチャプタ形式

この形式は、'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)は、各行のペアを一つのMatroska(tm) ChapterAtomに変換します。ChapterTrackNumberは設定されないため、全てのチャプタがファイル内の全てのトラックに適用されます。

このときに文章ファイルの文字コードが必要になります。mkvmerge(1)の文字コード変換については文章ファイルと文字コードのセクションを参照してください。

## 13.2. XMLチャプタ形式

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>

この形式では、シンプルチャプタ形式では不可能な、3つのことが可能です:

1. チャプタの終了タイムスタンプを指定できます,

2. ネストしたチャプタを作成できます,

3. 言語及び国を設定できます。

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)

## 13.3. Blu-rayからのチャプタ読み込み

mkvmerge(1)は暗号化されていないBlu-rayからチャプタを読み込むことができます。これを行うには、--chaptersパラメータを使用して、MPLSプレイリストのいずれかへのパスを指定します。

例: --chapters /srv/blurays/BigBuckBunny/BDMV/PLAYLIST/00001.mpls

## 13.4. DVDからのチャプタ読み込み

MKVToolNixがlibdvdread(tm)ライブラリを使用してコンパイルされている場合，mkvmerge(1)はDVDからチャプタを読み込むことができます。これを行うには，--chaptersパラメータにDVD上のフォルダまたはファイルのパスを指定します。DVDには複数のタイトルが含まれる場合があり，タイトルごとに固有のチャプタセットを持っているため，ファイル名引数の末尾にコロンと目的のタイトル番号を付け加えることができます。タイトル番号を省略した場合は，既定で 1 が使用されます。

例: --chapters /srv/dvds/BigBuckBunny/VIDEO_TS:2

## 13.5. 注意

mkvmerge(1)は出力ファイルを分割する際、チャプタも適切に処理します。つまり、分割された各ファイルはそのファイルに関係するチャプタのみを含み、タイムスタンプには適切なオフセットがかかります。

mkvmerge(1)は、--no-chaptersオプションで明示的に無効化されていなければ、Matroska(tm)原ファイルからチャプタを複製できます。全ての原ファイル（Matroska(tm)ファイル、Oggファイル、MP4ファイル、チャプタテキストファイル）から読み取られたチャプタは，通常は結合されず，別々のChapterEditionsが作成されます。チャプタの読み取り元が，同じ編次UIDを共有するMatroska(tm)あるいはXMLファイル郡であった場合のみ，チャプタは一つのChapterEditionに結合されます。そのような場合以外で結合を行いたい場合は、利用者はまず全ての原ファイルからmkvextract(1)でチャプタを抽出し、手動でXMLファイルを結合した後に多重化を行なわなければなりません。

# 14. タグ

## 14.1. はじめに

Matroska(tm)のタグシステムは他のコンテナのそれと似ており、KEY=VALUEのペアの集合です。しかし、Matroska(tm)ではこれらのタグを入れ子（ネスト）にすることができ、さらにKEYとVALUEの両方が独自の要素となります。サンプルファイルexample-tags-2.xmlに、このシステムの使用方法が示されています。

## 14.2. タグのスコープ

Matroska(tm)タグは自動的にはファイル全体に適用はされません。適用することもできますが、ファイルの異る部分々々に適用することもできます。一つ、もしくは複数のトラック、一つ、もしくは複数のチャプタ、さらにはその組み合わせにも適用することが可能です。Matroskaの仕様に、このことの詳細が記述されています。

重要なことは、タグはTargetsMatroska(tm)タグ要素によってトラック及びチャプタに紐付けられますが、この際に使用されるUIDはmkvmerge(1)が色々な所で使用するトラックIDではないということです。その代わりに，（Matroska(tm)以外のファイル形式から取得されたトラックの場合は）自動的に計算したUIDあるいは（トラックの原ファイルがMatroska(tm)ファイルの場合は）原ファイルから複製されたUIDが用いられます。そのため，mkvmerge(1)がファイルを読み込む前に，タグファイルで使用されるUIDを把握するのはかなり難しくなります。

mkvmerge(1)はMatroska(tm)ファイルに標識を追加する二つのオプションを認識します。--global-tagsと--tagsオプションです。この二つの違いは、前者の--global-tagsは、上述のTargets要素を全て取り除くことで、標識がファイル全体に適用されるようにします。後者の--tagsオプションは、mkvmerge(1)が of the --tagsに指定したTIDの示すトラックに対して自動的に計算したUIDを挿入します。

## 14.3. 例

あなたは、AVIから読み込まれる映像トラックにタグをつけたいと仮定しましょう。mkvmerge --identify file.aviを実行すると、映像トラックのトラックID(このIDをUIDと混同しないでください!)は0であると教えてくれます。よって、あなたは全てのTargets要素を記入しないタグファイルを作成し、mkvmerge(1)を以下のように実行します:

    $ mkvmerge -o file.mkv --tags 0:tags.xml file.avi

## 14.4. タグファイル形式

mkvmerge(1)はXMLベースのタグファイル形式をサポートします。この形式はMatroskaの仕様に非常に近いデザインになっています。MKVToolNixのバイナリ、及びソースディストリビューションはどちらも、既知のタグをただリストしただけの、実際のタグファイルのベースとして使用できるexample-tags-2.xmlというサンプルファイルを含んでいます。

基本的には、以下の様な構成です:

- 最も外側の要素は<Tags>でなければなりません。

- 一個の論理タグは<Tag>XMLタグの内部に包含されます。

- タグの中身の直前・直後のスペースは無視されます。

## 14.5. データタイプ

新しいMatroska(tm)タグシステムは、UTF-8文字列とバイナリの二つのデータタイプしか認識しません。前者はタグの名前と<String>要素に使用され、後者は<Binary>要素に使用されます。

バイナリデータは、そのままではXMLファイルに格納できません。mkvmerge(1)は二つのバイナリデータ格納方法に対応しています。XML要素の中身が「@」で始まる場合、そのあとの文字列をファイル名として解釈し，そのファイルの中身をMatroska(tm)要素に複製します。

もう一つの方法では、データはBase64エンコードされる必要があります。これは、バイナリデータをASCIIキャラクタの一部だけで表現するためのエンコードで、例えばEメールなどに使用されています。mkvextract(1)は、バイナリ要素をBase64エンコードされたデータとして出力します。

古いタグシステムは、公式のMatroska(tm)の仕様に示されているように、もっと多くのデータタイプを認識していました。mkvmerge(1)はもはやこのシステムをサポートしないので、それらのタイプについてはここでは説明しません。

## 14.6. XMLファイル形式で知られているタグ

以下にサポートされている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)

# 15. セグメント情報

区分情報を、Matroska(tm)ファイルの「区分情報」頭部欄にある特定の値として指定可能なXMLファイルに書き込みます。これらの値は全て他の命令行オプションを介しては設定できません。

他の「区分情報」頭部欄は命令行オプションを介して設定できますが、XMLファイルを介してはできません。例えば--titleや--timestamp-scaleオプションが該当します。

他にも命令行オプション経由でもXMLファイル経由でも設定できない要素があります。これらには以下のものが含まれます：DateUTC （別名"muxing date"）、MuxingApp、WritingApp、そしてDurationです。それらは常にmkvmerge(1)自身によって設定されます。

以下にサポートされているXMLタグ、そのデータタイプ、そして適切な場所では、その値の有効な範囲を挙げます：

    Info (母体)
      SegmentUID (バイナリ、妥当な範囲: 16バイト長)
      SegmentFilename (UTF-8文字列)
      PreviousSegmentUID (バイナリ、妥当な範囲: 16バイト長)
      PreviousSegmentFilename (UTF-8文字列)
      NextSegmentUID (バイナリ、妥当な範囲: 16バイト長)
      NextSegmentFilename (UTF-8文字列)
      SegmentFamily (バイナリ、妥当な範囲: 16バイト長)
      ChapterTranslate (母体)
        ChapterTranslateEditionUID (符号無し整数)
        ChapterTranslateCodec (符号無し整数)
        ChapterTranslateID (バイナリ)

# 16. Matroskaファイル割付け

Matroska(tm)ファイル割付けは非常に柔軟です。mkvmerge(1)はファイルを事前定義された方法で描画します。結果ファイルはこのようになります:

[EBML頭部] [区分 {高次送り出し#1} [区分情報] [トラック情報] {添付ファイル} {楽章} [群団 1] {群団 2} ... {群団 n} {演奏指令} {高次送り出し#2} {標識}]

波括弧でくくられた要素は省略可能で、コンテンツと指定されたオプションに依存します。いくつか注釈があります:

- 高次送り出し要素#1には，少数のレベル1要素（添付ファイル、チャプタ，キュー，タグ，高次送り出し要素#2）が，実際に存在する場合のみ含まれます。古い版次のmkvmerge(1)では、この高次送り出し要素に群団も挿入していました。そのため、十分な格納領域を確保するために不正確な推測をせざるえず，しばしば失敗していました。現在では、群団のみを高次送り出し要素#2に格納し，高次送り出し要素#1は高次送り出し要素#2を参照します。

- 添付ファイル、チャプタ、及びタグ要素はそれらが存在するときにのみ追加されます。

最小構成のMatroska(tm) ファイルはこのような構成になります:

[EBML head] [segment [segment information] [track information] [cluster 1]]

音声のみのファイルはこのようになるでしょう。

# 17. 外部タイムスタンプファイル

利用者は、特定のトラックのタイムスタンプを自分でmkvmerge(1)に指定することができます。これは可変こま速度映像を含むファイルを作成するときや、音声に無音を挿入するときに使用できます。この場合、こまはMatroska(tm)区画を作成する際の単位となります。映像では、これはちょうど1こまとなり、音声ではこれは各音声タイプの1パケットとなります。例えば、AC-3では、これは1536サンプルを含む1パケットとなります。

結合されたトラックに時刻印ファイルを指定する場合は、各結合されるトラックチェインの最初の部分にのみ指定してください。例えばv1.avi、v2.aviの二つのファイルを結合し、時刻印を使用したいときの命令行は次のようになります。

    $ mkvmerge ... --timestamps 0:my_timestamps.txt v1.avi +v2.avi

mkvmerge(1)は、4つの形式を認識します。最初の1行は常にバージョン番号を含みます。空行、空白のみを含む行、及び'#'で始まる行は無視されます。

## 17.1. タイムスタンプファイル形式 v1

この形式はバージョン行から始まります。2行目は既定こま速度を宣言します。残りの全ての行は、コンマで区切られた3つの数字を含みます。開始こま(0が最初のこまです)、終了こま、そしてこの範囲で適用されるこま速度です。FPSは、ドット'.'を小数点として持つ小数です。こま範囲は既定FPSが使用されるギャップを含むこともあります。例を下に示します。

    # timestamp format v1
    assume 27.930
    800,1000,25
    1500,1700,30

## 17.2. タイムスタンプファイル形式 v2

この形式では、各行は対応するこまの時刻印を含みます。この時刻印はミリ秒単位の精度で指定しなければなりません。小数を指定することができますが、小数でなくてもかまいません。最低でも、トラックに含まれるこま数と同数の時刻印行を含まなければなりません。このファイル内の時刻印は整列されていなければなりません。例えば、25fpsでは以下のようになります。

    # timestamp format v2
    0
    40
    80

## 17.3. タイムスタンプファイル形式 v3

この形式では、各行は秒単位の持続時間と、省略可能なこま速度を含みます。この二つは両方とも小数を指定できます。もし、こま速度が指定されない場合は既定の値が使用されます。音声では符号器に時刻印を計算させるべきです。このためには、こま速度として0.0を指定してください。また、'gap'キーワードの後に持続時間を指定して、無音を指定することもできます。音声ファイル用の例を示します。

    # timestamp format v3
    assume 0.0
    25.325
    7.530,38.236
    gap, 10.050
    2.000,38.236

## 17.4. タイムスタンプファイル形式 v4

この形式はv2形式と同一です。唯一の違いは、時刻印が整列されていなくてもいいという点です。この形式が使われることはほぼ無いでしょう。

# 18. 終了コード

mkvmerge(1)は下の3つの返り値を返します:

- 0 -- この返り値は多重化が正常に終了したことを示します。

- 1 -- この返り値は、一つ以上の警告が出力されましたが、抽出が続行されたことを意味します。警告は '警告:' という文字列を先頭につけて出力されます。出力ファイルが無事であるかどうかは、場合によります。出力ファイルを確認することを強く推奨します。

- 2 -- この返り値は、エラーが発生し、エラーメッセージを出力した後にmkvmerge(1)が処理を中断したことを示します。エラーメッセージは不正な命令行やファイルI/Oエラー、壊れたファイルなど様々です。

# 19. 環境変数

mkvmerge(1)はシステムのロケールを決める既定の変数（例：LANGやLC_*系）を使用します。追加の変数は以下の通りです：

Option | Description
--- | ---
MKVMERGE_DEBUG, MKVTOOLNIX_DEBUG とその短縮形 MTX_DEBUG | その内容は、あたかも--debugオプション経由で渡されたかのように扱われます。
MKVMERGE_ENGAGE, MKVTOOLNIX_ENGAGE とその短縮形 MTX_ENGAGE | その内容は、あたかも--engageオプション経由で渡されたかのように扱われます。

# 20. 関連項目

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

# 21. WWW

最新バージョンは常に MKVToolNix のホームページ から入手できます。