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

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

# 1. 書式

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

# 2. 説明

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

All other arguments either switch to a certain extraction mode, change options for the currently active mode or specify what to extract into which file. Multiple modes can be used in the same invocation of mkvextract allowing the extraction of multiple things in a single pass. Most options can only be used in certain modes with a few options applying to all modes.

現在は、トラック、タグ、添付ファイル、チャプター、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 | 通常、UTF形式で作成・エンコードされたテキストファイルには、先頭にバイトオーダーマーク（BOM）が付与されます。このオプションを使用すると、BOMの書き込みを無効にします。
--flush-on-close | 書き込み用に開いたファイルを閉じる際、メモリ上にキャッシュされているすべてのデータをストレージにフラッシュ（強制書き出し）するように指示します。これは、停電時のデータ損失を防いだり、OSやドライバーの特定の問題を回避したりするために使用できます。欠点として、すべてのデータがストレージに書き込まれるまでmkvmergeが終了を待機するため、マルチプレクス処理に時間がかかります。メリットとデメリットの詳細については、MKVToolNixのバグトラッカーにある Issue #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 レベル | BlockAdditionsを指定したレベルまで保持します。デフォルトではすべてのレベルを保持します。このオプションは、WAVPACK4などの特定のコーデックにのみ影響します。
--cuesheet | mkvextract(1)に対し、直後のトラックのチャプター情報とタグデータからCUEシートを抽出させます。出力ファイル名は、トラックの出力名に「.cue」を付加したものになります。
--raw | コンテナデータを含まない生（RAW）データとしてファイルに抽出します。--fullraw フラグとは異なり、このフラグでは CodecPrivate 要素の内容は書き込まれません。このモードは、mkvextract(1)が本来サポートしていないものを含めすべての CodecID で動作しますが、作成されたファイルが必ずしも利用可能であるとは限りません。
--fullraw | コンテナデータを含まない生（RAW）データとしてファイルに抽出します。トラックにヘッダー要素が含まれる場合、最初に CodecPrivate 要素の内容を書き込みます。このモードは、mkvextract(1)が本来サポートしていないものを含めすべての CodecID で動作しますが、作成されたファイルが必ずしも利用可能であるとは限りません。

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:出力名 | 指定したID（AID）を持つ添付ファイルがソースファイル内に存在する場合、それをファイル（出力名）に抽出します。出力名が空の場合は、元のMatroska(tm)ファイル内での添付ファイル名が使用されます。このオプションは複数回指定できます。添付ファイルIDは、mkvmerge(1)の --identify オプションで出力されるものと同じです。

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

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

Option | Description
--- | ---
-s, --simple | チャプター情報を、OGMツールで使用されるシンプル形式（CHAPTER01=..., CHAPTER01NAME=...）でエクスポートします。このモードでは一部の情報が破棄されます。デフォルトでは、チャプターはXML形式で出力されます。
--simple-language 言語 | シンプル形式が有効な場合、mkvextract(1)は各チャプター要素（atom）に対して、複数の名前が含まれていても1つのエントリのみを出力します。デフォルトでは、言語に関わらず最初に見つかったチャプター名が使用されます。 このオプションを使用すると、チャプター要素に複数の名前が含まれている場合に、どの言語の名前を出力するかを指定できます。言語パラメータには、ISO 639-1 または ISO 639-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 -- 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 のホームページ から入手できます。