mkvpropedit -- 再多重化することなく、既存のMatroska(tm)ファイルのプロパティを修正する

# 1. 書式

mkvpropedit options {source-filename} {actions}

# 2. 説明

このプログラムは、既存のMatroska(tm)ファイルを解析し、そのプロパティのいくつかを修正します。そして、それらの修正を既存のファイルに書き込みます。プロパティの中で変更可能なのは、区分（セグメント）情報要素(例えばタイトル)と、トラック頭部(例えば言語コードや'既定トラック'フラグ、名前)です。

オプション:

Option | Description
--- | ---
-l, --list-property-names | 既知の編集可能なプロパティの名前、型(文字列、整数、真偽値等)、短い説明を一覧表示します。その後、プログラムは終了します。よって、source-filenameパラメータを指定する必要はありません。
-p, --parse-mode mode | 解析モードを設定します。「mode」パラメータは「fast」（既定）と「full」のどちらかを指定できます。「fast」モードはファイル全体を解析するのではなく、高次送り出し要素を使って原ファイル内の必要な要素を探します。99%の場合これで十分です。しかし、高次送り出し要素を含まないファイルや破損したファイルに対しては「full」解析モードを指定する必要があるかもしれません。「full」走査には数分かかることがありますが、「fast」走査には数秒しかかかりません。

トラック及び区分情報プロパティを扱うアクション:

Option | Description
--- | ---
-e, --edit selector | このオプション以降のadd、set、deleteアクションが適用されるMatroska(tm)ファイルセクション(区分情報または特定のトラックの頭部)を指定します。このオプションは、複数の要素を修正するために、複数回指定することができます。 既定では、mkvpropedit(1)は区分情報のセクションを編集します。 文法の完全な説明は、編集選択子のセクションを参照してください。
-a, --add name=value | nameで指定された名前のプロパティをvalueで指定した値で追加します。プロパティは、既にその名前のプロパティが存在する場合も追加されます。ほとんどのプロパティは一意的で、複数回追加できないことに注意してください。
-s, --set name=value | 見付けた全ての、プロパティ名がnameであるプロパティの値を、valueに設定します。そのようなプロパティが存在しないときは、プロパティは追加されます。
-d, --delete name | 見付けた全ての、プロパティ名がnameであるプロパティを削除します。いくつかのプロパティは必須で、削除できないことに注意してください。

タグ及びチャプタを扱うアクション:

Option | Description
--- | ---
-t, --tags selector:filename | filenameからのタグを、このファイル中のタグに追加、あるいは置換します。もしfilenameが空白なら、タグを削除します。mkvpropedit(1)は、mkvmerge(1)が読み込むのと同じXMLタグ形式を読み込みます。 selectorは、all、global、またはtrackのうちどれか一つを指定してください。allを指定すると、mkvpropedit(1)はファイル中の全てのタグを置換あるいは削除します。globalを指定すると、広域タグだけが置換あるいは削除されます。 trackを指定すると、mkvpropedit(1)は特定のトラックのタグを置換します。また、filenameから読み込まれたタグは、同じトラックに割り当てられます。トラックの指定は、編集選択子と同じ方法（以下を参照）で行います。例：--tags track:a1:new-audio-tags.xml.
--add-track-statistics-tags | ファイル内の全てのトラックの統計情報を計算し、新しい統計タグを追加します。既に統計タグが含まれている場合は更新されます。
--delete-track-statistics-tags | ファイルから既存の全てのトラック統計タグを削除します。ファイルに統計タグが含まれていない場合は修正されません。
-c, --chapters filename | filenameからのチャプタを、このファイル中のチャプタに追加、あるいは置換します。もしfilenameが空白なら、チャプタを削除します。mkvpropedit(1)は、mkvmerge(1)が読み込むのと同じXMLまたはシンプルチャプタ形式を読み込みます。

添付ファイルを扱うアクション:

