MKVMERGE(1)

名前
mkvmerge - マルチメディアストリームをMatroska(TM)ファイルに格納します。

書式

mkvmerge [global options] {-o out} [options1] {file1} [[options2] {file2}] [@optionsfile]

説明

このプログラムはいくつかのメディアファイルを入力とし、それらに格納されたストリームのうち全て、もしくは選択されたものをMatroska(TM)ファイルに書き込みます。Matroska(TM)[1]のウェブサイトも参照してください。

グローバルオプション:

-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(TM)ファイルレイアウトのセクションも参照してください。

--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)は三つのモードをサポートしています。

        1. 指定サイズで分割します。

        書式: --split [size:]d[k|m|g]

        例: --split size:700m or --split 150000000

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

        'size:'という接頭辞は、互換性のために省略できるようになっています。

        2. 指定時間で分割します。

        書式: --split [duration:]HH:MM:SS.nnnnnnnnn|ds

        例: --split duration:00:60:00.000 or --split 3600s

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

        'duration:'という接頭辞は、互換性のために省略できるようになっています。

        3. 指定した各タイムコードで分割します。

        書式: --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のホームページ[2]に掲載されています。MIMEタイプは添付ファイルに必須です。

--attachment-name name
    この添付ファイルの、出力ファイル内での名前を指定します。このオプションが指定されなかった場合、--attach-fileまたは--attach-file-onceで指定されたファイル名がそのまま使用されます。

--attach-file file-name, --attach-file-once file-name

    Matroska(TM)ファイルの内部に添付ファイルを作成します。これらのオプションを使用するには、MIMEタイプをこれらのオプションより前に指定しなければなりません。二つのオプションの違いは、出力ファイルを分割する際に、--attach-fileでは全ての出力ファイルに添付されますが、--attach-file-onceでは最初に作成されたファイルにしか添付されない点です。分割が使用されない場合、二つは等価です。

    mkvextract(1)でMatroska(TM)ファイルから添付ファイルを抽出することができます。

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

-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(TM)ファイルではなく)AACファイルでありかつ b) AACファイルがSBR AACデータを含む場合に必要です。このスイッチが存在する理由は、通常のAACファイルとSBR AACファイルを自動的に区別することは、AACフレームを完全にデコードしなければ技術的に不可能であるためです。AACはいくつかの特許問題を抱えているため、mkvmerge(1)は将来的にもこのデコードステージを含むことはありません。よって、SBR AACにはこのスイッチが必須となります。このスイッチが指定されなかった場合、出力ファイルは正常に再生ができなくなるか、完全に再生不能になるでしょう。

    ソースファイルがMatroska(TM)ファイルの場合、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(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
    ビデオトラックのピクセルクロッピングのパラメータを指定した値に設定します。

--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(TM)及びbzlib(TM)圧縮ライブラリのサポート付きでコンパイルされたときのみ使用できます。

    '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(TM)圧縮ライブラリ。--compressionオプションに指定できる圧縮メソッドに影響します。

        • 'LZO' -- lzo(TM)圧縮ライブラリ。--compressionオプションに指定できる圧縮メソッドに影響します。

        • 'FLAC' -- 生FLACファイルの読み込み及び、他のコンテナ(例: Ogg(TM)、Matroska(TM)など)に格納されたFLACトラックの処理。

-h, --help
    コマンド書式情報を出力して終了します。

-V, --version
    バージョン情報を出力して終了します。

使用法

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

例

あなたは、 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)に指定できます。ゼロベースで、ビデオとオーディオの区別をしない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(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

もし、あるトラックに言語コードを指定したいならば、簡単に指定できます。まず、指定する言語のISO639-2コードを調べます。次のようにすればmkvmerge(1)に全ての言語コードを一覧表示させることができます。

    $ mkvmerge --list-languages

必要な言語をリストの中から探してください。Matroska(TM)ファイルの中に、二つのオーディオトラックがあり、トラック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)の出力に見当たらない場合は、デフォルト値のセクションを参照してください。

トラックID

mkvmerge(1)のオプションの中には、どのトラックに適用するかを特定するために、トラックIDを指定する必要なものがあります。このトラックIDは、入力ファイルがdemuxされる際に表示されるほか、mkvmerge(1)に--identifyオプションを指定して表示させることもできます。この場合の出力は次のようになります。

    $ mkvmerge -i v.mkv
    File 'v.mkv': container: Matroska(TM)
    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(TM) ファイル: mkvinfo(1)が表示するトラック番号がトラックIDとして使用されます。これはトラックUIDではありません。

'-1'は特殊で、そのスイッチが入力ファイルから読み込まれる全てのトラックに適用されることを示します。

