mkvextract -- Matroska(tm)ファイルからトラックを抽出し、他の形式のファイルとして保存する

# 1. 書式

mkvextract {ソースファイル名} {モード1} オプション 抽出指定1 モード2 オプション 抽出指定2 ...

# 2. 説明

このプログラムは、Matroska(tm)ファイルから特定の部分を抽出し、他の利用可能な形式に書き出します。第1引数はソース（抽出元）のファイル名であり、これはMatroska(tm)ファイルである必要があります。

残りの全引数はそれぞれ、特定の抽出モードに切り替えるか、現行で有効なモードのオプションを変更するか、または抽出する内容と書き出し先のファイルを指定します。mkvextractの同一呼出し内で複数のモードが利用でき、一度の実行で複数種類の内容を抽出できます。ほとんどのオプションは特定のモードでしか利用できませんが、いくつかのオプションは全てのモードに適用できます。

現在は、トラック、タグ、添付ファイル、チャプター、CUEシート、タイムスタンプ、およびキュー（cues）の抽出をサポートしています。

## 2.1. 共通オプション

以下のオプションはすべてのモードで使用可能であり、このセクションでのみ説明します。

Option | Description
--- | ---
-f, --parse-fully | 解析モードを「full」に設定します。デフォルトでは、ファイル全体を解析せずにメタシーク（meta seek）要素を使用して必要な要素を特定します。99%のケースではこれで十分ですが、メタシーク要素がないファイルや破損しているファイルでは、このモードを使用する必要があります。高速スキャンは数秒で終わりますが、フルスキャンには数分かかる場合があります。
--command-line-charset character-set | コマンドラインで指定された文字列の変換に使用する文字セットを設定します。デフォルトはシステムの現在のロケールに基づいた文字セットです。
--output-charset 文字セット | 出力される文字列を変換するのに用いる文字集合を設定します。既定では機構の現行地域特性で指定している文字集合になります。
-r, --redirect-output ファイル名 | 全ての通報を操作卓にではなくファイル名のファイルに書き出します。出力を転送することで同じことが簡単にできるものの、このオプションが必要な場合は存在します:ファイルに転送する前に端末が出力を再解釈してしまう場合です。--output-charsetで設定した文字集合を優先します。
--no-bom | Normally text files that are created & encoded in one of the UTF variants will start with a byte order marker (BOM). Using this option disables writing that byte order marker.
--flush-on-close | 書き込み用に開いたファイルを閉じる際に、プログラムが主記憶上に貯まった全データを補助記憶に排出 (flush) するようにします。停電時のデータ損失を防いだり、運用機構や機器特有の問題を避ける目的で使えるでしょう。欠点として、mkvmergeが終了前に全データを補助記憶に書き込み終わるまで待機するせいで多重化に長い時間を要します。MKVToolNixの不具合追跡局の議題2469号および2480号に、この挙動の長短について詳細な議論があります。
--ui-language コード | 用いる翻訳を指定した言語符号のものに強制します（例えば「de_DE」ならドイツ語翻訳です）。符号に「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)のmanページにある「オプションファイル」のセクションを参照してください。

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

構文: mkvextract ソースファイル名 tracks [オプション] TID1:出力先ファイル名1 [TID2:出力先ファイル名2 ...]

以下の命令行オプションは 'tracks' 抽出モードにおける各トラックごとに利用可能です。これらのオプションは適用先のトラック指定（後述）の前に存在する必要があります。

Option | Description
--- | ---
-c 文字セット | 次に指定するテキスト字幕トラックの変換先文字セットを設定します。このオプションは、直後のトラックIDがテキスト字幕トラックである場合にのみ有効です。デフォルトはUTF-8です。
--blockadd レベル | 指定した水準までのBlockAdditionのみを保持します。既定では全ての水準を保持します。このオプションの効果があるのはWAVPACK4といった特定の符号器のみです。
--cuesheet | mkvextract(1)に対し、直後のトラックのチャプター情報とタグデータからCUEシートを抽出させます。出力ファイル名は、トラックの出力名に「.cue」を付加したものになります。
--raw | 生データを、コンテナ情報を全く含まずにファイルに出力します。--fullrawの指定下とは違い、この指定下ではCodecPrivate要素の内容をファイルに書き出すことはありません。このモードは、mkvextract(1)が対応していないものであっても全てのCodecIDsで動作しますが、結果のファイルが利用できるものとは限りません。
--fullraw | 生データを、コンテナ情報を全く含まずにファイルに出力します。トラックがCodecPrivate頭部要素を含む場合、始めにその要素の内容をファイルに書き出します。このモードは、mkvextract(1)が対応していないものであっても全てのCodecIDsで動作しますが、結果のファイルが利用できるものとは限りません。
TID:出力名 | 指定したID（TID）を持つトラックがソースファイル内に存在する場合、それをファイル（出力名）に抽出します。このオプションは複数回指定できます。トラック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:出力名 | 識別子がTIDの添付ファイルが原ファイルに存在する場合、その添付ファイルを出力名ファイルに抽出するようにします。出力名が空の場合は、代わりに原Matroska(tm)ファイル内部の添付ファイルの名前を用います。このオプションは複数回指定できます。添付ファイル識別子はmkvmerge(1)の--identifyオプションの出力結果と同じものです。

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