Option | Description
--- | ---
--add-attachment filename | filenameから新しい添付ファイルを追加します。 このオプションの前に--attachment-nameオプションが使用されている場合、その値が新しい添付ファイルの名前として使用されます。そうでない場合は、filenameから派生した名前が使用されます。 このオプションの前に--attachment-mime-typeオプションが使用されている場合、その値が新しい添付ファイルのMIMEタイプとして使用されます。そうでない場合は、filenameの内容から自動検出されます。 このオプションの前に--attachment-descriptionオプションが使用されている場合、その値が新しい添付ファイルの説明として使用されます。そうでない場合は、説明は設定されません。 このオプションの前に--attachment-uidオプションが使用されている場合、その値が新しい添付ファイルのUIDとして使用されます。そうでない場合は、ランダムなUIDが自動的に生成されます。
--replace-attachment selector:filename | selectorに一致する一つ以上の添付ファイルを、ファイルfilenameで置換します。複数の既存の添付ファイルがselectorに一致する場合、それらすべての内容がfilenameの内容で置換されます。 selectorは4つの形式のいずれかをとることができます。これらについては、後述の添付ファイル選択子のセクションで説明します。 このオプションの前に--attachment-nameオプションが使用されている場合、その値が修正された各添付ファイルの新しい名前として設定されます。そうでない場合は、名前は変更されません。 このオプションの前に--attachment-mime-typeオプションが使用されている場合、その値が修正された各添付ファイルの新しいMIMEタイプとして設定されます。そうでない場合は、MIMEタイプは変更されません。 このオプションの前に--attachment-descriptionオプションが使用されている場合、その値が修正された各添付ファイルの新しい説明として設定されます。そうでない場合は、説明は変更されません。 このオプションの前に--attachment-uidオプションが使用されている場合、その値が修正された各添付ファイルの新しいUIDとして設定されます。そうでない場合は、UIDは変更されません。
--update-attachment selector | selectorに一致する一つ以上の添付ファイルのプロパティを設定します。複数の既存の添付ファイルがselectorに一致する場合、それらすべてのプロパティが更新されます。 selectorは4つの形式のいずれかをとることができます。これらについては、後述の添付ファイル選択子のセクションで説明します。 このオプションの前に--attachment-nameオプションが使用されている場合、その値が修正された各添付ファイルの新しい名前として設定されます。そうでない場合は、名前は変更されません。 このオプションの前に--attachment-mime-typeオプションが使用されている場合、その値が修正された各添付ファイルの新しいMIMEタイプとして設定されます。そうでない場合は、MIMEタイプは変更されません。 このオプションの前に--attachment-descriptionオプションが使用されている場合、その値が修正された各添付ファイルの新しい説明として設定されます。そうでない場合は、説明は変更されません。 このオプションの前に--attachment-uidオプションが使用されている場合、その値が修正された各添付ファイルの新しいUIDとして設定されます。そうでない場合は、UIDは変更されません。
--delete-attachment selector | selectorに一致する一つ以上の添付ファイルを削除します。 selectorは4つの形式のいずれかをとることができます。これらについては、後述の添付ファイル選択子のセクションで説明します。

添付ファイルアクション用オプション:

Option | Description
--- | ---
--attachment-name name | 以降の --add-attachment または --replace-attachment 操作で使用する名前を設定します。
--attachment-mime-type mime-type | 以降の --add-attachment または --replace-attachment 操作で使用するMIMEタイプを設定します。
--attachment-description description | 以降の --add-attachment または --replace-attachment 操作で使用する説明を設定します。
--enable-legacy-font-mime-types | 特定のフォント添付ファイルに対して、レガシーな MIME タイプの使用を有効にします。例えば、TrueType フォントに対して 'fonts/ttf' の代わりに 'application/x-truetype-font' が使用されるようになります。 これは、新しい添付ファイルの追加と既存の添付ファイルの置換の両方に影響しますが、新しい MIME タイプが指定されていない場合に限ります。その他の既存の添付ファイルは変更されません。 影響を受ける MIME タイプは、'font/sfnt'、'font/ttf'、'font/collection'（これらはすべて 'application/x-truetype-fonts' にマッピング）および 'font/otf'（'application/vnd.ms-opentype' にマッピング）です。

その他のオプション:

Option | Description
--- | ---
--disable-language-ietf | 通常、利用者がトラック頭部プロパティの「language」の変更を要求すると、mkvpropedit(1) はレガシーな Language 要素に加えて、新しい LanguageIETF トラック頭部要素にも同じ変更を適用します。このオプションを使用すると、変更はレガシーな Language 要素にのみ適用されます。 このオプションは、「language-ietf」トラック頭部プロパティ経由で要求された変更には影響しません。
--normalize-language-ietf モード | すべての IETF BCP 47 言語タグの正規化を有効にします。「canonical」モードでは標準形式に、「extlang」モードでは拡張言語サブタグ形式に正規化されます。「off」で無効にできます。デフォルトでは標準形式（canonical）への正規化が適用されます。 標準形式（canonical）では、より好ましい値が存在するすべてのサブタグがその値に置換されます。例えば、「zh-yue-jyutping」は「yue-jyutping」に、「fr-FX」は「fr-FR」に変換されます。 拡張言語サブタグ形式では、まず標準形式が作成されます。その後、拡張言語サブタグが存在するすべての主要言語が、その拡張言語サブタグと接頭辞の組み合わせに置換されます。これにより、例えば「yue-jyutping」は「zh-yue-jyutping」に戻されますが、「fr-FR」には影響しません（「fr」は拡張言語サブタグではないため）。 この正規化は、実際に変更された要素にのみ適用されます: トラック頭部を編集する場合、編集指定によって設定されたトラック言語要素のみが影響を受けます。編集されないトラックの言語は変更されません。トラックを編集しても言語以外のプロパティのみを設定した場合は、言語には影響しません。 チャプタを編集する場合、既存のチャプタは常に完全に置き換えられるため、すべてのチャプタ要素のすべての言語要素が影響を受けます。 タグを編集する場合、実際に置換されたタグの言語要素のみが影響を受けます。例えば、広域タグを置換しても、既存のトラックタグには影響しません。 ファイル内の既存のすべての言語タグを正規化する最良の方法は、mkvmerge(1) で再多重化し、その「--normalize-language-ietf」オプションを目的のモードに設定することです。
--command-line-charset character-set | コマンドラインで指定された文字列の変換に使用する文字セットを設定します。デフォルトはシステムの現在のロケールに基づいた文字セットです。
--output-charset 文字セット | 出力される文字列を変換するのに用いる文字集合を設定します。既定では機構の現行地域特性で指定している文字集合になります。
-r, --redirect-output ファイル名 | 全てのメッセージをコンソールではなくfile-nameで指定したファイルに書き出します。出力リダイレクトによっても同じことが簡単にできますが、このオプションが必要な場合もあります。ターミナルがファイルに書き込む前に出力を処理してしまう場合などです。--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.
--ui-language コード | 用いる翻訳を指定した言語符号のものに強制します（例えば「de_DE」ならドイツ語翻訳です）。符号に「list」を指定すると利用可能な翻訳の一覧を出力します。
--abort-on-warnings | 最初の警告が出た時点でプログラムを中止するように指示します。この場合のプログラムの終了コードは1になります。
--debug トピック | 特定の機能のデバッグ出力を有効にします。このオプションは開発者向けです。
--engage 機能 | 実験的機能をオンにします。利用可能な機能のリストはmkvpropedit --engage listで得られます。これらの機能は通常の状況で利用されることは意図されていません。
--gui-mode | GUIモードを有効にします。このモードでは、制御しているGUIに状況を伝えるための特殊な形式の行が出力されます。これらのメッセージは「#GUI#メッセージ」という形式に従います。メッセージの後には、「#GUI#メッセージ#キー1=値1#キー2=値2...」のようにキーと値のペアが続くことがあります。メッセージ内容やキー名は翻訳されず、常に英語で出力されます。
-v, --verbose | 詳細（冗長）モードを有効にし、読み込まれた重要なMatroska(tm)要素をすべて表示します。
-h, --help | ヘルプを表示して終了します。
-V, --version | バージョン情報を表示して終了します。
@オプションファイル.json | 指定したファイル（オプションファイル）から追加のコマンドライン引数を読み込みます。サポートされている形式の詳細については、mkvmerge(1)のmanページにある「オプションファイル」のセクションを参照してください。