トラックIDを使用するオプションの説明には、'TID'が含まれています。また、--atracks、--vtracks、--stracks及び--btracksオプションもトラックIDを使用します。

テキストファイルと文字コード変換

    注記

    このセクションは、暗黙のうちにmkvmerge(1)だけでなくMKVToolNixの全てのプログラムにあてはまります。

Matroska(TM)ファイルに格納されているテキストの文字コードは全てUTF-8です。よって、mkvmerge(1)がテキストファイルを読み込む際には全てをUTF-8に文字コード変換する必要があります。代わりに、mkvmerge(1)が例えば--ui-languageによって非英語翻訳が使用される際や、Matroska(TM)ファイルに格納されていたテキストを出力する際には、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(TM)には、いくつか字幕の埋め込み方法があります。現時点では、mkvmerge(1)はテキスト、VobSub、及びKate字幕フォーマットのみをサポートしています。テキスト字幕は、プレイヤーで正しく表示されるためにUTF-8で保存されなればなりません(mkvmerge(1)の文字コード変換についてはテキストファイルと文字コードのセクションを参照してください)。Kate字幕は既にUTF-8でエンコードされているので、再変換する必要はありません。

現在、次の字幕フォーマットがサポートされています。

    • SubRipテキスト字幕形式(SRT)ファイル

    • Substation Alpha (SSA) / Advanced Substation (ASS) 字幕

    • OggKateストリーム

    • VobSubビットマップ字幕

ファイル紐付け

Matroska(TM)はファイル紐付けをサポートします。ファイル紐付けとは、単純に現在のファイルの前の、又は次のファイルを指定する機能です。正確に言うと、本当に紐付けされるのはファイルではなくMatroska(TM)セグメントです。ほとんどのファイルはMatroska(TM)セグメントを一つしか持たないので、以降の説明ではより正確な'セグメント紐付け'という用語ではなく、'ファイル紐付け'という用語を使用します。

各セグメントはユニークな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(TM)ファイルの仕様には、デフォルト値を持つエレメントの存在が明記されています。通常、デフォルト値と等しい値をもつエレメントはファイルサイズを抑えるためファイルに書き込まれません。mkvinfo(1)では表示されないかもしれないエレメントは、言語とデフォルトトラックフラグエレメントです。言語エレメントのデフォルト値は英語('eng')で、デフォルトトラックフラグエレメントのデフォルト値はtrueです。よって、あるトラックに--language: 0:engを指定した場合には、mkvinfo(1)の出力には現れません。

添付ファイル

