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

# 1. 書式

mkvextract {対象ファイル名} {モード1} オプション 抽出仕様1 モード2 オプション 抽出仕様2 …

# 2. 説明

このプログラムはMatroska(tm)ファイルから特定部分を抽出して他の利便な形式に書き出します。第1引数は抽出する対象のファイル名であり、Matroska(tm)ファイルでなくてはなりません。

他の全ての引数はそれぞれ、定められた抽出モードに切り替える、現行で有効モードのオプションを変更する、又はどのファイルに何を抽出して書き出すかを指定します。一度のmkvextract呼出しで複数のモードが使え、単一のコマンドラインで複数種類の抽出が可能です。ほとんどのオプションは特定のモードでのみ利用でき、いくつかのオプションは全てのモードに適用できます。

現在次の抽出に対応しています。トラック・タグ・添付ファイル・チャプター・CUEシート・タイムスタンプ及びキュー。

## 2.1. 共通オプション

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

Option | Description
--- | ---
-f, --parse-fully | 解析モードを'full'に設定します。デフォルトのモードでは、ソースファイルの必要な要素を見つけるのにファイル全体を解析せずにメタシーク要素を使用します。99%のケースではこれで十分ですが、メタシーク要素が含まれていなかったり壊れていたりするファイルにはこのモードを使用しなければならないかもしれません。高速スキャンが数秒しかかからないのに対して、ファイルをフルスキャンするのには数分かかることがあります。
--command-line-charset 文字コード | コマンドライン文字列の文字コードを指定します。デフォルトは、システムの現在のロケールの文字コードになります。
--output-charset 文字コード | 出力する文字コードを指定します。デフォルトは、システムの現在のロケールの文字コードになります。
-r, --redirect-output file-name | 全てのメッセージを、コンソールではなくfile-nameに書き出します。出力をリダイレクトすることで同じことが容易に可能ですが、このオプションが必要になることもあります。ターミナルが出力を、ファイルに書き出す前に処理してしまう場合などです。--output-charsetによって指定された文字コードは尊重されます。
--flush-on-close | プログラムが、書き込み用に開かれたファイルを保存する際に、RAM上にある全データをストレージに書き出すようにします。停電時のデータ損失を防いだり、OSやデバイスに固有の問題を避けるのに用います。欠点として、mkvmergeが終了する前に全データをストレージに書き出し終わるまで待機する為に、多重化に長い時間が掛かります。MKVToolNixバグ追跡システムの第2469号及び第2480号に長所・短所に関する詳細な議論があります。
--ui-language コード | 指定したコード言語（例 日本語なら「ja_JP」）での翻訳を強制します。codeに「list」を指定すると、利用可能な翻訳の一覧を出力します。
--abort-on-warnings | 最初の警告が発された後プログラムを停止するよう伝えます。プログラムの終了コードは1になります。
--debug 項目 | 特定の機能のデバッグをオンにします。このオプションは開発者にのみ有用です。
--engage 機能 | 実験的機能をオンにします。利用可能な機能のリストは mkvextract --engage listで得られます。これらの機能は通常の状況で使用されることを意図されていません。
--gui-mode | GUIモードに切り替えます。このモードではGUI操作の状況を伝える特殊な形式の行が出力されます。これらの通知は「#GUI#通知内容」という形式に従います。「#GUI#通知内容#キー1=値1#キー2=値2...」のようにキー・値の組が通知内容に続くことがあります。通知内容やキーは翻訳されることなく、常に英語で出力されます。
-v, --verbose | 出力が冗長になり、Matroska(tm)のエレメントにとって重要なこと全てを、読み込まれるつどに表示していきます。
-h, --help | コマンド書式情報を出力して終了します。
-V, --version | バージョン情報を出力して終了します。
@オプションファイル.json | オプションファイルから追加のコマンドライン引数を読み込みます。このようなファイルに対応している形式の詳細についてはmkvmerge(1)のマニュアルページ「オプションファイル」節をご覧ください。

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

書式: mkvextract 対象ファイル名 tracks [オプション] TID1:出力ファイル名1 [TID2:出力ファイル名2 ...]

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

Option | Description
--- | ---
-c 文字コード | 直後の字幕トラックの出力文字コードを指定します。直後のトラック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 input.mkv tracks 0:video.h264 2:output-two-vobsub-tracks.idx 3:output-two-vobsub-tracks.idx

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

書式: mkvextract 対象ファイル名 attachments [オプション] AID1:出力名1 [AID2:出力名2 ...]

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

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

書式: mkvextract 対象ファイル名 chapters [オプション] 出力ファイル名.xml

