mkvextract -- Matroska(tm) ファイルから、他の形式のファイルを抽出する

# 1. 書式

mkvextract {mode} {source-filename} [options] [extraction-spec]

# 2. 説明

Matroska(tm) ファイルの特定の部分を、他の有用なフォーマットで抽出します。最初のmode引数は、mkvextract(1) に何を抽出すべきかを指示します。現在サポートされているのは、トラック、タグ、添付ファイル、チャプタ、CUEシート 及び タイムコードの抽出です。二個目の引数はソースファイルの名前です。これはMatroska(tm)ファイルでなければなりません。続く全ての引数は、オプションと抽出設定です。これらは指定されたmodeに依存します。

## 2.1. 共通オプション

以下のオプションは、全てのmodeで使用できるので、このセクションで一括して説明します。

Option | Description
--- | ---
-f, --parse-fully | 解析モードを'full'に設定します。デフォルトのモードでは、ソースファイルの必要な要素を見つけるのにファイル全体を解析せずにメタシーク要素を使用します。99%のケースではこれで十分ですが、メタシーク要素が含まれていなかったり壊れていたりするファイルにはこのモードを使用しなければならないかもしれません。高速スキャンが数秒しかかからないのに対して、ファイルをフルスキャンするのには数分かかることがあります。
--command-line-charset character-set | コマンドライン文字列の文字コードを指定します。デフォルトは、システムの現在のロケールの文字コードになります。
--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と指定すると、指定できる言語コードの一覧を出力します。
--debug topic | 特定の機能のデバッグをオンにします。このオプションは開発者にのみ有用です。
--engage feature | 実験的機能をオンにします。利用可能な機能のリストは mkvextract --engage listで得られます。これらの機能は通常の状況で使用されることを意図されていません。
-v, --verbose | 出力が冗長になり、Matroska(tm)のエレメントにとって重要なこと全てを、読み込まれるつどに表示していきます。
-h, --help | コマンド書式情報を出力して終了します。
-V, --version | バージョン情報を出力して終了します。
--check-for-updates | http://mkvtoolnix-releases.bunkus.org/latest-release.xmlをダウンロードすることで、新しいリリースがないかオンラインでチェックします。key=valueという書式で、4行が出力されます：どこから情報を取得したか (key version_check_url)、現在実行中のバージョン (key running_version)、最新のリリースのバージョン (key available_version) 及びそのダウンロードURL (key download_url)。 その後プログラムは、新しいリリースが入手可能ではなかった場合は終了コード0で、新しいリリースが入手可能であった場合は終了コード1で、エラーが発生した場合（例：アップデート情報を取得できなかった場合）は終了コード2で、それぞれ終了します。 このオプションは、プログラムがlibcurlのサポートつきでビルドされた場合のみ使用できます。
@options-file | options-fileで指定されたファイルから追加のコマンドラインオプションを読み込みます。行で最初の空白文字でない文字がハッシュマーク('#')である行はコメントとして扱われ、無視されます。行頭、及び行末の空白文字は取り除かれます。各行には一つずつしかオプションを指定できません。 エスケープすることができる文字もあります。例えば、コメントではない行を'#'で始める必要がある場合です。そのルールは、エスケープ文字についてのセクションで説明されています。 'mkvextract tracks source.mkv --raw 1:destination.raw'というコマンドラインと同じことは、次のようなオプションファイルによって指定できます。
    # source.mkv からトラックを抽出
    tracks
    source.mkv
    # トラックをrawデータとして出力
    --raw
    1:destination.raw

## 2.2. トラック抽出モード

書式: mkvextract tracks source-filename [options] TID1:dest-filename1 [TID2:dest-filename2 ...]

以下のコマンドラインオプションは、トラック抽出モードでは各トラック毎に指定することができます。これらのオプションは、作用するトラック指定子(下記参照)の前に指定しなければなりません。