Matroska(TM)ファイルに写真を入れておきたいということや、非常に稀でしょうがSSA字幕を使っていてTrueType(TM)フォントを使用したいということがあるかもしれません。このような場合には、Matroska(TM)ファイルにファイルを添付することができます。添付されるファイルはMatroska(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-type application/octet-stream --attach-file really_cool_font.ttf

コマンドライン文字列の文字コードを指定します。デフォルトは、システムの現在のロケールの文字コードになります。この設定は--title、--track-name、及び--attachment-descriptionの三つのオプションの引数に影響します。

チャプタ

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

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

  シンプルチャプタフォーマット

このフォーマットは、'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)の文字コード変換についてはテキストファイルと文字コードのセクションを参照してください。

  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サブディレクトリの中にあります。

  注意

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

mkvmerge(1)は、--no-chaptersオプションで明示的に無効化されていなければ、Matroska(TM)ソースファイルからチャプタをコピーできます。全てのソース(Matroska(TM)ファイル、Oggファイル、MP4ファイル、チャプタテキストファイル)に由来するチャプタは通常はマージされず、別々のChapterEditionsが作成されます。いくつかのMatroska(TM)もしくはXMLファイルで、エディションUIDが共有される場合にのみ、チャプタは一つのChapterEditionにマージされます。そのような場合以外でマージを行いたい場合は、ユーザはまず全てのソースからmkvextract(1)でチャプタを抽出し、手動でXMLファイルをマージした後にMUXを行なわなければなりません。

タグ

  はじめに

Matroska(TM)は廃止予定の拡張可能なタグのセットと、新しい、他のよくあるコンテナで採用されているようなより単純な、KEY=VALUEというシステムをサポートします。しかし、Matroska(TM)では、これらのタグはネストすることも可能で、さらにKEYとVALUEは両方がそれ自信のエレメントです。サンプルファイルexample-tags-2.xmlがこの新しいシステムの使い方の例を示しています。

  タグのスコープ

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

重要なことは、タグはTargetsMatroska(TM)タグエレメントによってトラック及びチャプタにリンクされますが、このリンクの際に使用されるUIDはmkvmerge(1)が色々な所で使用するトラックIDではないことです。その代わりに、mkvmerge(1)は自動的に計算したUID(トラックがMatroska(TM)以外のファイルフォーマットから取り出される場合)か、トラックのソースファイルがMatroska(TM)ファイルの場合ソースファイルからコピーされた数字が使用されます。よって、タグファイルがmkvmerge(1)に渡される前に、使用されるUIDを知ることは困難です。

mkvmerge(1)はMatroska(TM)ファイルにタグを追加する二つのオプションを認識します。--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(TM)の仕様[4]に非常に近いデザインになっています。MKVToolNixのバイナリ、及びソースディストリビューションはどちらも、既知のタグをただリストしただけの、実際のタグファイルのテンプレートとして使用できるexample-tags-2.xmlというサンプルファイルを含んでいます。

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

    • 最も外側のエレメントは<Tags>でなければなりません。

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

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

  データタイプ

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

バイナリデーは、そのままではXMLファイルに格納できないので、mkvmerge(1)は二つのバイナリデータを格納する方法をサポートします。XMLタグの中身が'@'で始まる場合、そのあとのテキストはファイル名として扱われ、対応するファイルの中身がMatroska(TM)エレメントにコピーされます。

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

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

MATROSKA(TM)ファイルのレイアウト

Matroska(TM)ファイルのレイアウトは非常に柔軟性に富んでいます。mkvmerge(1)はあらかじめ定義された方法でファイルを書き出します。出力されたファイルはこのようになります。

[EBMLヘッダ] [セグメント {メタシーク #1} [セグメント情報] [トラック情報] {チャプタ} [クラスタ 1] {クラスタ 2} ... {クラスタ n} {CUE} {添付ファイル} {メタシーク #2} {タグ}]

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

    • メタシーク #1は、少数のレベル1エレメント(添付ファイル、チャプタ、CUE、タグ、メタシーク #2)のみを、それらが存在するときにのみ含みます。以前のバージョンのmkvmerge(1)は、このメタシークエレメントにクラスタも挿入していました。このため、十分なスペースを確保しておくために不正確な推測が必要で、この推測は多くの場合失敗していました。現在では、クラスタのみはメタシーク #2に格納され、メタシーク #1がメタシークエレメント #2を参照しています。

    • 添付ファイル、チャプタ、及びタグエレメントはそれらが存在するときにのみ追加されます。

最小構成のMatroskaファイルはこのような構成になります。

[EBMLヘッダ] [セグメント [セグメント情報] [トラック情報] [クラスタ1]]

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

外部タイムコードファイル

ユーザは、特定のトラックのタイムコードを自分でmkvmerge(1)に指定することができます。これは可変フレームレートビデオを含むファイルを作成するときや、オーディオに無音を挿入するときに使用できます。この場合、フレームはMatroska(TM)ブロックを作成する際の単位となります。ビデオでは、これはちょうど1フレームとなり、オーディオではこれは各オーディオタイプの1パケットとなります。例えば、AC3では、これは1536サンプルを含む1パケットとなります。

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

    mkvmerge ... --timecodes 0:my_timecodes.txt v1.avi +v2.avi

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

  タイムコードファイルフォーマット v1

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

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

  タイムコードファイルフォーマット v2

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

    # timecode format v2
    0
    40
    80

  タイムコードファイルフォーマット v3

このフォーマットでは、各行は秒単位の持続時間と、省略可能なフレームレートを含みます。この二つは両方とも小数を指定できます。もし、フレームレートが指定されない場合はデフォルトの値が使用されます。オーディオではコーデックにタイムコードを計算させるべきです。このためには、フレームレートとして0.0を指定してください。また、'gap'キーワードの後に持続時間を指定して、無音を指定することもできます。オーディオファイル用の例を示します。

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

  タイムコードファイルフォーマット v4

このフォーマットはv2フォーマットと同一です。唯一の違いは、タイムコードが整列されていなくてもいいという点です。このフォーマットが使われることはほぼ無いでしょう。

返り値

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

    •

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

    •

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

    •

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

関連項目

mkvinfo(1), mkvextract(1), mkvpropedit(1), mmg(1)

ウェブ

最新のバージョンは、常時MKVToolNixのホームページ[5]から取得できます。

著者

Bunkus Moritz[FAMILY Given] <moritz@bunkus.org>
    開発者

注記

1.  Matroska(TM)
    http://www.matroska.org/

2.  IANAのホームページ
    http://www.iana.org/assignments/media-types/

3.  Matroska(TM)のウェブサイト
    http://www.matroska.org

4.  Matroska(TM)の仕様
    http://matroska.org/technical/specs/index.html

5.  MKVToolNixのホームページ
    http://www.bunkus.org/videotools/mkvtoolnix/