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

Table of contents

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テキスト字幕は、それぞれSSAASSファイルに書き出されます。

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つの返り値を返します。

7. 環境変数

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

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のホームページから取得できます。