Option | Description
--- | ---
-c character-set | 直後の字幕トラックの出力文字コードを指定します。直後のトラックIDが指すのが、字幕トラックのときのみ有効です。デフォルトはUTF-8になります。
--blockadd level | このレベルまでのBlockAdditionを保持します。デフォルトでは全て保持します。このオプションは、WAVPACK4などの特定のコーデックにのみ有効です。
--cuesheet | mkvextract(1)に、直後のトラックのチャプタ情報とタグデータからCUEシートを生成します。出力ファイルの名前はトラックの出力名に'.cue'をつけたものになります。
--raw | コンテナ情報を含まない、rawデータをファイルに抽出します。--fullrawフラグとは違い、このフラグはCodecPrivate要素の内容はファイルに書き出しません。このモードは、mkvextract(1)がサポートしないものも含めて全てのCodecIDで使用できますが、出力されたファイルは使用できないかもしれません。
--fullraw | コンテナ情報を含まない、rawデータをファイルに抽出します。トラックがCodecPrivate要素のヘッダ情報を含む場合、その内容はファイルの先頭に書き出されます。このモードは、mkvextract(1)がサポートしないCodecIDにも使用できますが、出力されたファイルは使用できないかもしれません。
TID:outname | IDがTIDであるトラックがソースファイルに存在すれば、outnameに抽出します。このオプションは複数回指定できます。トラックIDは、mkvmerge(1)に--identifyを指定して実行した際の出力に表示されるものと同じです。 各出力ファイル名は一回しか使用されません。RealAudio及びRealVideoトラックは例外です。もし、異なるトラックに同じファイル名が指定された場合、それらは同一のファイルに保存されます。例:
    $ mkvextract tracks input.mkv 1:output-two-tracks.rm 2:output-two-tracks.rm

## 2.3. タグ抽出モード

書式: mkvextract tags source-filename [options]

抽出されたタグは、出力がリダイレクトされていなればコンソールに出力されます。(詳細については、出力リダイレクトについてのセクションを参照ください。)

## 2.4. 添付ファイル抽出モード

書式: mkvextract attachments source-filename [options] AID1:outname1 [AID2:outname2 ...]

Option | Description
--- | ---
AID:outname | IDがAIDである添付ファイルがもしソースファイルに存在すれば抽出します。outnameが指定されない場合、Matroska(tm)に格納された添付ファイルの名前が使用されます。このオプションは複数回指定できます。添付ファイルIDは、mkvmerge(1)に--identifyオプションを指定したときに出力されるものと同じです。

## 2.5. チャプタ抽出モード

書式: mkvextract chapters source-filename [options]

Option | Description
--- | ---
-s, --simple | チャプタ情報をOGM toolsで使用される、シンプルフォーマット(CHAPTER01=..., CHAPTER01NAME=...)で出力します。このモードでは、一部の情報は破棄されます。デフォルトでは、チャプタはXMLフォーマットで出力されます。

抽出されたチャプタは、出力がリダイレクトされていなればコンソールに出力されます。(詳細については、出力リダイレクトについてのセクションを参照ください。)

## 2.6. CUEシート抽出モード

書式: mkvextract cuesheet source-filename [options]

抽出されたCUEシートは、出力がリダイレクトされていなればコンソールに出力されます。(詳細については、出力リダイレクトについてのセクションを参照ください。)

## 2.7. タイムコード抽出モード

書式: mkvextract timecodes_v2 source-filename [options] TID1:dest-filename1 [TID2:dest-filename2 ...]

抽出されたタイムコードは、出力がリダイレクトされていなればコンソールに出力されます。(詳細については、出力リダイレクトについてのセクションを参照ください。)

Option | Description
--- | ---
TID:outname | IDがTIDであるトラックがソースファイルに存在すれば、タイムコードをoutnameに抽出します。このオプションは複数回指定できます。トラックIDは、mkvmerge(1)に--identifyを指定して実行した際の出力に表示されるものと同じです。 例:
    $ mkvextract timecodes_v2 input.mkv 1:tc-track1.txt 2:tc-track2.txt

# 3. 出力リダイレクト

いくつかのモードでは、mkvextract(1)は抽出されたデータをコンソールに出力します。一般的に、このデータをファイルに書き出すには二つの方法があります。一つはシェルによって提供され、もう一つはmkvextract(1)自体によって提供されます。

シェルビルトインのリダイレクト機構は、コマンドラインに'> output-filename.ext'を追加することで使用できます。例:

    $ mkvextract tags source.mkv > tags.xml

mkvextract(1)自体のリダイレクトは、--redirect-outputオプションを指定することで使用できます。例:

    $ mkvextract tags source.mkv --redirect-output tags.xml

Note:

Windowsでは、--redirect-outputオプションを使用するべきでしょう。cmd.exeは、特殊文字を出力ファイルに書き出す前に処理してしまい、出力が壊れる虞があります。

