| MKVMERGE(1) | ユーザーコマンド | MKVMERGE(1) |
名前¶
mkvmerge - マルチメディアストリームを Matroska ファイルに結合(マルチプレクス)します
書式¶
mkvmerge [共通オプション] {-o 出力ファイル名} [オプション1] {入力ファイル1} [[オプション2] {入力ファイル2}] [@options-file.json]
説明¶
このプログラムは、複数のメディアファイルを入力として受け取り、それらのストリーム(すべて、または選択したもの)を結合して 1 つの Matroska ファイルを作成します。詳細は Matroska 公式サイト[1] を参照してください。
重要
コマンドラインオプションの順序は非常に重要です。このプログラムを初めて使用する場合は、 「オプションの順序」セクションを必ず読んでください。
共通オプション(Global options)¶
-v, --verbose
-q, --quiet
-o, --output ファイル名
-w, --webm
チャプターとタグについては、一部の要素のみが許可されます。仕様で許可されていない要素は、 mkvmerge(1) によって自動的に削除されます。
--title タイトル
--default-language 言語コード
デフォルトの言語コードは「und」(undetermined:未指定)です。
セグメント情報の処理(共通オプション)¶
--segmentinfo ファイル名.xml
詳細は、後述の 「セグメント情報 XML ファイル」セクションを参照してください。
--segment-uid SID1,SID2,...
SID が「=」で始まる場合、それ以降の文字列は Matroska ファイルの名前として解釈され、そのファイルから読み取られたセグメント UID が使用されます。
作成される各ファイルには 1 つのセグメントが含まれ、各セグメントには 1 つのセグメント UID が割り当てられます。作成されるセグメントの数よりも多くのセグメント UID が指定された場合、余分な UID は無視されます。指定された UID が作成されるセグメント数より少ない場合は、不足分に対してランダムな UID が生成されます。
チャプターおよびタグの処理(共通オプション)¶
--chapter-language 言語コード
このオプションは、単純なチャプターファイルだけでなく、チャプターは含まれているが言語情報が欠落しているソースファイル(MP4 や OGM ファイルなど)に対しても使用できます。
ここで設定した言語は、 --generate-chapters オプション でチャプターを自動生成する場合にも適用されます。
--chapter-charset 文字セット
この切替は楽章が特定のコンテナ種別(例: Ogg・OGMやMP4ファイル)から複製する際にも適用されます。詳細については後述の楽章についての節をご覧ください。
--chapter-sync d[,o[/p]]
o/p: タイムスタンプを o/p 倍に調整し、線形ドリフトを補正します。 p を省略した場合、デフォルト値は 1 です。 o と p にはどちらも浮動小数点数を指定可能です。
デフォルト設定: 手動同期補正なし(d = 0 かつ o/p = 1.0 と同等)。
このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--generate-chapters モード
このモードは、分割モードの「parts:」および「parts-frames:」でも機能します。これらのモードでは、追加された各タイムスタンプ範囲(開始タイムスタンプに「+」が付加されているもの)ごとにチャプターが生成されます。
注記
ファイルを新しく追加した際にmkvmerge(1)が感知できるように,映像または音声トラックが存在する必要があります。複数の映像トラックが混在していた場合,始めのトラックを使用します。それ以外の場合,始めの音声トラックを使用します。
例: --generate-chapters interval:45s
新規楽章の名前は--generate-chapters-name-templateオプションで制御します。言語は--chapter-languageで設定し,--generate-chaptersの後ろでなければなりません。
--generate-chapters-name-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;場所>」という形式で指定できます(例: <NUM:3>)。指定した数より場所が少ない場合は,番号をゼロ埋めして出力します。
<START:形式>によって開始する時刻表示の書式を制御できます。なにも指定されていない場合の既定の書式は「%H:%M:%S」です。有効な書式指定子は以下の通りです:
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 書式
このオプションが指定されない場合、デフォルトの書式は「%p - %t」(演奏者、スペース、ダッシュ、スペース、タイトル)となります。
書式を指定した場合、以下のメタ文字以外の文字はそのままコピーされ、メタ文字は次のように置換されます:
--chapters ファイル名
--global-tags ファイル名
全般的な出力制御(高度な共通オプション)¶
--track-order FID1:TID1,FID2:TID2,...
このオプションが指定されない場合、トラックはまず「種類」、次に「ソースファイルの順序」でソートされます。具体的にはビデオトラックが最初で、次にオーディオ、字幕と続き、その他のあまり使用されない種類のトラックが最後になります。
--cluster-length 指定
単位が指定されない場合、 mkvmerge(1) は各クラスターに最大 n 個のデータブロックを格納します。ブロック数の最大値は 65535 です。
数値に「ms」が付加されている場合、 mkvmerge(1) は各クラスターに最大 d ミリ秒分のデータを格納します。指定可能な最小値は 「100ms」、最大値は 「32000ms」です。
mkvmerge(1) のデフォルト設定では、 1 つのクラスターに最大 65535 個のデータブロック、または 5000 ミリ秒分のデータを格納します。
特定のフレームを探索するプログラムは、まずクラスターを直接シークし、その後にクラスター全体を読み込む必要があります。そのため、クラスターのサイズを大きくしすぎると、シークが不正確になったり低速になったりする可能性があります。
--clusters-in-meta-seek
--timestamp-scale 係数
通常、 mkvmerge(1) は 1000000 を使用します。これはタイムスタンプと期間が 1 ミリ秒(1ms)の精度を持つことを意味します。ビデオトラックを含まず、少なくとも 1 つのオーディオトラックを含むファイルの場合、 mkvmerge(1) はすべてのタイムスタンプと期間が 1 オーディオサンプル単位の精度になるよう、スケーリング係数を自動的に選択します。これによりオーバーヘッドは増加しますが、より正確なシークや抽出が可能になります。
特殊値 -1 を使用すると、ビデオトラックが存在する場合でも、サンプル単位の精度が適用されます。
--enable-durations
--no-cues
--no-date
--date タイムスタンプ
--disable-lacing
--disable-track-statistics-tags
このオプションを有効にすると、 mkvmerge(1) はこれらのタグの書き込みを行わず、同名の既存タグも変更しません。
--disable-language-ietf
--normalize-language-ietf モード
標準形式(canonical)では、より好ましい値が存在するすべてのサブタグがその値に置換されます。例えば、「zh-yue-jyutping」は「yue-jyutping」に、「fr-FX」は「fr-FR」に変換されます。
拡張言語サブタグ形式では、まず標準形式が作成されます。その後、拡張言語サブタグが存在するすべての主要言語が、その拡張言語サブタグと接頭辞の組み合わせに置換されます。これにより、例えば「yue-jyutping」は「zh-yue-jyutping」に戻されますが、「fr-FR」には影響しません(「fr」は拡張言語サブタグではないため)。
--stop-after-video-ends
ファイルの分割、リンク、追加、および連結(その他の共通オプション)¶
--split 指定
現在、 mkvmerge(1) は以下のモードをサポートしています:
構文: --split [size:]d[k|m|g]
例: --split size:700m または --split 150000000
パラメータdの後ろには'k'・'m'・'g'を付けて、単位がそれぞれKB・MB・GBであることを示すことができます。付けない場合はバイト単位になります。出力中のファイルがこの上限に達したら、次の新しいファイルへの出力が開始されます。
「size:」接頭辞は、互換性のために省略可能です。
構文: --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:」接頭辞は、互換性のために省略可能です。
構文: --split timestamps:A[,B[,C...]]
例: --split timestamps:00:45:00.000,01:20:00.250,6300s
パラメータA、B、C...は、期間を指定するのに用いる形式(上記参照)と同じ形式で指定しなければなりません。時刻印の一覧は読点で区切られます。入力流が現在の分割点に達すると次のファイルが作成され、この一覧から次の分割点が使用されます。
「timestamps:」接頭辞は省略できません。
構文: --split parts:開始1-終了1[,[+]開始2-終了2[,[+]開始3-終了3...]]
例:
「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 からソースファイルの終端までの内容が含まれます。
注記
注意: mkvmerge(1) はキーフレームの位置でのみ分割を決定します。これは各範囲の開始と終了の両方に適用されます。そのため、終了タイムスタンプが 2 つのキーフレームの間にある場合、 mkvmerge(1) はその終了タイムスタンプを過ぎても、次のキーフレームの直前までのフレームを出力し続けます。
構文: --split parts-frames:開始1-終了1[,[+]開始2-終了2[,[+]開始3-終了3...]]
例:
「parts-frames」モードは、指定したフレーム番号(またはフィールド番号)の範囲のみを保持し、それ以外を破棄するよう mkvmerge(1) に指示します。保持する範囲は parts-frames: キーワードの後にカンマ区切りで指定します。範囲は開始と終了の番号で構成され、番号は 1 から始まります。
開始番号を省略した場合、直前の範囲の終了番号がデフォルトとして使用されます。直前の範囲がない場合は、ファイルの先頭が使用されます(例 3 を参照)。
終了番号を省略した場合、ソースファイルの終端がデフォルトとして使用されます。これは、それ以降のすべての内容を保持することを意味します(例 3 を参照)。
通常、各範囲は個別のファイルに書き込まれますが、連続する範囲を同じファイルに書き込むように変更可能です。その場合は、開始番号の前に「+」を付加します。これにより新しいファイルを作成せず、前の範囲と同じファイルに追記されます。入力ファイル上の 2 つの範囲に隙間があっても、出力ファイル上では隙間がなくなるようタイムスタンプが調整されます。
注記
注意: mkvmerge(1) はキーフレームの位置でのみ分割を決定します。これは各範囲の開始と終了の両方に適用されます。そのため、終了フレーム番号が 2 つのキーフレームの間にある場合、 mkvmerge(1) はその番号を過ぎても、次のキーフレームの直前までのフレームを出力し続けます。
例 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.
注記
The numbers given with this argument are interpreted based on the number of Matroska blocks that are output. A single Matroska 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.
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.
注記
The numbers given with this argument are interpreted based on the number of Matroska blocks that are output. A single Matroska 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.
構文: --split chapters:all又は--split chapters:A[,B[,C...]]
例: --split chapters:5,8
A, B, C等のパラメータは正整数でなくてはなりません。番号は1始まりです。複数のチャプタ番号はコンマで区切られます。分割が行なわれるのは、指定された番号の各チャプタが開始するタイムスタンプと等しい又はより大きいタイムスタンプである最初のキーこまの直前です。0秒から開始するチャプタは分割されることなく、通知なしに破棄されます。
全てのチャプタ番号を手で入力する代わりに、allキーワードが使えます。
接頭辞「chapters:」は省略できません。
注記
The Matroska 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
SID が「=」で始まる場合、それ以降の文字列は Matroska ファイルの名前として解釈され、そのファイルから読み取られたセグメント UID が使用されます。
--link-to-next segment-UID
SID が「=」で始まる場合、それ以降の文字列は Matroska ファイルの名前として解釈され、そのファイルから読み取られたセグメント UID が使用されます。
--append-mode モード
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を持つ場合、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 ]
これはファイル名の間に「+」を記述するのと同等の構文です。したがって、以下の 2 つのコマンドは等価です:
$ mkvmerge -o full.mkv file1.mkv + file2.mkv $ mkvmerge -o full.mkv '[' file1.mkv file2.mkv ']'
=
'=' は次のファイル名の直前に置くことも可能です。したがって、次の 2 つのコマンドは等価になります:
$ mkvmerge -o full.mkv = file1.vob $ mkvmerge -o full.mkv =file1.vob
( file1 file2 )
これは、DVD の VOB ファイルや MPEG トランスポートストリーム等に対して使用できます。AVI や MP4 のように、各ファイルが独自のヘッダーセットを持つ「スタンドアローン」形式のファイルには使用できません。
ファイル名を括弧で囲むと、オプション = で説明した「同じベース名を持つ連番ファイルの自動検索」を無効にする効果もあります。したがって、以下の 2 つのコマンドラインは等価です:
$ 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,...
トラック ID の代わりに、ISO 639-2 言語コードを指定することも可能です。ただし、これはトラックに言語タグが含まれているソースファイルでのみ機能します。
デフォルト:この種類のすべてのトラックをコピーします。
ID の前に ! を付加すると、意味が反転します。すなわち、 ! の後にリストされた ID 以外のすべての該当種類のトラックをコピーします。
-d, --video-tracks [!]n,m,...
トラック ID の代わりに、ISO 639-2 言語コードを指定することも可能です。ただし、これはトラックに言語タグが含まれているソースファイルでのみ機能します。
ID の前に ! を付加すると、意味が反転します。すなわち、 ! の後にリストされた ID 以外のすべての該当種類のトラックをコピーします。
-s, --subtitle-tracks [!]n,m,...
トラック ID の代わりに、ISO 639-2 言語コードを指定することも可能です。ただし、これはトラックに言語タグが含まれているソースファイルでのみ機能します。
ID の前に ! を付加すると、意味が反転します。すなわち、 ! の後にリストされた ID 以外のすべての該当種類のトラックをコピーします。
-b, --button-tracks [!]n,m,...
トラック ID の代わりに、ISO 639-2 言語コードを指定することも可能です。ただし、これはトラックに言語タグが含まれているソースファイルでのみ機能します。
ID の前に ! を付加すると、意味が反転します。すなわち、 ! の後にリストされた ID 以外のすべての該当種類のトラックをコピーします。
--track-tags [!]n,m,...
ID の前に ! を付加すると、意味が反転します。すなわち、 ! の後にリストされた ID 以外のすべての要素をコピーします。
-m, --attachments [!]n[:all|first],m[:all|first],...
デフォルトでは、すべての添付ファイルがすべての出力ファイルにコピーされます。
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
この挙動は、MakeMKV ソフトウェアで作成された Matroska ファイルに対しては自動的に有効になります。その理由は、MakeMKV がランダムな UID を生成する代わりに、連番(1, 2, 3...)を UID として使用するためです。
-y, --sync TID:d[,o[/p]]
o/p: タイムスタンプを o/p 倍に調整し、線形ドリフトを補正します。 p を省略した場合、デフォルト値は 1 です。 o と p にはどちらも浮動小数点数を指定可能です。
デフォルト設定: 手動同期補正なし(d = 0 かつ o/p = 1.0 と同等)。
このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--cues TID:none|iframes|all
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]
再生中にユーザーが明示的にトラックを選択しなかった場合、プレーヤーは「デフォルトトラック」フラグが設定されているトラックの中から、ユーザーが好む言語などの設定を考慮して 1 つを選択する必要があります。
このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--track-enabled-flag TID[:bool]
「トラック有効」フラグが設定されているトラックのみが再生候補として考慮されるべきです。
このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--forced-display-flag TID[:bool]
このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--hearing-impaired-flag TID[:bool]
このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--visual-impaired-flag TID[:bool]
このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--text-descriptions-flag TID[:bool]
このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--original-flag TID[:bool]
このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--commentary-flag TID[:bool]
このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
--track-name TID:name
--language TID:language
このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
-t, --tags TID:file-name
--aac-is-sbr TID[:0|1]
ソースファイルが Matroska ファイルの場合、通常は CodecID によって SBR AAC を検知できます。しかし、 CodecID が間違っている場合には、このスイッチを使用して修正することができます。
もし mkvmerge(1) が AAC ファイルを誤って SBR と認識してしまった場合、トラック ID に ':0' を付加することで指定を解除できます。
--audio-emphasis TID:n|symbolic-name
--reduce-to-core TID
現在のところ、このオプションの影響を受けるのは DTS トラックのみです。 AC-3 コアが埋め込まれた TrueHD トラックの場合は、代わりに 2 つの独立したトラックとして表示され、ユーザーがどちらをコピーするか選択できます。 DTS の場合は、 HD 拡張部分が( TrueHD データとは異なり)単体でデコードできないため、このような仕組みは採用されていません。
--remove-dialog-normalization-gain TID
現在のところ、このオプションの影響を受けるのは AC-3 、 DTS 、 TrueHD トラックのみです。
--timestamps TID:file-name
--default-duration TID:x
既定のこま持続時間が強制設定されなかった場合、 mkvmerge(1) はコンテナ、または( AVC/H.264 や MPEG-2 などの特定のトラック形式では)エンコードされたビットストリームから、そのトラックの既定のこま持続時間を取得しようと試みます。
このオプションは、外部タイムスタンプファイルを使用せずに映像トラックの FPS を変更する目的でも使用できます。
--fix-bitstream-timing-information TID[:0|1]
注記
この機能は、現在のところ AVC/H.264 映像トラックに対してのみ実装されています。
--compression TID:n
圧縮形式 'mpeg4_p2' / 'mpeg4p2' は、「ヘッダー除去 (header removal)」と呼ばれる特殊な圧縮方法で、 MPEG-4 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-coefficients TID:n
有効な値とその意味は以下の通りです:
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
--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-subsample を TID:1,0 に設定する必要があります。
--chroma-siting TID:hori,vert
--color-range TID:n
--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
--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
このオプションは、1 つの入力ファイルに対して複数回使用でき、それぞれ異なるトラック ID を指定することで複数のトラックに適用できます。
その他のオプション¶
-i, --identify file-name
結果に使用される出力形式は、--identification-format オプションで変更できます。
-J file-name
-F, --identification-format format
この形式はプログラムによる解析を意図したものではありません。出力は mkvmerge(1) が使用する言語に翻訳されます (--ui-language も参照してください)。
mkvmerge-identification-output-schema-v20.json[3]
すべてのバージョンの JSON スキーマは、オンラインおよびリリースされたソースコードアーカイブの両方で入手可能です。
--probe-range-percentage percentage
トラックの存在を認識しているのに見付けられなかった場合は,このオプションを用いて探測の度合いを変更することができます。最低値10MBは組み込まれており変更することはできません。
--list-audio-emphasis
--list-languages
--list-stereo-modes
-l, --list-types
--priority priority
'lowest' を選択すると、プロセスの優先度が最低になるだけでなく、I/O 優先度もアイドル(idle)に設定されます。
--command-line-charset character-set
--output-charset 文字セット
-r, --redirect-output ファイル名
--no-bom
--flush-on-close
--ui-language コード
--abort-on-warnings
--deterministic seed
シード値には任意の文字列を指定でき、数値である必要はありません。
バイト単位での同一性は、以下の条件下においてのみ保証されます:
異なるバージョンの mkvmerge(1) や異なるコマンドラインオプションを使用した場合でも、結果としてバイト単位で同一なファイルが生成されることがありますが、それは保証されません。
--debug トピック
--engage 機能
--gui-mode
@オプションファイル.json
'--title' などのオプションの引数の先頭文字として @ 記号を使用したい場合は、2 つ目の @ 記号を付けてエスケープする必要があります。例:
$ mkvmerge -o midnight-s01e01.mkv --title @@midnight midnight-s01e01.mp4
--capabilities
-h, --help
-V, --version
使い方¶
各ファイルについて、利用者はmkvmerge(1)が取り出すべきトラックを選択できます。取り出されたトラックは、すべて-oで指定されたファイルに書き出されます。既知の(サポート済の)入力ファイル形式は-lオプションで取得できます。
重要
コマンドラインオプションの順序は非常に重要です。このプログラムを初めて使用する場合は、 「オプションの順序」セクションを必ず読んでください。
オプションの順序¶
一部のオプションでは、入力する順序が重要になります。オプションは大きく 2 つのカテゴリに分けられます:
オプションは左から右へと処理されます。同じスコープ内で同じオプションが複数回出現した場合、最後に出現したものが使用されます。したがって、以下の例ではタイトルは "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
例¶
たとえば、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 を起動して楽しむことができます。複数の音声トラック(あるいは映像トラック)がある場合は、'-vid' および '-aid' オプションを使用して、どのトラックを再生するかを mplayer に指示できます。これらは 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 などの Windows 用ソフトウェアを使用するか、transcode(1) のソースにある 'contrib/subrip' ディレクトリ内の 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 つの音声トラックがあり、それらの言語コードを設定したいとします。トラック 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
トラック ID¶
通常のトラック 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 は次のように割り当てられます:
トラックIDを使用するオプションの説明には、'TID'が含まれています。また、--audio-tracks、--video-tracks、--subtitle-tracks、--button-tracks及び--track-tagsオプションもトラックIDを使用します。
特殊なトラック ID¶
識別(identify)出力には現れない、特別な意味を持つ ID がいくつかあります。
特殊トラック ID '-1' はワイルドカードとして機能し、入力ファイルから読み込まれるすべてのトラックに指定したスイッチを適用します。
特殊トラック ID '-2' は、ソースファイル内のチャプターを参照します。現在、この特殊 ID を使用するのは --sync オプションのみです。--sync -2:... の代わりに --chapter-sync ... オプションを使用することもできます。
言語の取り扱い¶
Matroska は 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 で選択できます。
テキストファイルと文字セット変換¶
はじめに¶
Matroska ファイル内のすべてのテキストは UTF-8 でエンコードされます。そのため mkvmerge(1) は、読み込むすべてのテキストファイルやコマンドラインで指定されたテキストを、元の文字セットから UTF-8 へ変換する必要があります。逆に mkvmerge(1) の出力についても、--ui-language で英語以外の翻訳を使用している場合や Matroska ファイル由来のテキストを表示する場合などには、UTF-8 から元の文字セットへ変換して出力されます。
mkvmerge(1) は、バイトオーダーマーク(略称: BOM)の有無、またはシステムの現在のロケールに基づいて、この変換を自動的に行います。ロケールから文字セットを推定する方法は、mkvmerge(1) を実行しているオペレーティングシステムによって異なります。
バイトオーダーマーク (BOM)¶
BOM で始まるテキストファイルは、すでにいずれかの UTF 形式でエンコードされています。mkvmerge(1) は、UTF-8、UTF-16(リトルエンディアン / ビッグエンディアン)、UTF-32(リトルエンディアン / ビッグエンディアン)の計 5 つのモードをサポートしています。BOM 付きのテキストファイルは自動的に UTF-8 へ変換されます。その際、そのファイルに対して個別に文字セットを指定するパラメータ(--sub-charset など)が指定されていても、それらは無視されます。
Linux および macOS を含む Unix 系システム¶
Unix 系システムにおいて mkvmerge(1) は、setlocale(3) システムコールを使用します。これは環境変数 LANG, LC_ALL, LC_CTYPE を参照するものです。決定される文字セットは多くの場合 UTF-8 または ISO-8859-* ファミリーのいずれかであり、すべてのテキストファイル操作、コマンドライン文字列のエンコード、およびコンソールへの出力に使用されます。
Windows¶
Windows において、テキストファイルの変換に使用される既定の文字セットは、GetACP() システムコールの呼び出しによって決定されます。
Windows では、コマンドラインの読み取りに Unicode 文字列を返す GetCommandLineW() 関数を使用します。そのため、Windows では --command-line-charset オプションは無視されます。
コンソールへの出力については、以下の 3 つのシナリオがあります:
コマンドラインオプション¶
文字セットを指定するためのオプションとして、以下のものが利用可能です:
オプションファイル¶
オプションファイルは、mkvmerge(1) が追加のコマンドライン引数を読み込むためのファイルです。これは、コマンドラインの長さ制限など、外部プログラムを実行する際のシェルやオペレーティングシステムの制約を回避するために使用されます。
オプションファイルは JSON 形式のデータを含みます。その内容は、JSON 文字列のみで構成される有効な JSON 配列である必要があります。ファイルのエンコーディングは UTF-8 でなければなりません。ファイルはバイト順記号(BOM)で開始すべきではありませんが、存在する場合はスキップされます。
JSON 内部の特殊文字のエスケープ規則は、公式の JSON 仕様である RFC 7159[4] に準拠します。
オプションファイルの名前自体は、先頭に '@' 文字を付けたコマンドライン引数として指定する必要があります。
'コマンドライン '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' となります。
ファイルリンク¶
Matroska はファイルリンク機能をサポートしています。これは、特定のファイルが現在のファイルの前方または後方に位置することを定義するものです。厳密には、リンクされるのはファイル自体ではなく Matroska セグメントです。ほとんどのファイルは Matroska セグメントを 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 にリンクされます。
既定値¶
値が既定値と等しい場合、容量を節約するためにその値は書き込まれません。そのため、mkvinfo(1) の出力において language(言語)や default track flag(既定のトラックフラグ)要素を見落とす可能性があります。 language の既定値は英語('eng')であり、 default track flag の既定値は true です。したがって、あるトラックに対して --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のウェブサイト[5]に記されています。
mkvmerge(1)は2種類のチャプタファイルを入力としてサポートしています。一つ目は'シンプルチャプタファイル'と呼ばれるもので、OGM toolsが想定しているものと同じ形式です。二つ目は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)は、各行のペアを一つのMatroska ChapterAtomに変換します。ChapterTrackNumberは設定されないため、全てのチャプタがファイル内の全てのトラックに適用されます。
このときに文章ファイルの文字コードが必要になります。mkvmerge(1)の文字コード変換については文章ファイルと文字コードのセクションを参照してください。
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つのことが可能です:
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)
Blu-rayからのチャプタ読み込み¶
mkvmerge(1)は暗号化されていないBlu-rayからチャプタを読み込むことができます。これを行うには、--chaptersパラメータを使用して、MPLSプレイリストのいずれかへのパスを指定します。
例: --chapters /srv/blurays/BigBuckBunny/BDMV/PLAYLIST/00001.mpls
DVDからのチャプタ読み込み¶
MKVToolNixがlibdvdreadライブラリを使用してコンパイルされている場合,mkvmerge(1)はDVDからチャプタを読み込むことができます。これを行うには,--chaptersパラメータにDVD上のフォルダまたはファイルのパスを指定します。DVDには複数のタイトルが含まれる場合があり,タイトルごとに固有のチャプタセットを持っているため,ファイル名引数の末尾にコロンと目的のタイトル番号を付け加えることができます。タイトル番号を省略した場合は,既定で 1 が使用されます。
例: --chapters /srv/dvds/BigBuckBunny/VIDEO_TS:2
注意¶
mkvmerge(1)は出力ファイルを分割する際、チャプタも適切に処理します。つまり、分割された各ファイルはそのファイルに関係するチャプタのみを含み、タイムスタンプには適切なオフセットがかかります。
mkvmerge(1)は、--no-chaptersオプションで明示的に無効化されていなければ、Matroska原ファイルからチャプタを複製できます。全ての原ファイル(Matroskaファイル、Oggファイル、MP4ファイル、チャプタテキストファイル)から読み取られたチャプタは,通常は結合されず,別々のChapterEditionsが作成されます。チャプタの読み取り元が,同じ編次UIDを共有するMatroskaあるいはXMLファイル郡であった場合のみ,チャプタは一つのChapterEditionに結合されます。そのような場合以外で結合を行いたい場合は、利用者はまず全ての原ファイルからmkvextract(1)でチャプタを抽出し、手動でXMLファイルを結合した後に多重化を行なわなければなりません。
タグ¶
はじめに¶
Matroskaのタグシステムは他のコンテナのそれと似ており、KEY=VALUEのペアの集合です。しかし、Matroskaではこれらのタグを入れ子(ネスト)にすることができ、さらにKEYとVALUEの両方が独自の要素となります。サンプルファイルexample-tags-2.xmlに、このシステムの使用方法が示されています。
タグのスコープ¶
Matroskaタグは自動的にはファイル全体に適用はされません。適用することもできますが、ファイルの異る部分々々に適用することもできます。一つ、もしくは複数のトラック、一つ、もしくは複数のチャプタ、さらにはその組み合わせにも適用することが可能です。Matroskaの仕様[6]に、このことの詳細が記述されています。
重要なことは、タグはTargetsMatroskaタグ要素によってトラック及びチャプタに紐付けられますが、この際に使用されるUIDはmkvmerge(1)が色々な所で使用するトラックIDではないということです。その代わりに,(Matroska以外のファイル形式から取得されたトラックの場合は)自動的に計算したUIDあるいは(トラックの原ファイルがMatroskaファイルの場合は)原ファイルから複製されたUIDが用いられます。そのため,mkvmerge(1)がファイルを読み込む前に,タグファイルで使用されるUIDを把握するのはかなり難しくなります。
mkvmerge(1)はMatroskaファイルに標識を追加する二つのオプションを認識します。--global-tagsと--tagsオプションです。この二つの違いは、前者の--global-tagsは、上述のTargets要素を全て取り除くことで、標識がファイル全体に適用されるようにします。後者の--tagsオプションは、mkvmerge(1)が of the --tagsに指定したTIDの示すトラックに対して自動的に計算したUIDを挿入します。
例¶
あなたは、AVIから読み込まれる映像トラックにタグをつけたいと仮定しましょう。mkvmerge --identify file.aviを実行すると、映像トラックのトラックID(このIDをUIDと混同しないでください!)は0であると教えてくれます。よって、あなたは全てのTargets要素を記入しないタグファイルを作成し、mkvmerge(1)を以下のように実行します:
$ mkvmerge -o file.mkv --tags 0:tags.xml file.avi
タグファイル形式¶
mkvmerge(1)はXMLベースのタグファイル形式をサポートします。この形式はMatroskaの仕様[6]に非常に近いデザインになっています。MKVToolNixのバイナリ、及びソースディストリビューションはどちらも、既知のタグをただリストしただけの、実際のタグファイルのベースとして使用できるexample-tags-2.xmlというサンプルファイルを含んでいます。
基本的には、以下の様な構成です:
データタイプ¶
新しいMatroskaタグシステムは、UTF-8文字列とバイナリの二つのデータタイプしか認識しません。前者はタグの名前と<String>要素に使用され、後者は<Binary>要素に使用されます。
バイナリデータは、そのままではXMLファイルに格納できません。mkvmerge(1)は二つのバイナリデータ格納方法に対応しています。XML要素の中身が「@」で始まる場合、そのあとの文字列をファイル名として解釈し,そのファイルの中身をMatroska要素に複製します。
もう一つの方法では、データはBase64エンコードされる必要があります。これは、バイナリデータをASCIIキャラクタの一部だけで表現するためのエンコードで、例えばEメールなどに使用されています。mkvextract(1)は、バイナリ要素をBase64エンコードされたデータとして出力します。
古いタグシステムは、公式のMatroskaの仕様に示されているように、もっと多くのデータタイプを認識していました。mkvmerge(1)はもはやこのシステムをサポートしないので、それらのタイプについてはここでは説明しません。
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)
セグメント情報¶
区分情報を、Matroskaファイルの「区分情報」頭部欄にある特定の値として指定可能な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 (バイナリ)
MATROSKAファイル割付け¶
Matroskaファイル割付けは非常に柔軟です。mkvmerge(1)はファイルを事前定義された方法で描画します。結果ファイルはこのようになります:
[EBML頭部] [区分 {高次送り出し#1} [区分情報] [トラック情報] {添付ファイル} {楽章} [群団 1] {群団 2} ... {群団 n} {演奏指令} {高次送り出し#2} {標識}]
波括弧でくくられた要素は省略可能で、コンテンツと指定されたオプションに依存します。いくつか注釈があります:
最小構成のMatroska ファイルはこのような構成になります:
[EBML head] [segment [segment information] [track information] [cluster 1]]
音声のみのファイルはこのようになるでしょう。
外部タイムスタンプファイル¶
利用者は、特定のトラックのタイムスタンプを自分でmkvmerge(1)に指定することができます。これは可変こま速度映像を含むファイルを作成するときや、音声に無音を挿入するときに使用できます。この場合、こまはMatroska区画を作成する際の単位となります。映像では、これはちょうど1こまとなり、音声ではこれは各音声タイプの1パケットとなります。例えば、AC-3では、これは1536サンプルを含む1パケットとなります。
結合されたトラックに時刻印ファイルを指定する場合は、各結合されるトラックチェインの最初の部分にのみ指定してください。例えばv1.avi、v2.aviの二つのファイルを結合し、時刻印を使用したいときの命令行は次のようになります。
$ mkvmerge ... --timestamps 0:my_timestamps.txt v1.avi +v2.avi
mkvmerge(1)は、4つの形式を認識します。最初の1行は常にバージョン番号を含みます。空行、空白のみを含む行、及び'#'で始まる行は無視されます。
タイムスタンプファイル形式 v1¶
この形式はバージョン行から始まります。2行目は既定こま速度を宣言します。残りの全ての行は、コンマで区切られた3つの数字を含みます。開始こま(0が最初のこまです)、終了こま、そしてこの範囲で適用されるこま速度です。FPSは、ドット'.'を小数点として持つ小数です。こま範囲は既定FPSが使用されるギャップを含むこともあります。例を下に示します。
# timestamp format v1 assume 27.930 800,1000,25 1500,1700,30
タイムスタンプファイル形式 v2¶
この形式では、各行は対応するこまの時刻印を含みます。この時刻印はミリ秒単位の精度で指定しなければなりません。小数を指定することができますが、小数でなくてもかまいません。最低でも、トラックに含まれるこま数と同数の時刻印行を含まなければなりません。このファイル内の時刻印は整列されていなければなりません。例えば、25fpsでは以下のようになります。
# timestamp format v2 0 40 80
タイムスタンプファイル形式 v3¶
この形式では、各行は秒単位の持続時間と、省略可能なこま速度を含みます。この二つは両方とも小数を指定できます。もし、こま速度が指定されない場合は既定の値が使用されます。音声では符号器に時刻印を計算させるべきです。このためには、こま速度として0.0を指定してください。また、'gap'キーワードの後に持続時間を指定して、無音を指定することもできます。音声ファイル用の例を示します。
# timestamp format v3 assume 0.0 25.325 7.530,38.236 gap, 10.050 2.000,38.236
タイムスタンプファイル形式 v4¶
この形式はv2形式と同一です。唯一の違いは、時刻印が整列されていなくてもいいという点です。この形式が使われることはほぼ無いでしょう。
終了コード¶
mkvmerge(1)は下の3つの返り値を返します:
環境変数¶
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)
WWW¶
最新バージョンは常に MKVToolNix のホームページ[7] から入手できます。
著者¶
Bunkus Moritz[FAMILY Given] <moritz@bunkus.org>
注記¶
- 1.
- Matroska 公式サイト
- 2.
- IANAのホームページ
- 3.
- mkvmerge-identification-output-schema-v20.json
- 4.
- RFC 7159
- 5.
- Matroskaのウェブサイト
- 6.
- Matroskaの仕様
- 7.
- MKVToolNix のホームページ
| 2026-04-05 | MKVToolNix 98.0 |