Option | Description
--- | ---
-s, --simple | チャプタ情報をOGM toolsで使用される、シンプルフォーマット(CHAPTER01=..., CHAPTER01NAME=...)で出力します。このモードでは、一部の情報は破棄されます。デフォルトでは、チャプタはXMLフォーマットで出力されます。
--simple-language 言語 | 単純形式が有効の場合、mkvextract(1)はたとえチャプタ素片が複数のチャプタ名を含んでいる場合でも検出したチャプタ素片毎に一項目のみを出力します。既定ではmkvextract(1)は言語に関係なく各素片に見付かった最初のチャプタ名を使用します。 このオプションを用いて素片が複数のチャプタ名を含んでいた場合に出力されるチャプタ名を定められます。言語はJIS X 0412-1又はJIS X 0412-2の言語名コードでなくてはなりません。

チャプタは指定された出力ファイルに書き込まれます。既定ではmkvmerge(1)が解釈できるXML形式が用いられます。ファイル中にチャプタが見付からなかった場合、ファイルは出力されません。

## 2.5. タグ抽出モード

書式: mkvextract 対象ファイル名 tags [オプション] 出力ファイル名.xml

タグは指定された出力ファイルに既定ではmkvmerge(1)が解釈できるXML形式で書き込まれます。ファイル中にタグが見付からなかった場合、ファイルは出力されません。

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

書式: mkvextract 対象ファイル名 cuesheet [オプション] 出力ファイル名.cue

キューシートは指定された出力ファイルに書き込まれます。ファイル中にキューシートが見付からなかった場合、ファイルは出力されません。

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

書式: mkvextract 対象ファイル名 timestamps_v2 [オプション] TID1:出力ファイル名1 [TID2:出力ファイル名2 ...]

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

## 2.8. キュー抽出モード

書式: mkvextract 対象ファイル名 cues [オプション] TID1:出力ファイル名1 [TID2:出力ファイル名2 ...]

Option | Description
--- | ---
TID:出力ファイル名 | 識別子がTIDのトラックのキューを、そのようなトラックが対象ファイルに存在していれば、出力名ファイルに抽出します。このオプションは複数回与えることができます。トラック識別子はmkvmerge(1)の--identifyオプションで出力されたものと同じであり、CueTrack要素に含まれる数値ではありません。

形式オプションは単純なテキスト形式です。CuePoint要素とキー=値の組毎に一行です。追加の要素（例: CueDuration）がCuePoint中に表われなかった場合、値としてダッシュが出力されます。

例:

    timestamp=00:00:13.305000000 duration=- cluster_position=757741 relative_position=11

指定できるキーは次の通りです。

Option | Description
--- | ---
timestamp | キューポイントのナノ秒精度のタイムスタンプ。HH:MM:SS.nnnnnnnnn形式。この要素は常に設定されています。
duration | キューポイントのナノ秒精度のタイムスタンプ。HH:MM:SS.nnnnnnnnn形式。
cluster_position | 被参照要素を含んだクラスタが始まるMatroska(tm)ファイル内部の絶対バイト位置。 Note: Inside the Matroska(tm) file the CueClusterPosition is relative to the segment's data start offset. The value output by mkvextract(1)'s cue extraction mode, however, contains that offset already and is an absolute offset from the beginning of the file.
relative_position | The relative position in bytes inside the cluster where the BlockGroup or SimpleBlock element the cue point refers to starts. Note: Inside the Matroska(tm) file the CueRelativePosition is relative to the cluster's data start offset. The value output by mkvextract(1)'s cue extraction mode, however, is relative to the cluster's ID. The absolute position inside the file can be calculated by adding cluster_position and relative_position.

例:

    $ mkvextract input.mkv cues 1:cues-track1.txt 2:cues-track2.txt

# 3. 例

Extracting both chapters and tags in their respective XML formats at the same time:

    $ mkvextract movie.mkv chapters movie-chapters.xml tags movie-tags.xml

Extracting a couple of tracks and their respective timestamps at the same time:

    $ mkvextract "Another Movie.mkv" tracks 0:video.h265 "1:main audio.aac" "2:director's comments.aac" timestamps_v2 "0:timestamps video.txt" "1:timestamps main audio.txt" "2:timestamps director's comments.txt"

チャプターをOgg/OGM形式で展開し、テキスト字幕を別の文字コードに再符号化します。

    $ mkvextract "My Movie.mkv" chapters --simple "My Chapters.txt" tracks -c MS-ANSI "2:My Subtitles.srt"

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