# 4. 出力ファイルフォーマット

出力ファイルのフォーマットの決定は、トラックの種類によって決まり、出力ファイル名の拡張子は使用されません。現在、以下の種類のトラックがサポートされています。

Option | Description
--- | ---
V_MPEG4/ISO/AVC | H.264/AVCビデオトラックは、H.264エレメンタリ・ストリームに書き出されます。これは例えばGPAC(tm)パッケージに含まれる、MP4Box(tm)などにより処理できます。
V_MS/VFW/FOURCC | このCodecIDをもつ、固定FPSビデオトラックはAVIファイルに書き出されます。
V_REAL/* | RealVideo(tm)トラックは、RealMedia(tm)ファイルに書き出されます。
A_MPEG/L3, A_AC3 | これらは、生のMP3ファイル及びAC3ファイルに抽出されます。
A_PCM/INT/LIT | PCMRawデータは、WAVファイルに書き出されます。
A_AAC/MPEG2/*, A_AAC/MPEG4/*, A_AAC | 全てのAACファイルは、ADTSヘッダを各パケットの前に追加されたうえでAACファイルに書き出されます。ADTSヘッダは、廃止予定であるエンファシスフィールドを含みません。
A_VORBIS | Vorbis audioはOggVorbis(tm)ファイルに書き出されます。
A_REAL/* | RealAudio(tm)トラックはRealMedia(tm)ファイルに書き出されます。
A_TTA1 | TrueAudio(tm)トラックはTTAファイルに書き出されます。Matroska(tm)のタイムコード精度の上限のため、抽出されたファイルのヘッダは、data_lengthフィールド(ファイルに含まれる総サンプル数)とCRCについては不正確になります。
S_TEXT/UTF8 | シンプル・テキスト字幕はSRTファイルに書き出されます。
S_TEXT/SSA, S_TEXT/ASS | SSA及びASSテキスト字幕は、それぞれSSA、ASSファイルに書き出されます。
S_KATE | Kate(tm)ストリームはOgg(tm)コンテナに格納されます。
タグ | タグは、XMLフォーマットに変換されます。このフォーマットはmkvmerge(1)でタグを読み込む際のフォーマットと同じです。
添付ファイル | 添付ファイルはそのままの形式で出力ファイルに書き出されます。変換等の処理は全く行われません。
チャプタ | チャプタはXMLフォーマットに変換されます。このフォーマットはmkvmerge(1)がチャプタを読み込む際のフォーマットと同じです。他にも、簡略化されたOGMスタイルのフォーマットで出力することもできます。
タイムコード | タイムコードはまず整列された後に、mkvmerge(1)で読み込むことのできる timecode v2 形式に準拠するファイルに書き出されます。他の形式(v1, v3, v4)への抽出はサポートされていません。

# 5. 返り値

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

- 0 -- この返り値は抽出が成功したことを意味します。

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

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

# 6. テキスト中の特殊文字をエスケープする

特殊文字をエスケープしなければならない、あるいはすべき場所が少しだけあります。エスケープのルールは単純です：エスケープする必要のある各文字を、バックスラッシュ（Windows上の日本語フォントでは\記号）の後ろに違う文字が1つついたものと入れ替えます。

ルール：' '（半角スペース）は'\s'に、'"'（ダブルクォーテーション）は'\2'に、':'は'\c'に、'#'は'\h'に、そして'\'それ自体は'\\'になります。

# 7. 環境変数

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

Option | Description
--- | ---
MKVTOOLNIX_DEBUGとその短縮形MTX_DEBUG | その内容は、あたかも--debugオプション経由で渡されたかのように扱われます。
MKVTOOLNIX_ENGAGEとその短縮形MTX_ENGAGE | その内容は、あたかも--debugオプション経由で渡されたかのように扱われます。
MKVTOOLNIX_OPTIONSとその短縮形MTX_OPTIONS | 内容は空白で分割されます。得られた一部の文字列は、あたかもそれがコマンドラインオプションとして渡されたかのように扱われます。もし特殊な文字（例：空白）を渡す必要があるなら、それらをエスケープする必要があります（テキスト中の特殊文字のエスケープについてのセクションをご覧ください）。

# 8. 関連項目

mkvmerge(1), mkvinfo(1), mkvpropedit(1), mmg(1)

# 9. ウェブ

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