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

# 1. 書式

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

# 2. 説明

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

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

現在次の抽出に対応しています。トラック・標識・附属品・楽章・CUE用紙・時刻印および演奏指令。

## 2.1. 共通オプション

以下のオプションは全てのモードで利用可能であり、この節で一度だけ説明します。

Option | Description
--- | ---
-f, --parse-fully | 分析モードを 'full' に設定します。原ファイルから要求された要素の位置を捜すのに、既定モードでは、ファイル全体を解析せずにメタ送り要素を用います。99%の場合はこれで十分です。しかし、メタ送り要素がないファイルや破損しているファイルに対しては、このモードを用いる必要があるかもしれません。既定の高速走査には数秒しかからない一方で、この全体走査には数分かかることもあります。
--command-line-charset 文字集合 | 命令行から与えた文字列を変換するのに用いる文字集合を設定します。既定では機構の現行地域特性で指定している文字集合になります。
--output-charset 文字集合 | 出力される文字列を変換するのに用いる文字集合を設定します。既定では機構の現行地域特性で指定している文字集合になります。
-r, --redirect-output ファイル名 | 全ての通報を操作卓にではなくファイル名のファイルに書き出します。出力を転送することで同じことが簡単にできるものの、このオプションが必要な場合は存在します:ファイルに転送する前に端末が出力を再解釈してしまう場合です。--output-charsetで設定した文字集合を優先します。
--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)便覧中の「オプションファイル」という節をご覧ください。

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

構文: mkvextract 対象ファイル名 tracks [オプション] TID1:宛先ファイル名1 [TID2:宛先ファイル名2 ...]

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

Option | Description
--- | ---
-c 文字集合 | 次の文字字幕トラックに変換する際の文字集合を設定します。次のトラック識別子の対象が文字字幕トラックである場合にのみ有効です。既定ではUTF-8になります。
--blockadd 水準 | 指定した水準までのBlockAdditionのみを保持します。既定では全ての水準を保持します。このオプションの効果があるのはWAVPACK4といった特定の符号器のみです。
--cuesheet | mkvextract(1)は直後のトラックの楽章情報と標識データからCUE用紙を抽出し、トラックの出力名に '.cue' を付けた名前のファイルに書き出します。
--raw | 生データを、コンテナ情報を全く含まずにファイルに出力します。--fullrawの指定下とは違い、この指定下ではCodecPrivate要素の内容をファイルに書き出すことはありません。このモードは、mkvextract(1)が対応していないものであっても全てのCodecIDsで動作しますが、結果のファイルが利用できるものとは限りません。
--fullraw | 生データを、コンテナ情報を全く含まずにファイルに出力します。トラックがCodecPrivate頭部要素を含む場合、始めにその要素の内容をファイルに書き出します。このモードは、mkvextract(1)が対応していないものであっても全てのCodecIDsで動作しますが、結果のファイルが利用できるものとは限りません。
TID:出力名 | 識別子がTIDのトラックが原ファイルに存在する場合、そのトラックを出力名ファイルに抽出するようにします。このオプションは複数回指定できます。トラック識別子は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 原ファイル名 附属品 [オプション] AID1:出力名1 [AID2:出力名2 ...]

Option | Description
--- | ---
AID:出力名 | 識別子がTIDの添付ファイルが原ファイルに存在する場合、その添付ファイルを出力名ファイルに抽出するようにします。出力名が空の場合は、代わりに原Matroska(tm)ファイル内部の添付ファイルの名前を用います。このオプションは複数回指定できます。添付ファイル識別子はmkvmerge(1)の--identifyオプションの出力結果と同じものです。

## 2.4. 楽章抽出モード

構文: mkvextract 原ファイル名 楽章 [オプション] 出力ファイル名.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 原ファイル名 標識 [オプション] 出力ファイル名.xml

標識は指定した出力ファイルに、mkvmerge(1)が理解できるXML形式で書き込まれます。ファイル中に標識が見付からなかった場合、出力ファイルを生成しません。

## 2.6. CUE用紙抽出モード

構文: mkvextract 原ファイル名 CUE用紙 [オプション] 出力ファイル名.cue