MKVToolNixスイートの全てのツールが文字コード変換・入出力に係る文字コード・コマンドライン及びコンソール上の文字コードをどのように処理するかについての詳細な議論については、mkvmerge(1) man ページの同名の節を参照して下さい。

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

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

Option | Description
--- | ---
A_AAC/MPEG2/*, A_AAC/MPEG4/*, A_AAC | 全てのAACファイルは、ADTSヘッダを各パケットの前に追加されたうえでAACファイルに書き出されます。ADTSヘッダは、廃止予定であるエンファシスフィールドを含みません。
A_AC3, A_EAC3 | These will be extracted to raw AC-3 files.
A_ALAC | ALAC tracks are written to CAF files.
A_DTS | These will be extracted to raw DTS files.
A_FLAC | FLAC tracks are written to raw FLAC files.
A_MPEG/L2 | MPEG-1 Audio Layer II streams will be extracted to raw MP2 files.
A_MPEG/L3 | These will be extracted to raw MP3 files.
A_OPUS | Opus(tm) tracks are written to OggOpus(tm) files.
A_PCM/INT/LIT, A_PCM/INT/BIG | Raw PCM data will be written to a WAV file. Big-endian integer data will be converted to little-endian data in the process.
A_REAL/* | RealAudio(tm)トラックはRealMedia(tm)ファイルに書き出されます。
A_TRUEHD, A_MLP | These will be extracted to raw TrueHD/MLP files.
A_TTA1 | TrueAudio(tm)トラックはTTAファイルに書き出されます。Matroska(tm)のタイムコード精度の上限のため、抽出されたファイルのヘッダは、data_lengthフィールド(ファイルに含まれる総サンプル数)とCRCについては不正確になります。
A_VORBIS | Vorbis audioはOggVorbis(tm)ファイルに書き出されます。
A_WAVPACK4 | WavPack(tm) tracks are written to WV files.
S_HDMV/PGS | PGS subtitles will be written as SUP files.
S_HDMV/TEXTST | TextST subtitles will be written as a special file format invented for mkvmerge(1) and mkvextract(1).
S_KATE | Kate(tm)ストリームはOgg(tm)コンテナに格納されます。
S_TEXT/SSA, S_TEXT/ASS, S_SSA, S_ASS | SSA及びASSテキスト字幕は、それぞれSSA、ASSファイルに書き出されます。
S_TEXT/UTF8, S_TEXT/ASCII | シンプル・テキスト字幕はSRTファイルに書き出されます。
S_VOBSUB | VobSub(tm) subtitles will be written as SUB files along with the respective index files, as IDX files.
S_TEXT/USF | USF text subtitles will be written as USF files.
S_TEXT/WEBVTT | WebVTT text subtitles will be written as WebVTT files.
V_MPEG1, V_MPEG2 | MPEG-1 and MPEG-2 video tracks will be written as MPEG elementary streams.
V_MPEG4/ISO/AVC | H.264/AVCビデオトラックは、H.264エレメンタリ・ストリームに書き出されます。これは例えばGPAC(tm)パッケージに含まれる、MP4Box(tm)などにより処理できます。
V_MPEG4/ISO/HEVC | H.265 / HEVC video tracks are written to H.265 elementary streams which can be processed further with e.g. MP4Box(tm) from the GPAC(tm) package.
V_MS/VFW/FOURCC | このCodecIDをもつ、固定FPSビデオトラックはAVIファイルに書き出されます。
V_REAL/* | RealVideo(tm)トラックは、RealMedia(tm)ファイルに書き出されます。
V_THEORA | Theora(tm) streams will be written within an Ogg(tm) container
V_VP8, V_VP9 | VP8 / VP9 tracks are written to IVF files.
タグ | タグは、XMLフォーマットに変換されます。このフォーマットはmkvmerge(1)でタグを読み込む際のフォーマットと同じです。
添付ファイル | 添付ファイルはそのままの形式で出力ファイルに書き出されます。変換等の処理は全く行われません。
チャプタ | チャプタはXMLフォーマットに変換されます。このフォーマットはmkvmerge(1)がチャプタを読み込む際のフォーマットと同じです。他にも、簡略化されたOGMスタイルのフォーマットで出力することもできます。
タイムコード | タイムコードはまず整列された後に、mkvmerge(1)で読み込むことのできる timestamp v2 形式に準拠するファイルに書き出されます。他の形式(v1, v3, v4)への抽出はサポートされていません。

# 6. 返り値

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

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

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

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

# 7. 環境変数

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

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

# 8. 関連項目

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

# 9. ウェブ

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