# 3. 編集選択子

--editオプションは、以降のadd、set及びdeleteアクションが適用されるMatroska(tm)ファイルセクション(区分情報または特定のトラック頭部)を設定します。これは次の--editオプションが見付かるまでずっと有効です。このオプションへの引数は編集選択子と呼ばれます。

既定では、mkvpropedit(1)は区分情報のセクションを編集します。

## 3.1. セグメント情報

区分（セグメント）情報は次の3つの単語によって選択されます。'info'、'segment_info'または'segmentinfo'です。これは区分題名や区分UIDなどのプロパティを格納しています。

## 3.2. トラック頭部

トラック頭部はもうちょっとだけ複雑な選択子で選択されます。全ての場合で選択子は'track:'で始まります。トラック頭部プロパティには、言語コード、'既定トラック'フラグやトラック名のような要素があります。

Option | Description
--- | ---
track:n | 引数nが数字の場合は，n番目のトラックを選択します。トラックの順序はmkvmerge(1)での--identifyオプションの出力と同じです。 付番は1から始まります。
track:t n | 引数が単一の文字tに続くnで始まる場合は，特定のトラック種別のn番目のトラックを選択します。トラック種別引数tは次の4つのうち1つでなくてはなりません: 音声トラックを示す'a'、ボタントラックを示す'b'、字幕トラックを示す's'、映像トラックを示す'v'。トラックの順番はmkvmerge(1)の--identifyオプションで出力される順番と同じです。 付番は1から始まります。
track:=uid | 引数が '=' に続く数字uidであれば，指定されたuidと等しいトラックUID要素を持つトラックを選択します。トラックUIDはmkvinfo(1)で確認できます。
track:@number | 引数が '@' に続く数字numberであれば，このnumberに等しいトラック番号要素を持つトラックを選択します。トラック番号はmkvinfo(1)で確認できます。

## 3.3. 注意

トラック編集選択子の性質から、複数の選択子が同じトラック頭部に合致し得ます。こうした場合、それらの編集選択子への全作用を一つにまとめ、命令行で与えた順に実行します。

# 4. 添付ファイル選択子

添付ファイル選択子は--replace-attachmentおよび--delete-attachmentの二作用と共に使います:

1. 添付ファイル識別子での選択。この形式では、選択子は単に数字であり、mkvmerge(1)の識別命令が出力する添付ファイル識別子と同じものです。

2. 添付ファイル固有識別子での選択。この形式では、選択子は等号=に続く数字であり、mkvmerge(1)の識別命令が出力する添付ファイル固有識別子と同じものです。

3. 添付ファイル名による選択。この形式では、選択子は即値語name:に続く存在する添付ファイルの名前です。この選択子を--replace-attachmentと共に用いる場合は、合致する名前中のコロンは\cと退避させなくてはなりません。

4. MIME種別による選択。この形式では、選択子は即値語mime-type:に続く存在する添付ファイルのMIME種別です。この選択子を--replace-attachmentと共に用いる場合は、合致するMIME種別中のコロンは\cと退避させなくてはなりません。

# 5. 言語の取り扱い

mkvpropedit(1) は、多くの場合において既定で適切な処理を試みます。そのため、language プロパティへの変更は、mkvmerge(1) が両方の要素に言語を適用するのと同様に、mkvpropedit(1) に新しい "LanguageIETF" 要素と古い "Language" 要素の両方に同じ変更を適用させます。例えば、mkvpropedit movie.mkv --edit track:2 --set language=zh-TW を使用すると、"LanguageIETF" 要素は zh-TW に、古い "Language" 要素は chi に設定されます。

さらに、設定または削除可能な language-ietf という新しいトラック頭部プロパティがあります。このプロパティへの変更は、新しい "LanguageIETF" トラック頭部要素にのみ適用されます。注意点として、古い "Language" トラック頭部要素は Matroska において必須要素であり、ファイル内に存在しなくても暗黙の値を持っています。そのため、利用者が language-ietf プロパティのみを設定し、language プロパティを設定しなかった場合、mkvpropedit(1) は特定の場合において古い "Language" 要素を追加し、利用者が値を指定しなかったため und（「未定義」を意味する）に設定します。