CUE用紙を指定した出力ファイルに書き込みます。ファイル中に楽章や標識が見付からなかった場合、出力ファイルを生成しません。

## 2.7. 時刻印抽出モード

構文: mkvextract 原ファイル名 時刻印v2 [オプション] TID1:宛先ファイル名1 [TID2:宛先ファイル名2 ...]

Option | Description
--- | ---
TID:出力名 | 識別子がTIDのトラック時刻印が原ファイルに存在する場合、そのトラックを出力名ファイルに抽出するようにします。このオプションは複数回指定できます。トラック識別子はmkvmerge(1)の--identifyオプションの出力結果と同じものです。 例:
    $ mkvextract input.mkv timestamps_v2 1:ts-track1.txt 2:ts-track2.txt

## 2.8. 演奏指令抽出モード

構文: mkvextract 原ファイル名 演奏指令 [オプション] TID1:宛先ファイル名1 [TID2:宛先ファイル名2 ...]

Option | Description
--- | ---
TID:宛先ファイル名 | 識別子がTIDのトラックの演奏指令が原ファイルに存在する場合、そのトラックを出力名ファイルに抽出するようにします。このオプションは複数回指定できます。トラック識別子はmkvmerge(1)の--identifyオプションの出力結果と同じものであり、TID要素に含まれる数字ではありません。

出力形式は単純な文章形式です: 一行はCuePoint要素とkey=valueの組ごとに成ります。任意要素（例: CueDuration）がCuePointに表われなかった場合、値として連字符を出力します。

例:

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

指定できる予約語は次の通りです。

Option | Description
--- | ---
時刻印 | 演奏指令点のナノ秒単位の時刻印。形式はHH:MM:SS.nnnnnnnnn。この要素は常に設定されています。
演奏時間 | 演奏指令点のナノ秒単位の演奏時間。形式はHH:MM:SS.nnnnnnnnn。
団体位置 | 被参照要素を含んだ団体が始まるMatroska(tm)ファイル内部の絶対バイト位置。 Note: Matroska(tm)ファイルの内部では、CueClusterPositionは余白開始位置の区分情報に相当します。mkvextract(1)の演奏指令抽出モードで出力する値は、しかしながら、その余白を既に加味しており、ファイル冒頭からの絶対バイト位置を表わします。
相対位置 | BlockGroupまたはSimpleBlock要素が開始するのに参照する指令位置である、団体内部の相対バイト位置。 Note: Matroska(tm)ファイルの内部では、CueClusterPositionは余白開始位置の区分情報に相当します。mkvextract(1)の演奏指令抽出モードで出力する値は、しかしながら、団体識別子に相当します。ファイル内部の絶対位置は、団体位置と絶対位置を足し合わせて計算できます。

例:

    $ 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)の便覧にある同名の節をご覧ください。

# 5. 出力ファイル形式

出力ファイルの形式の決定はトラック種類に基いており、出力ファイル名の拡張子には基づいていません。現在対応しているトラック種別は次の通りです:

Option | Description
--- | ---
A_AAC/MPEG2/*, A_AAC/MPEG4/*, A_AAC | 全てのAACファイルは、ADTS頭部を各パケットの前に追加されたうえでAACファイルに書き出されます。ADTS頭部には、非推奨の強調欄は含まれません。
A_AC3, A_EAC3 | これらは生AC-3ファイルに抽出されます。
A_ALAC | ALACトラックはCAFファイルに書き込まれます。
A_DTS | これらは生DTSファイルに抽出されます。
A_FLAC | FLACトラックはFLACファイルに書き込まれます。
A_MPEG/L2 | MPEG-1音声層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は元と異なったものになります。
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)字幕は対応する索引ファイルIDXに加えてSUBファイルとして書き出されます
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(tm)梱包に収録のMP4Box(tm)で更に処理できます。
V_MPEG4/ISO/HEVC | H.265・HEVC映像トラックはH.265初等流に書き出されます。これは例えばGPAC(tm)梱包に収録の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. 環境変数

mkvpropedit(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. ウェブ

最新版は常にMKVToolNixの拠点で入手できます。