mkvmerge — マルチメディアストリームをMatroska™ファイルに格納します。
このプログラムはいくつかのメディアファイルを入力とし、それらに格納されたストリームのうち全て、もしくは選択されたものをMatroska™ファイルに書き込みます。Matroska™のウェブサイトも参照してください。
グローバルオプション:
-v
, --verbose
より詳細な情報を表示します
-q
, --quiet
ステータス情報の出力を抑制します。
-o
, --output
file-name
file-name
で指定したファイルに書き込みます。もし、ファイル分割が有効な場合このオプションは若干解釈が違います。詳細は--split
オプションの説明を参照してください。
-w
, --webm
WebMの規格に準拠したファイルを作成します。mkvmergeは出力ファイル名の拡張子が"webm"であった場合にもこれをオンにします。このモードではいくつかの制限が実施されます。使用できるコーデックはVP8ビデオとVorbisオーディオのトラックのみです。チャプタとタグは使用することができません。DocTypeヘッダアイテムは"webm"へと変更されます。
--title
title
出力ファイル全体のタイトルを指定します(例:映画のタイトルなど)。
--tags
file-name
file-name
で指定したXMLファイルからグローバルタグを読み込みます。詳細はタグについてのセクションを参照してください。
--default-language
language-code
デフォルトの言語コードを指定します。--language
オプションで指定しなかったトラックはすべてここで指定した言語コードになります。デフォルトは'und
'、つまり'未定義'です。
セグメント情報の扱い: (グローバルオプション)
--segmentinfo
filename.xml
XMLファイルからセグメント情報を読み取ります。このファイルは、セグメントファミリUID、セグメントUID、前、及び、後セグメントUIDエレメントを含むことができます。MKVToolNixは、サンプルファイルとDTDを含んで配布されています。
--segment-uid
SID1,SID2,...
使用するセグメントUIDを設定します。これはコンマで区切られた、通常のUID形式("0x"を前置する、またはしない、空白を含む、または含まない、ちょうど32桁の16進数)128ビットセグメントUIDのリストです。
作成される各ファイルは一つのセグメントを含み、そして各セグメントは一つのセグメントUIDを持ちます。もし、作成されたセグメントよりも多数のセグメントUIDが指定された場合、余ったセグメントUIDは無視されます。また、もし指定されたセグメントUIDよりも多数のセグメントが作成された場合は、ランダムなUIDが作成されて使用されます。
チャプタ及びタグの扱い: (グローバルオプション)
--chapter-language
language-code
各チャプタのエントリに書き込むISO639-2言語コードを指定します。デフォルトは'eng
'です。詳細はチャプタのセクションを参照してください。
このオプションはシンプルチャプタファイルを読み込んだ場合、そしてソースファイルがチャプタを含むがチャプタの言語情報を含まなかった場合(例:MP4,OGMファイル)に適用されます。
--chapter-charset
character-set
シンプルチャプタファイルをUTF-8に変換する際の文字コードを指定します。mkvmerge(1)の文字コード変換については、テキストファイルと文字コードのセクションを参照してください。
このスイッチはチャプタがOgg,OGMファイルなどのコンテナからコピーされる際にも適用されます。詳細については後述のチャプタについてのセクションを参照してください。
--cue-chapter-name-format
format
mkvmerge(1)は音声ファイル向けのCUEシートからチャプタ情報を読み込むことができます。CUEシートには通常PERFORMER
エントリ及びTITLE
エントリが各インデックスエントリに存在します。mkvmerge(1)はこれら二つの文字列をチャプタの名前を生成するのに使用します。このフォーマットをこのオプションで指定することができます。
このオプションが指定されていない場合、デフォルトで'%p - %t
'というフォーマットが使用されます。
フォーマットが指定された場合、下のメタ文字以外はそのままコピーされ、メタ文字は以下のように置換されます。
%p
はそのエントリのPERFORMER
文字列で置換されます。
%t
はそのエントリのTITLE
文字列で置換されます。
%n
はそのエントリのトラック番号で置換されます。
%N
は、そのエントリのトラック番号が10未満の場合0を前置して二桁にした数字で置換されます。
--chapters
file-name
チャプタ情報をfile-name
で指定したファイルから読み込みます。詳細はチャプタのセクションを参照してください。
--global-tags
file-name
file-name
で指定したファイルからグローバルタグを読み込みます。詳細はタグのセクションを参照してください。
出力一般のコントロール(グローバルオプションの続き):
--track-order
FID1:TID1,FID2:TID2,...
このオプションは入力されたトラックが配置される順序を変更します。オプション引数はコンマで区切られるIDペアのリストです。各ペアは最初を0としてコマンドラインの何番目に指定したファイルであるかを示すファイルID(FID1
)と、そのファイルの中の何番目のトラックかを示すトラックID(TID1
)からなります。ここで指定されなかったトラックは、指定されたトラックの後に配置されます。
--cluster-length
spec
クラスタごとの、データブロック個数の上限または持続時間を指定します。spec
パラメータには単位なしの数字n
もしくは、'ms
'を後ろに付けた数字d
を指定することができます。
単位が指定されなかった場合、クラスタごとのデータブロックの最大個数はn
に設定されます。上限は65535です。
数字d
に'ms
'が後置されていた場合、mkvmerge(1)は各データクラスタ毎に最大でもd
ミリ秒分のデータしか格納しません。d
の最小値は'100ms
'、最大値は'32000ms
'です。
デフォルトは、データクラスタ毎に65535データブロック以下、5000ms以下のデータを書き込みます。
プログラムがあるフレームを見つけようとするときは、クラスタに直接シークして、その後クラスタ全体を読み込みます。よって、より大きなクラスタを作ると、シークが不正確かつ遅くなるかもしれません。
--no-cues
キューデータ(AVIファイルにおけるインデックスのようなもの)を作成しません。キューデータなしでもファイルは再生できますが、シークは不正確かつ遅くなるでしょう。このオプションは、少しでもファイルサイズを小さくしようと必死なとき、またはテスト目的以外には使用しないでください。--cues
オプションは各入力ファイルごとに指定できます。
--clusters-in-meta-seek
ファイルの終端に全てのクラスタを含むメタシーク要素を作成します。Matroska™ファイルレイアウトのセクションも参照してください。
--disable-lacing
全てのトラックで複数のフレームを1つのブロックにまとめません。これは特に多数のオーディオトラックがある場合に、ファイルサイズを増大させます。テスト目的でのみ使用してください。
--enable-durations
全てのブロックの長さを記録します。これはファイルサイズを増大させますが、現在のところプレーヤには何のメリットももたらしません。
--timecode-scale
factor
タイムコードスケールの係数をfactor
に強制設定します。この値は1000~10000000、もしくは-1に設定しなければなりません。
通常mkvmerge(1)は1000000
を使用します。これはタイムコードとフレーム持続期間が1ミリ秒単位の精度を持つことを意味します。ビデオトラックを含まず、1つ以上のオーディオトラックを含むファイルでは、mkvmerge(1)は全てのタイムコードとフレーム持続時間がサンプリング音1つ分の精度を持つようタイムコードスケールの係数を自動的に選択します。これによってオーバーヘッドは大きくなりますが、正確なシークと展開が可能になります。
特殊な値-1
が指定された場合、たとえビデオトラックが存在していてもサンプリング音の精度を使用します。
ファイルの分割と紐付け(グローバルオプションの続き):
--split
specification
出力ファイルを指定したサイズ、又は時間で分割します。トラックはキーフレームの直後でしか分割できないことに注意してください。mkvmerge(1)はバッファリングを行うため、ファイルは分割すべき点の次にくるキーフレームの直前で分割されます。よって、分割点はユーザが指定した点よりも若干後ろになります。
現時点では、mkvmerge(1)は三つのモードをサポートしています。
指定サイズで分割します。
書式: --split
[size:]d
[k|m|g]
例: --split size:700m
or --split 150000000
パラメータd
の後ろには'k
'・'m
'・'g
'を付けて、単位がそれぞれKB・MB・GBであることを示すことができます。付けない場合はバイト単位になります。出力中のファイルがこの上限に達したら、次の新しいファイルへの出力が開始されます。
'size:
'という接頭辞は、互換性のために省略できるようになっています。
指定時間で分割します。
書式: --split
[duration:]HH:MM:SS.nnnnnnnnn
|d
s
例: --split duration:00:60:00.000
or --split 3600s
パラメータはHH:MM:SS.nnnnnnnnn
という形式でナノ秒精度で長さを指定するか、数字d
のあとに's
'と書いて秒数で長さを指定しなければなりません。HH
は時間、MM
は分、SS
は秒数でnnnnnnnnn
ナノ秒を示します。時間及びナノ秒は省略できます。小数点の後ろには9桁までの数字を指定できます。指定した長さだけ出力されたら、次のファイルへの出力が開始されます。
'duration:
'という接頭辞は、互換性のために省略できるようになっています。
指定した各タイムコードで分割します。
書式: --split
timecodes:A
[,B
[,C
...]]
例: --split timecodes:00:45:00.000,01:20:00.250,6300s
パラメータA
、B
、C
…は、durationで使用されるものと同じフォーマットで指定しなければなりません(上記参照)。タイムコードのリストはコンマで区切られます。入力ストリームが現在の分割点に達すると次のファイルが作成され、このリストから次の分割点が使用されます。
'timecodes:
'という接頭辞は、互換性のために省略できるようになっています。
この分割モードでは、出力ファイル名は通常の操作とは異る扱いを受けます。このモードでは出力ファイル名はprintf
のように'%d
'というパターンを含むことができます。'%02d
'のように幅指定を追加することもできます。出力ファイル名がこのパターンを含む場合、ファイル番号が適切なフォーマットで指定された位置に挿入されます。含まない場合、'-%03d
'というパターンがファイルの拡張子の直前に指定されたものとみなされ、例えば'-o
output.mkv
'を指定した場合、'output-001.mkv
'等のファイル名に出力されます。拡張子が存在しない場合、'-%03d
'はファイル名の末尾に追加されます。
--link
分割された出力ファイルを相互に紐付けします。詳細はファイル紐付けのセクションを参照してください。
--link-to-previous
segment-UID
最初の出力ファイルをsegment-UID
で指定したセグメントUIDに紐付けします。詳細はファイル紐付けのセクションを参照してください。
--link-to-next
segment-UID
最後の出力ファイルをsegment-UID
で指定したセグメントUIDに紐付けします。詳細はファイル紐付けのセクションを参照してください。
--append-mode
mode
ファイルを結合する際に、タイムコードがどのように計算されるかを決定します。パラメータmode
は'file
'(デフォルト)、'track
の二つの値を取り得ます。
mkvmergeが二つめのファイル(以後'file2
'と呼ぶ)のトラック(以後'track2_1
'と呼ぶ)を、一つめのファイル(以後'file1
'と呼ぶ)のトラック(以後'track1_1
'と呼ぶ)と結合する際、'track2_1
'のタイムコードは一定量だけずらす必要があります。'file
'モードでは、ずらす量は'file1
'の中の'track1_1
'以外のトラックを含む全てのトラックの中で一番大きいタイムコードの値になります。'track
'モードでは、'track1_1
'の中で一番大きいタイムコードの値になります。
残念ながら、mkvmergeはどちらのモードが適切であるか判断はできません。デフォルトは'file
'モードになっています。'file
'モードは独立に作られたファイル同士を結合する際、例えばAVI又はMP4ファイルを結合する際に、通常はより上手く働きます。'tracks
'モードは、例えば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のようにして簡単に結合することができます。
+
'+'一文字を指定すると、次に指定されたファイルは追加ではなく結合されます。'+'は次のファイル名の直前に置くこともできます。よって、次の二つのコマンドは等価です。
$ mkvmerge -o full.mkv file1.mkv + file2.mkv $ mkvmerge -o full.mkv file1.mkv +file2.mkv
添付ファイルのサポート(グローバルオプションの続き):
--attachment-description
description
次の添付ファイルを説明するプレーンテキストを指定します。次の--attach-file
オプション又は--attach-file-once
オプションで指定した添付ファイルに適用されます。
--attachment-mime-type
MIME type
次の添付ファイルのMIMEタイプを指定します。--attach-file
及び--attach-file-once
オプションに適用されます。公式に認知されているMIMEタイプは例えばIANAのホームページに掲載されています。MIMEタイプは添付ファイルに必須です。
--attachment-name
name
この添付ファイルの、出力ファイル内での名前を指定します。このオプションが指定されなかった場合、--attach-file
または--attach-file-once
で指定されたファイル名がそのまま使用されます。
--attach-file
file-name
,
--attach-file-once
file-name
Matroska™ファイルの内部に添付ファイルを作成します。これらのオプションを使用するには、MIMEタイプをこれらのオプションより前に指定しなければなりません。二つのオプションの違いは、出力ファイルを分割する際に、--attach-file
では全ての出力ファイルに添付されますが、--attach-file-once
では最初に作成されたファイルにしか添付されない点です。分割が使用されない場合、二つは等価です。
mkvextract(1)でMatroska™ファイルから添付ファイルを抽出することができます。
各入力ファイルに指定できるオプション:
-a
, --audio-tracks
n,m,...
オーディオトラックn
、m
…をコピーします。番号は--identify
オプションで得られるトラックIDです。これは単純にトラック番号を示すものではありません(トラックIDのセクションを参照してください)。デフォルト:
全てのオーディオトラックをコピーします。
-d
, --video-tracks
n,m,...
ビデオトラックn
、m
…をコピーします。数字は--identify
オプションで得られるトラックIDです。これは単純にトラック番号を示すものではありません(トラックIDのセクションを参照してください)。 デフォルト:
全てのビデオトラックをコピーします。
-s
, --subtitle-tracks
n,m,...
字幕トラックn
、m
…をコピーします。番号は--identify
オプションで得られるトラックIDです。これは単純にトラック番号を示すものではありません(トラックIDのセクションを参照してください)。デフォルト:
全ての字幕トラックをコピーします。
-b
, --button-tracks
n,m,...
ボタントラックn
、m
…をコピーします。番号は--identify
オプションで得られるトラックIDです。これは単純にトラック番号を示すものではありません(トラックIDのセクションを参照してください)。デフォルト:
全てのボタントラックをコピーします。
--track-tags
n,m,...
トラックn
、m
…のタグをコピーします。番号は--identify
オプションで得られるトラックIDです。これは単純にトラック番号を示すものではありません(トラックIDのセクションを参照してください)。デフォルト:
全てのトラックのタグをコピーします。
-m
, --attachments
n[:all|first],m[:all|first],...
IDがn
、m
…の添付ファイルを全ての、または最初の出力ファイルにコピーします。各IDの後ろには、':all
'(デフォルト)又は':first
'を指定することができます。出力ファイル分割が有効の場合、':all
'をつけたIDの添付ファイルは全ての出力ファイルにコピーされ、':first
'をつけた場合は最初の出力ファイルにのみコピーされます。分割が有効でない場合は二つは同等です。
デフォルトでは、全ての添付ファイルが全ての出力ファイルにコピーされます。
-A
, --no-audio
このファイルからオーディオトラックをコピーしません。
-D
, --no-video
このファイルからビデオトラックをコピーしません。
-S
, --no-subtitles
このファイルから字幕トラックをコピーしません。
-B
, --no-buttons
このファイルからボタントラックをコピーしません。
-T
, --no-track-tags
このファイルからオーディオトラックをコピーしません。
--no-chapters
このファイルからチャプタをコピーしません。
-M
, --no-attachments
このファイルから添付ファイルをコピーしません。
--no-global-tags
このファイルからグローバルタグを引き継ぎません。
--chapter-charset
character-set
ソースファイルに含まれるチャプタ情報ををUTF-8に変換する際の文字コードを指定します。mkvmerge(1)の文字コード変換については、テキストファイルと文字コードのセクションを参照してください。
--chapter-language
language-code
各チャプタエントリのISO639-2言語コードを指定します。このオプションはソースファイルがチャプタは含みますが、チャプタの言語情報を含まない場合(例:MP4、OGMファイル)に使用されます。
-y
, --sync
TID:d[,o[/p]]
トラックIDがTID
のトラックのタイムコードをd
ミリ秒だけ調整します。トラックIDは--identify
オプションで得られるものと同じです(トラックIDのセクションを参照してください)。
o
/p
:
タイムスタンプをo
/p
の割合で調整し、リニアドリフトを修正します。p
が省略された場合、デフォルトで1が使用されます。o
及びp
には小数を指定できます。
デフォルト: マニュアル同期修正は行われません(d
= 0
かつo
= 1.0
の場合と同じです)。
このオプションは異るトラックIDを指定することで複数の入力トラックに対して使用することができます。
--cues
TID:none|iframes|all
指定されたトラックについて、どのトラックCUE(インデックス)エントリが作成されるのかを指定します(トラックIDのセクションを参照)。'none
'はCUEエントリを作成しません。'iframes
は前方参照及び後方参照を含まないブロック(ビデオトラックでは
I
frame)のみがCUEシートに挿入されます。'all
'ではmkvmerge(1)は全てのブロックに対してCUEエントリを作成し、非常に大きなファイルを出力するでしょう。
デフォルトはビデオトラックは'iframes
で、その他のトラックは'none
'です。--cues
が使用されているかどうかに関わらずCUEエントリの作成を抑制する、--no-cues
オプションも参照してください。
このオプションは異るトラックIDを指定することで複数の入力トラックに対して使用することができます。
--default-track
TID[:bool]
省略可能な引数bool
が指定されなかった場合、指定されたトラックに'デフォルト'フラグを付与します(トラックIDのセクションも参照)。ユーザが明示的にトラックを選択しなかった場合、プレイヤーは'デフォルト'フラグの付いたトラックを優先的に再生します。各トラックの種類(オーディオ、ビデオ、字幕、ボタン)ごとに、一つだけのトラックにだけ'デフォルト'フラグは付与できます。もし、デフォルトフラグをどのトラックにも付けたくない場合は、全てのトラックでbool
を0
にすれば可能です。
このオプションは異るトラックIDを指定することで複数の入力トラックに対して使用することができます。
--forced-track
TID[:bool]
省略可能な引数bool
が指定されなかった場合、指定されたトラックに'強制表示'フラグを付与します(トラックIDのセクションも参照。)プレーヤはこのフラグが1
に設定されている全てのトラックを再生しなければなりません。
このオプションは異るトラックIDを指定することで複数の入力トラックに対して使用することができます。
--blockadd
TID:level
指定したトラックで、レベルlevel
までのBlockAddition
を保持します。デフォルトでは全て保持します。このオプションはWAVPACK4などの特定のコーデックにのみ有効です。
--track-name
TID:name
指定したトラックのトラック名をname
にします(トラックIDのセクションも参照)。
--language
TID:language
指定したトラックの言語を設定します(トラックIDのセクションも参照)。ISO639-2 言語コード及び
ISO639-1 国別コードが使用できます。国別コードは言語コードへ自動的に変換されます。ISO639-2 に含まれる全てのコードは--list-languages
オプションで一覧できます。
このオプションは異るトラックIDを指定することで複数の入力トラックに対して使用することができます。
-t
, --tags
TID:file-name
file-name
で指定したファイルからグローバルタグを読み込みます。詳細はタグのセクションを参照してください。
--aac-is-sbr
TID[:0|1]
mkvmerge(1)にIDがTID
のトラックがSBR AAC
(別名HE-AAC又はAAC+)であることを教えます。このオプションは、 a)
ソースファイルが(Matroska™ファイルではなく)AACファイルでありかつ
b) AACファイルがSBR
AACデータを含む場合に必要です。このスイッチが存在する理由は、通常のAACファイルとSBR
AACファイルを自動的に区別することは、AACフレームを完全にデコードしなければ技術的に不可能であるためです。AACはいくつかの特許問題を抱えているため、mkvmerge(1)は将来的にもこのデコードステージを含むことはありません。よって、SBR
AACにはこのスイッチが必須となります。このスイッチが指定されなかった場合、出力ファイルは正常に再生ができなくなるか、完全に再生不能になるでしょう。
ソースファイルがMatroska™ファイルの場合、CodecID
によりSBR
AACを検知できます。しかし、CodecID
が不正な場合、このスイッチで修正することができます。
もし、mkvmergeがAACファイルを間違ってSBRと認識してしまった場合、トラックIDに':0
'を指定できます。
--timecodes
TID:file-name
指定したトラックIDのタイムコードを、file-name
から読み込みます。これらのタイムコードはmkvmerge(1)が通常計算するタイムコードを強制的に上書きします。外部タイムコードファイルのセクションを参照してください。
--default-duration
TID:x
指定したトラックの default duration を強制的に設定します。トラックのタイムコードも、 default duration
に合うように変更されます。引数x
は's
'、'ms
'、'us
'、'ns
'、'fps
'のうちどれか一つを後置されていなければなりません。それぞれ、
default duration
は秒、ミリ秒、マイクロ秒、ナノ秒、'fps'単位で指定されます。x
は小数または分数で指定できます。
default duration が強制的に指定されない場合、mkvmergeはトラックの default duration
をコンテナ又は使用されているコーデックから取得して使用します。このオプションの使用例の一つとして、AVC/h.264エレメンタリストリームを追加する場合があげられます。なぜなら、これは、フレーム数やフレーム毎の
default duration の情報を格納していないためです。このようなファイルに対しては、指定されないかぎりmkvmerge(1)は default
duration を'25fps
'と仮定します。
このオプションは、外部タイムコードファイルを使用せずにビデオトラックのFPSを変更するのにも使えます。
--nalu-size-length
TID:n
NALUサイズ長をn
バイトに強制設定します。このパラメータはAVC/h.264エレメンタリストリームパケタイザが使用される場合にのみ使用されます。何も指定しなかった時のデフォルト値は4バイトですが、65535バイト以上のフレームやスライスが含まれていないファイルも存在します。そのようなファイルでは、このパラメータを使用してNALUサイズ長を2に減らすことができます。
ビデオトラックにのみ適用されるオプション:
-f
, --fourcc
TID:FourCC
FourCC
を指定した値に強制設定します。ビデオトラックが'MS互換モード'である場合にのみ有効です。
--display-dimensions
TID:widthxheight
Matroska™ファイルは再生時の画像スケールを決定するための二つの値を持ちます。表示幅と表示高さです。これらの値をこのオプションで、例えば'1:640x480
'のように指定できます。
これらの値を設定する別の方法として、--aspect-ratio
又は--aspect-ratio-factor
オプションが使用できます(下記参照)。これらのオプションは互いに排他的です。
--aspect-ratio
TID:ratio|width/height
Matroska™ファイルは再生時の画像スケールを決定するための二つの値を持ちます。表示幅と表示高さです。これらの値をこのオプションで、例えば'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
ビデオトラックのピクセルクロッピングのパラメータを指定した値に設定します。
--stereo-mode
TID:n|keyword
トラックIDがTID
のビデオトラックのステレオモードを設定します。モードは0
から3
までの数字n
、又は'none
'(n
=0
と同等)、'right
'(n
=1
と同等)、'left
'(n
=2
と同等)、及び'both
'(n
=3
と同等)のうちのどれかをkeyword
として指定しなければなりません。
--compression
TID:method
VobSubトラックの圧縮法を選択します。プレイヤーが選択した圧縮法をサポートしている必要があることに注意してください。指定できる圧縮法は、'none
'、'zlib
'、'lzo
'/'lxo1x
'、'bz2
'/'bzlib
'及び'mpeg4_p2
'/'mpeg4p2
'です。'lzo
'/'lxo1x
'と'bz2
'/'bzlib
'はmkvmerge(1)がそれぞれ、liblzo™及びbzlib™圧縮ライブラリのサポート付きでコンパイルされたときのみ使用できます。
'mpeg4_p2
'/'mpeg4p2
'圧縮法は、'header
removal'と呼ばれる特殊な圧縮法で、MPEG4 part2
ビデオトラックにのみ適用できます。それ以外の圧縮法は一般的な圧縮法で、どんな種類のトラックに適用できます。
デフォルトは'zlib
'圧縮法です。この圧縮法はほとんど全ての再生アプリケーションでサポートされています。'none
'以外の他の圧縮法については、サポートされているとは限りません。
テキスト字幕トラックにのみ適用されるオプション:
--sub-charset
TID:character-set
指定したIDの示すトラックのUTF-8字幕をUTF-8へ変換する際の文字コードを指定します。デフォルトでは、現在のロケールの設定が使用されます。mkvmerge(1)の文字コード変換については、テキストファイルと文字コードのセクションを参照してください。
このオプションは異るトラックIDを指定することで複数の入力トラックに対して使用することができます。
その他のオプション:
-i
, --identify
file-name
mkvmerge(1)に、単一のファイルを探査してその種類と、ファイルに含まれるトラック及びそのトラックIDを表示させます。このオプションを指定した場合、他に指定できるのはファイル名のみです。
-l
, --list-types
サポートされている入力ファイルの種類を列挙します。
--list-languages
--language
オプションに指定できる、ISO639-2言語コードの一覧を出力します。
--priority
priority
mkvmerge(1)を実行する際のプロセス優先度を指定します。指定できるのは'lowest
'、'lower
'、'normal
'、'higher
'、及び'highest
'です。指定されない場合、'normal
'が使用されます。UNIX系のシステムでは、mkvmerge(1)はnice(2)関数を使用するので、'higher
'及び'highest
'はスーパーユーザのみが使用可能です。Windowsでは全てのユーザが全優先度を使用可能です。
--command-line-charset
character-set
コマンドライン文字列の文字コードを指定します。デフォルトは、システムの現在のロケールの文字コードになります。この設定は--title
、--track-name
、及び--attachment-description
の三つのオプションの引数に影響します。
--output-charset
character-set
出力する文字コードを指定します。デフォルトは、システムの現在のロケールの文字コードになります。
-r
, --redirect-output
file-name
全てのメッセージをコンソールではなくfile-name
で指定したファイルに書き出します。出力リダイレクトによっても同じことが簡単にできますが、このオプションが必要な場合もあります。ターミナルがファイルに書き込む前に出力を処理してしまう場合などです。--output-charset
によって指定された文字コードは尊重されます。
--ui-language
code
指定したcode
を強制的に言語コード(例:
日本語ならば'ja_JP
')として使用します。しかし、環境変数LANG
やLC_MESSAGES
、LC_ALL
を使用したほうが好ましいでしょう。code
にlist
と指定すると、指定できる言語コードの一覧を出力します。
@
options-file
options-file
で指定されたファイルから追加のコマンドラインオプションを読み込みます。行で最初の空白文字でない文字がハッシュマーク('#
')である行はコメントとして扱われ、無視されます。行頭、及び行末の空白文字は取り除かれます。各行には一つずつしかオプションを指定できません。メタキャラクタのエスケープは必要ありません。
'mkvmerge -o "my file.mkv" -A "a movie.avi" sound.ogg'というコマンドラインと同じことは、次のようなオプションファイルによって指定できます。
# "my file.mkv" に書き込む。 -o my file.mkv # "a movie.avi" からビデオトラックのみを取り出す。 -A a movie.avi sound.ogg
--capabilities
コンパイル時に組込まれたオプション機能を一覧表示して終了します。出力の一行目はバージョン情報になります。以降の全ての行は、その機能がコンパイルされていることを示す一単語のみを含みます。オプション機能の一覧を下に示します。
"'BZ2
' -- bzlib™圧縮ライブラリ。--compression
オプションに指定できる圧縮メソッドに影響します。
'LZO
' -- lzo™圧縮ライブラリ。--compression
オプションに指定できる圧縮メソッドに影響します。
'FLAC
' -- 生FLACファイルの読み込み及び、他のコンテナ(例:
Ogg™、Matroska™など)に格納されたFLACトラックの処理。
-h
, --help
コマンド書式情報を出力して終了します。
-V
, --version
バージョン情報を出力して終了します。
各ファイルについて、ユーザはmkvmerge(1)が取り出すべきトラックを選択できます。取り出されたトラックは、すべて-o
で指定されたファイルに書き出されます。既知の(サポート済の)入力ファイルフォーマットは-l
オプションで取得できます。
あなたは、 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™に指定できます。ゼロベースで、ビデオとオーディオの区別をしないIDを指定します。
もし、オーディオトラックの同期をとる必要がある場合も、簡単にとることができます。まず、次のようにしてVorbisトラックのトラックIDを取得します。
$ mkvmerge --identify outofsync.ogg
次に、このIDを使って、次のようなコマンドラインを実行します。
$ mkvmerge -o goodsync.mkv -A source.avi -y 12345:200 outofsync.ogg
上のようにすると、'outofsync.ogg
'に入っている、IDが
12345
のオーディオトラックの最初に200msの無音を挿入します。
最初は同期がとれているのにだんだんとずれていく動画もあります。このような動画には、全てのタイムコードに適用される遅れ係数を指定することができます。データは追加も削除もされないので、あまり大きな、またはあまりに小さな係数を指定するとまずい結果になるでしょう。例として、私が変換したある動画は、全長が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
出力されたPGMイメージをgocrでテキスト化:
$ pgm2txt mymovie
出力されたテキストファイルを校正:
$ ispell -d american *txt
テキストファイルをSRTファイルに変換:
$ srttool -s -w -i mymovie.srtx -o mymovie.srt
出力されたファイルをmkvmerge(1)の入力ファイルとして使用する:
$ mkvmerge -o mymovie.mkv mymovie.avi mymovie.srt
もし、あるトラックに言語コードを指定したいならば、簡単に指定できます。まず、指定する言語のISO639-2コードを調べます。次のようにすればmkvmerge(1)に全ての言語コードを一覧表示させることができます。
$ mkvmerge --list-languages
必要な言語をリストの中から探してください。Matroska™ファイルの中に、二つのオーディオトラックがあり、トラック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 3 without-lang-codes.mkv --language 0:eng english.srt --default-track 0 --language 0:fre french.srt
もし、指定したはずの言語やデフォルトフラグがmkvinfo(1)の出力に見当たらない場合は、デフォルト値のセクションを参照してください。
mkvmerge(1)のオプションの中には、どのトラックに適用するかを特定するために、トラックIDを指定する必要なものがあります。このトラックIDは、入力ファイルがdemuxされる際に表示されるほか、mkvmerge(1)に--identify
オプションを指定して表示させることもできます。この場合の出力は次のようになります。
$ mkvmerge -i v.mkv
File 'v.mkv': container: Matroska™
Track ID 1: video (V_MS/VFW/FOURCC, DIV3)
Track ID 2: audio (A_MPEG/L3)
トラックIDは次のように割り当てられます:
AVI ファイル: ビデオトラックのIDは0になります。オーディオトラックのIDは1から昇順に割り当てられます。
AAC、AC3、MP3、SRT、及びWAVファイル: ファイル中の唯一のトラックがID 0 を割り当てられます。
Ogg/OGM ファイル: 最初のトラックを0として、見付かった順に割り当てられます。
Matroska™ ファイル: mkvinfo(1)が表示するトラック番号がトラックIDとして使用されます。これはトラックUIDではありません。
'-1
'は特殊で、そのスイッチが入力ファイルから読み込まれる全てのトラックに適用されることを示します。
トラックIDを使用するオプションの説明には、'TID
'が含まれています。また、--atracks
、--vtracks
、--stracks
及び--btracks
オプションもトラックIDを使用します。
このセクションは、暗黙のうちにmkvmerge(1)だけでなくMKVToolNixの全てのプログラムにあてはまります。
Matroska™ファイルに格納されているテキストの文字コードは全てUTF-8です。よって、mkvmerge(1)がテキストファイルを読み込む際には全てをUTF-8に文字コード変換する必要があります。代わりに、mkvmerge(1)が例えば--ui-language
によって非英語翻訳が使用される際や、Matroska™ファイルに格納されていたテキストを出力する際には、UTF-8から指定された文字コードに変換すればよいということになります。
mkvmerge(1)はこの変換をバイト・オーダー・マーク(BOM)の有無、又はシステムのロケールに基づいて自動的に行ないます。ロケールからどのように文字コードが推測されるかは、mkvmerge(1)を実行するシステムに依存します。
BOMで始まるテキストファイルは、既にUTFエンコーディングの一種でエンコードされています。mkvmerge(1)はUTF-8、UTF-16リトルエンディアン及びビッグエンディアン、UTF-32リトルエンディアン及びビッグエンディアンの五つのモードをサポートします。BOMで始まるテキストファイルは自動的にUTF-8に変換されます。この場合、テキストファイルの文字コードを指定するパラメータ(例:
--sub-charset
)は全て黙殺されます。
UNIX系システム上では、mkvmerge(1)はsetlocale(3)システムコールを使うので、LANG
、LC_ALL
及びLC_CYPE
環境変数を使用する。大抵は、UTF-8かISO-8859-*ファミリのどれかが全てのテキストファイルとコマンドライン文字列の処理、及びコンソールへの出力の文字コードとして使用される。
Windowsでは、cmd.exeWindowsシェルプログラムの実装方式のために、mkvmerge(1)は二つの異なる文字コードを使用します。一つ目はGetCP()
システムコールによって決定される文字コードです。この文字コードはテキストファイル変換にデフォルトで使用され、MKVToolNixパッケージに含まれるGUIプログラムで表示される全ての文字列に適用されます。cmd.exeはもう一つの、GetACP()
システムコールにより決定される文字コードを使用します。これはコマンドライン文字列及びコンソールへの出力のデフォルト文字コードです。
次のような文字コードを指定するオプションがあります。
--sub-charset
は、テキスト字幕ファイルの文字コードと、他のコンテナに格納されたテキスト字幕トラックの文字コードが曖昧さなく決定できない場合(例:
Oggファイル)の文字コードを指定します。
--chapter-charset
は、チャプタテキストファイルの文字コードと、他のコンテナフォーマットに格納されているチャプタ及びタイトルの文字コードを曖昧さなく決定できない場合(例:
Oggファイルのチャプタ情報、トラックとファイルのタイトル等、及びMP4ファイルのチャプタ情報)の文字コードを指定します。
--command-line-charset
は全てのコマンドライン文字列の文字コードを指定します。
--output-charset
はコンソールに出力される文字列の文字コード及び、--redirect-output
オプションによりファイルに出力がリダイレクトされている場合、そのファイルの文字列の文字コードを指定します。
Matroska™には、いくつか字幕の埋め込み方法があります。現時点では、mkvmerge(1)はテキスト、VobSub、及びKate字幕フォーマットのみをサポートしています。テキスト字幕は、プレイヤーで正しく表示されるためにUTF-8で保存されなればなりません(mkvmerge(1)の文字コード変換についてはテキストファイルと文字コードのセクションを参照してください)。Kate字幕は既にUTF-8でエンコードされているので、再変換する必要はありません。
現在、次の字幕フォーマットがサポートされています。
SubRipテキスト字幕形式(SRT)ファイル
Substation Alpha (SSA) / Advanced Substation (ASS) 字幕
OggKateストリーム
VobSubビットマップ字幕
Matroska™はファイル紐付けをサポートします。ファイル紐付けとは、単純に現在のファイルの前の、又は次のファイルを指定する機能です。正確に言うと、本当に紐付けされるのはファイルではなくMatroska™セグメントです。ほとんどのファイルはMatroska™セグメントを一つしか持たないので、以降の説明ではより正確な'セグメント紐付け'という用語ではなく、'ファイル紐付け'という用語を使用します。
各セグメントはユニークな128bit幅のセグメントUIDを持ちます。このUIDはmkvmerge(1)が自動的に生成します。紐付けは基本的にセグメントUID(略してSID)をヘッダ情報の中に挿入することで行われます。mkvinfo(1)はこのSIDを、存在する場合は表示します。
もしひとつのファイルがいくつかの小さなファイルに分割されて紐付けされる場合、タイムコードは0から始まらず、前のファイルの続きから始まります。この方式では、前のファイルが無い場合も絶対時間が保たれます(例:
ストリーミングを使用している際)。もし、紐付けが使用されない場合、タイムコードは各ファイルで0から始まります。デフォルトではmkvmerge(1)はファイル紐付けを使用しません。ファイル紐付けを使用したい場合は、--link
オプションを使用する必要があります。このオプションはファイル分割が有効な場合以外には無効です。
ファイル分割が有効か無効かに関わらず、ユーザはmkvmerge(1)に、生成したファイルを特定のSIDに紐付けすることができます。これは--link-to-previous
オプションと--link-to-next
オプションにより可能です。これらのオプションはmkvinfo(1)が出力するフォーマット(16個の0x00
から0xff
までの、'0x
'を頭につけた16進数)のSIDを受け付けます(例:
'0x41 0xda 0x73 0x66 0xd9 0xcf 0xb2 0x1e 0xae 0x78 0xeb 0xb4 0x5e
0xca 0xb3 0x93
')。もしくは、'0x
'及び数字の間のスペースを省いた短形式(例:
'41da7366d9cfb21eae78ebb45ecab393
')を指定することもできます。
もしファイル分割が有効の場合、最初のファイルが--link-to-previous
オプションで指定したSIDに紐付けされ、最後のファイルが--link-to-next
オプションで指定したSIDに紐付けされます。ファイル分割が無効の場合、一つの出力ファイルが両方のSIDに紐付けされます。
Matroska™ファイルの仕様には、デフォルト値を持つエレメントの存在が明記されています。通常、デフォルト値と等しい値をもつエレメントはファイルサイズを抑えるためファイルに書き込まれません。mkvinfo(1)では表示されないかもしれないエレメントは、言語
とデフォルトトラックフラグ
エレメントです。言語
エレメントのデフォルト値は英語('eng
')で、デフォルトトラックフラグ
エレメントのデフォルト値はtrue
です。よって、あるトラックに--language:
0:eng
を指定した場合には、mkvinfo(1)の出力には現れません。
Matroska™ファイルに写真を入れておきたいということや、非常に稀でしょうがSSA字幕を使っていてTrueType™フォントを使用したいということがあるかもしれません。このような場合には、Matroska™ファイルにファイルを添付することができます。添付されるファイルはMatroska™ファイルに埋め込まれるのではなく、ただ単純に追加されます。よって、プレイヤーはこれらのファイルを表示したり(写真の場合)、字幕を描画するのに使用したり(フォントの場合)できます。
下に、出力ファイルに写真と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-type application/octet-stream --attach-file really_cool_font.ttf
コマンドライン文字列の文字コードを指定します。デフォルトは、システムの現在のロケールの文字コードになります。この設定は--title
、--track-name
、及び--attachment-description
の三つのオプションの引数に影響します。
Matroska™チャプタシステムは、OGMファイルで使用されていた従来のシステムより強力です。その仕様の全ては、Matroska™のウェブサイトに記されています。
mkvmerge(1)は2種類のチャプタファイルを入力としてサポートしています。一つ目は'シンプルチャプタファイル'と呼ばれるもので、OGM toolsが想定しているものと同じフォーマットです。二つ目はXMLベースのチャプタフォーマットで、Matroska™のチャプタ機能の全てをサポートしています。
このフォーマットは、'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 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
サブディレクトリの中にあります。
mkvmerge(1)は出力ファイルを分割する際、チャプタも適切に処理します。つまり、分割された各ファイルはそのファイルに関係するチャプタのみを含み、タイムコードには適切なオフセットがかかります。
mkvmerge(1)は、--no-chapters
オプションで明示的に無効化されていなければ、Matroska™ソースファイルからチャプタをコピーできます。全てのソース(Matroska™ファイル、Oggファイル、MP4ファイル、チャプタテキストファイル)に由来するチャプタは通常はマージされず、別々のChapterEditions
が作成されます。いくつかのMatroska™もしくはXMLファイルで、エディションUIDが共有される場合にのみ、チャプタは一つのChapterEdition
にマージされます。そのような場合以外でマージを行いたい場合は、ユーザはまず全てのソースからmkvextract(1)でチャプタを抽出し、手動でXMLファイルをマージした後にMUXを行なわなければなりません。
Matroska™は廃止予定の拡張可能なタグのセットと、新しい、他のよくあるコンテナで採用されているようなより単純な、KEY=VALUE
というシステムをサポートします。しかし、Matroska™では、これらのタグはネストすることも可能で、さらにKEY
とVALUE
は両方がそれ自信のエレメントです。サンプルファイルexample-tags-2.xml
がこの新しいシステムの使い方の例を示しています。
Matroska™タグは自動的にはファイル全体に適用はされません。適用することもできますが、ファイルの異る部分々々に適用することもできます。一つ、もしくは複数のトラック、一つ、もしくは複数のチャプタ、さらにはその組み合わせにも適用することが可能です。Matroska™の仕様に、このことの詳細が記述されています。
重要なことは、タグはTargets
Matroska™タグエレメントによってトラック及びチャプタにリンクされますが、このリンクの際に使用されるUIDはmkvmerge(1)が色々な所で使用するトラックIDではないことです。その代わりに、mkvmerge(1)は自動的に計算したUID(トラックがMatroska™以外のファイルフォーマットから取り出される場合)か、トラックのソースファイルがMatroska™ファイルの場合ソースファイルからコピーされた数字が使用されます。よって、タグファイルが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™の仕様に非常に近いデザインになっています。MKVToolNixのバイナリ、及びソースディストリビューションはどちらも、既知のタグをただリストしただけの、実際のタグファイルのテンプレートとして使用できるexample-tags-2.xml
というサンプルファイルを含んでいます。
基本的には、以下の様な構成です。
最も外側のエレメントは<Tags>
でなければなりません。
一個の論理タグは<Tag>
XMLタグの内部に包含されます。
タグの中身の直前・直後のスペースは無視されます。
新しいMatroska™タグシステムは、UTF-8文字列とバイナリの二つのデータタイプしか認識しません。前者はタグの名前と<Strings>
エレメントに使用され、後者は<Binary>
エレメントに使用されます。
バイナリデーは、そのままではXMLファイルに格納できないので、mkvmerge(1)は二つのバイナリデータを格納する方法をサポートします。XMLタグの中身が'@
'で始まる場合、そのあとのテキストはファイル名として扱われ、対応するファイルの中身がMatroska™エレメントにコピーされます。
もう一つの方法では、データはBase64エンコードされる必要があります。これは、バイナリデータをASCIIキャラクタの一部だけで表現するためのエンコードで、例えばEメールなどに使用されています。mkvextract(1)は、バイナリエレメントをBase64エンコードされたデータとして出力します。
古いタグシステムは、公式のMatroska™の仕様に示されているように、もっと多くのデータタイプを認識していました。mkvmerge(1)はもはやこのシステムをサポートしないので、それらのタイプについてはここでは説明しません。
Matroska™ファイルのレイアウトは非常に柔軟性に富んでいます。mkvmerge(1)はあらかじめ定義された方法でファイルを書き出します。出力されたファイルはこのようになります。
[EBMLヘッダ] [セグメント {メタシーク #1} [セグメント情報] [トラック情報] {チャプタ} [クラスタ 1] {クラスタ 2} ... {クラスタ n} {CUE} {添付ファイル} {メタシーク #2} {タグ}]
波括弧でくくられたエレメントは省略可能で、コンテンツと指定されたオプションに依存します。いくつか注釈があります。
メタシーク #1は、少数のレベル1エレメント(添付ファイル、チャプタ、CUE、タグ、メタシーク #2)のみを、それらが存在するときにのみ含みます。以前のバージョンのmkvmerge(1)は、このメタシークエレメントにクラスタも挿入していました。このため、十分なスペースを確保しておくために不正確な推測が必要で、この推測は多くの場合失敗していました。現在では、クラスタのみはメタシーク #2に格納され、メタシーク #1がメタシークエレメント #2を参照しています。
添付ファイル、チャプタ、及びタグエレメントはそれらが存在するときにのみ追加されます。
最小構成のMatroskaファイルはこのような構成になります。
[EBMLヘッダ] [セグメント [セグメント情報] [トラック情報] [クラスタ1]]
音声のみのファイルはこのようになるでしょう。
ユーザは、特定のトラックのタイムコードを自分でmkvmerge(1)に指定することができます。これは可変フレームレートビデオを含むファイルを作成するときや、オーディオに無音を挿入するときに使用できます。この場合、フレームはMatroska™ブロックを作成する際の単位となります。ビデオでは、これはちょうど1フレームとなり、オーディオではこれは各オーディオタイプの1パケットとなります。例えば、AC3では、これは1536
サンプルを含む1パケットとなります。
結合されたトラックにタイムコードファイルを指定する場合は、各結合されるトラックチェインの最初の部分にのみ指定してください。例えばv1.avi、v2.aviの二つのファイルを結合し、タイムコードを使用したいときのコマンドラインは次のようになります。
mkvmerge ... --timecodes 0:my_timecodes.txt v1.avi +v2.avi
mkvmerge(1)は、4つのファオーマットを認識します。最初の1行は常にバージョン番号を含みます。空行、空白のみを含む行、及び'#
'で始まる行は無視されます。
このフォーマットはバージョン行から始まります。2行目はデフォルトフレームレートを宣言します。残りの全ての行は、コンマで区切られた3つの数字を含みます。開始フレーム(0
が最初のフレームです)、終了フレーム、そしてこの範囲で適用されるフレームレートです。FPSは、ドット'.
'を小数点として持つ小数です。フレーム範囲はデフォルトFPSが使用されるギャップを含むこともあります。例を下に示します。
# timecode format v1 assume 27.930 800,1000,25 1500,1700,30
このフォーマットでは、各行は対応するフレームのタイムコードを含みます。このタイムコードはミリ秒単位の精度で指定しなければなりません。小数を指定することができますが、小数でなくてもかまいません。最低でも、トラックに含まれるフレーム数と同数のタイムコード行を含まなければなりません。このファイル内のタイムコードは整列されていなければなりません。例えば、25fpsでは以下のようになります。
# timecode format v2 0 40 80
このフォーマットでは、各行は秒単位の持続時間と、省略可能なフレームレートを含みます。この二つは両方とも小数を指定できます。もし、フレームレートが指定されない場合はデフォルトの値が使用されます。オーディオではコーデックにタイムコードを計算させるべきです。このためには、フレームレートとして0.0
を指定してください。また、'gap
'キーワードの後に持続時間を指定して、無音を指定することもできます。オーディオファイル用の例を示します。
# timecode format v3 assume 0.0 25.325 7.530,38.236 gap, 10.050 2.000,38.236