XMLチャプタやタグファイルを読み込む際、mkvpropedit(1) は mkvmerge(1) と同様に動作します。

新しい要素の作成は、これら3つの新しい要素すべてに作用する命令行オプション `--disable-language-ietf` で完全に無効化できます。

拡張言語サブタグに適用される正規化手法を、パラメータ --normalize-language-ietf で選択できます。

# 6. 例

'movie.mkv' というファイルを編集する例を以下に示します。区分題名を設定し、音声トラックおよび字幕トラックの言語コードを修正しています。注意: この例では、最初の--editオプションを省いて短縮できます。なぜなら、結局最初の--editオプションが見付かる前の全てのオプションは、既定で区分情報要素を編集するからです。

    $ mkvpropedit movie.mkv --edit info --set "title=The movie" --edit track:a1 --set language=fre --edit track:a2 --set language=ita

二番目の例では、最初の字幕トラックから「既定のトラック標旗」を削除し二番目の字幕トラックに設定します。注意: mkvpropedit(1)はmkvmerge(1)とは異なり，他のトラックの既定標旗が「1」に自動設定されていても，違うトラックの既定標旗を「0」に設定しません。

    $ mkvpropedit movie.mkv --edit track:s1 --set flag-default=0 --edit track:s2 --set flag-default=1

ファイル中2番目の字幕トラックのタグを置換するには、以下のようにします:

    $ mkvpropedit movie.mkv --tags track:s2:new-subtitle-tags.xml

タグを削除したいときはファイル名を省きます:

    $ mkvpropedit movie.mkv --tags all:

ファイル中のチャプタを置換するには、以下のようにします:

    $ mkvpropedit movie.mkv --chapters new-chapters.xml

全てのチャプタを削除したいときはファイル名を省きます:

    $ mkvpropedit movie.mkv --chapters ''

フォントファイル Arial.ttf を添付ファイルとして追加する:

    $ mkvpropedit movie.mkv --add-attachment Arial.ttf

フォントファイル 89719823.ttf を添付ファイルとして追加し、それがまさにArialであるという情報を提供する:

    $ mkvpropedit movie.mkv --attachment-name Arial.ttf --attachment-description 'The Arial font as a TrueType font' --attachment-mime-type application/x-truetype-font --add-attachment 89719823.ttf

添付済みのフォントファイル Comic.ttf を別のもの Arial.ttf に置き換える:

    $ mkvpropedit movie.mkv --attachment-name Arial.ttf --attachment-description 'The Arial font as a TrueType font' --replace-attachment name:Comic.ttf:Arial.ttf

2番目の添付ファイルを、それが何であれ削除する:

    $ mkvpropedit movie.mkv --delete-attachment 2

MIMEタイプを指定することで全ての添付フォントを削除する:

    $ mkvpropedit movie.mkv --delete-attachment mime-type:application/x-truetype-font

# 7. 終了コード

mkvpropedit(1) は以下の3つの終了コードを返します:

- 0 -- この終了コードは変更が成功したことを示します。

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

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

# 8. テキストファイルと文字セット変換

MKVToolNixスイートの各ツールが文字セット変換、入出力エンコーディング、コマンドラインおよびコンソールのエンコーディングをどのように処理するかについての詳細は、mkvmerge(1) のmanページにある同名のセクションを参照してください。

# 9. 環境変数

mkvpropedit(1) はシステムのロケールを決める既定変数（例: LANG や LC_* 系列）を使用します。追加の変数:

Option | Description
--- | ---
MKVPROPEDIT_DEBUG, MKVTOOLNIX_DEBUG とその短縮形 MTX_DEBUG | その内容を、あたかも --debug オプション経由で渡されたかのように扱います。
MKVPROPEDIT_ENGAGE, MKVTOOLNIX_ENGAGE とその短縮形 MTX_ENGAGE | その内容を、あたかも --engage オプション経由で渡されたかのように扱います。

# 10. 関連項目

mkvmerge(1)、mkvinfo(1)、mkvextract(1)、mkvtoolnix-gui(1)

# 11. WWW

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