構文: mkvextract ソースファイル名 chapters [オプション] 出力ファイル名.xml

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

チャプターは指定された出力ファイルに書き込まれます。デフォルトでは mkvmerge(1) が対応しているXML形式が使用されます。ファイル内にチャプターが見つからない場合、出力ファイルは作成されません。

## 2.5. タグ抽出モード

構文: mkvextract ソースファイル名 tags [オプション] 出力ファイル名.xml

Option | Description
--- | ---
-T, --no-track-tags | トラック固有ではないタグのみをエクスポートします。

タグは、mkvmerge(1) が対応しているXML形式で出力ファイルに書き込まれます。ファイル内にタグが見つからない場合、出力ファイルは作成されません。

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

構文: mkvextract ソースファイル名 cuesheet [オプション] 出力ファイル名.cue

CUEシートを指定された出力ファイルに書き込みます。ファイル内にチャプターやタグが見つからない場合、出力ファイルは作成されません。

## 2.7. タイムスタンプ抽出モード

構文: mkvextract ソースファイル名 timestamps_v2 [オプション] TID1:出力先ファイル名1 [TID2:出力先ファイル名2 ...]

Option | Description
--- | ---
TID:出力名 | 指定したID（TID）を持つトラックがソースファイル内に存在する場合、そのタイムスタンプをファイル（出力名）に抽出します。このオプションは複数回指定できます。トラック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:出力先ファイル名 | 指定したID（TID）を持つトラックのキューをファイル（出力名）に抽出します。このオプションは複数回指定できます。使用するトラックIDは mkvmerge(1) の --identify オプションで出力されるものであり、CueTrack 要素に含まれる番号ではありません。

出力形式はシンプルなテキスト形式で、CuePoint 要素ごとに1行ずつ、key=value のペアで構成されます。CuePoint 内にオプション要素（CueDuration など）が存在しない場合は、値としてハイフン（-）が出数されます。

例:

    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: Matroska(tm)ファイルの内部では、CueClusterPosition はセグメントのデータ開始オフセットからの相対位置です。しかし、mkvextract(1) のキュー抽出モードで出力される値にはそのオフセットがあらかじめ加算されており、ファイル冒頭からの絶対オフセット（絶対位置）になります。
relative_position | キューポイントが参照する BlockGroup または SimpleBlock 要素が始まる、クラスター内での相対バイト位置です。 Note: Matroska(tm)ファイルの内部では、CueRelativePosition はクラスターのデータ開始オフセットからの相対位置です。しかし、mkvextract(1) のキュー抽出モードで出力される値はクラスターIDからの相対位置になります。ファイル内の絶対位置は、cluster_position と relative_position を足すことで計算できます。

例:

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

# 3. 例

チャプターとタグを、それぞれのXML形式で同時に抽出する例：

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

複数のトラックとそれぞれのタイムスタンプを同時に抽出する例：

    $ 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 ヘッダーには、非推奨の emphasis フィールドは含まれません。
A_AC3, A_EAC3 | これらは生の AC-3 ファイルとして抽出されます。
A_ALAC | ALAC トラックは CAF ファイルとして書き出されます。
A_DTS | これらは生の DTS ファイルとして抽出されます。
A_FLAC | FLAC トラックは生の FLAC ファイルとして書き出されます。
A_MPEG/L2 | MPEG-1 Audio Layer II ストリームは、生の MP2 ファイルとして抽出されます。
A_MPEG/L3 | これらは生の MP3 ファイルとして抽出されます。
A_OPUS | Opus(tm) トラックは OggOpus(tm) ファイルとして書き出されます。
A_PCM/INT/LIT, A_PCM/INT/BIG | 生の PCM データは WAV ファイルとして書き出されます。その際、ビッグエンディアンの整数データはリトルエンディアンに変換されます。
A_REAL/* | RealAudio(tm) トラックは RealMedia(tm) ファイルとして書き出されます。
A_TRUEHD, A_MLP | これらは生の TrueHD/MLP ファイルとして抽出されます。
A_TTA1 | TrueAudio(tm) トラックは TTA ファイルとして書き出されます。Matroska(tm) のタイムスタンプ精度の制限により、抽出されたファイルのヘッダーにおける data_length（ファイル内の総サンプル数）および CRC の2つのフィールドは、元のものとは異なる値になることに注意してください。
A_VORBIS | Vorbis 音声は OggVorbis(tm) ファイルとして書き出されます。
A_WAVPACK4 | WavPack(tm) トラックは WV ファイルとして書き出されます。
S_HDMV/PGS | PGS 字幕は SUP ファイルとして書き出されます。
S_HDMV/TEXTST | TextST 字幕は、mkvmerge(1) および 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) 字幕は、 SUB ファイルと、それに対応するインデックスファイル（IDX ファイル）として書き出されます。
S_TEXT/USF | USF テキスト字幕は、 USF ファイルとして書き出されます。
S_TEXT/WEBVTT | WebVTT テキスト字幕は、 WebVTT ファイルとして書き出されます。
V_MPEG1, V_MPEG2 | MPEG-1 および MPEG-2 ビデオトラックは、 MPEG エレメンタリ・ストリームとして書き出されます。
V_MPEG4/ISO/AVC | H.264 / AVC ビデオトラックは、 H.264 エレメンタリ・ストリームとして書き出されます。これらは、GPACパッケージの MP4Box(tm) などを使用してさらに処理することが可能です。
V_MPEG4/ISO/HEVC | H.265 / HEVC ビデオトラックは、 H.265 エレメンタリ・ストリームとして書き出されます。これらは、GPACパッケージの MP4Box(tm) などを使用してさらに処理することが可能です。
V_MS/VFW/FOURCC | この CodecID を持つ固定フレームレート（FPS）のビデオトラックは、 AVI ファイルとして書き出されます。
V_REAL/* | RealVideo(tm) トラックは、 RealMedia(tm) ファイルとして書き出されます。
V_THEORA | Theora(tm) ストリームは、 Ogg(tm) コンテナ内に書き出されます
V_VP8, V_VP9 | VP8 / VP9 トラックは、 IVF ファイルとして書き出されます。
タグ | タグは XML 形式に変換されます。この形式は、 mkvmerge(1) がタグの読み込みにサポートしているものと同じです。
添付ファイル | 添付ファイルはそのままの形式で出力ファイルに書き出されます。変換処理などは一切行われません。
チャプター | チャプターは XML 形式に変換されます。この形式は、 mkvmerge(1) がチャプターの読み込みにサポートしているものと同じです。あるいは、シンプルな OGM 形式の簡易版として出力することも可能です。
タイムスタンプ | 時刻印はまず整列され、mkvmerge(1)が読み込めるように時刻印v2形式準拠ファイルとして書き出されます。その他の形式（v1、v3およびv4）の抽出には対応していません。

# 6. 終了コード

mkvextract(1) は、以下の3つの終了コードのいずれかを返します：

- 0 -- 抽出が正常に完了したことを意味します。

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

- 2 -- この返り値は、誤りが発生し、誤り通報を出力した直後にmkvextract(1)が終了したことを示します。誤り通報の原因は命令行の間違いやファイル読み/書き誤り、壊れたファイルなど多岐に渡ります。

# 7. 環境変数

mkvextract(1) は、システムのロケールを決定する標準的な環境変数（LANG や LC_* ファミリなど）を使用します。その他の追加変数は以下の通りです：

Option | Description
--- | ---
MKVEXTRACT_DEBUG, MKVTOOLNIX_DEBUG およびその短縮形 MTX_DEBUG | 指定された内容は、 --debug オプションを介して渡されたものとして処理されます。
MKVEXTRACT_ENGAGE, MKVTOOLNIX_ENGAGE およびその短縮形 MTX_ENGAGE | 指定された内容は、 --engage オプションを介して渡されたものとして処理されます。

# 8. 関連項目

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

# 9. WWW

最新バージョンは常に MKVToolNix のホームページ から入手できます。