GroupDocs.Metadata を使用した mkv メタデータの抽出方法(Java)
この包括的なガイドでは、GroupDocs.Metadata ライブラリを使用して mkv メタデータ(Java)の抽出方法 を学びます。メディアカタログの構築、エンコードパラメータの検証、サムネイル生成の自動化など、Matroska(MKV)メタデータをプログラムで読み取ることで、膨大な手作業時間を節約できます。なぜそれが必要か、前提条件、正確なセットアップ手順、EBML ヘッダー、セグメント情報、タグ、トラックデータを公開する詳細なコードスニペットを順に解説します。
クイック回答
- 「read mkv metadata java」とは何ですか? これは Java を使用して MKV ファイルから Matroska コンテナのメタデータ(タイトル、コーデック、再生時間など)をプログラム的に抽出することを指します。
- どのライブラリを使用すべきですか? GroupDocs.Metadata for Java は Matroska と他の 50 以上のフォーマットに対応したフル機能・高性能 API を提供します。
- ライセンスは必要ですか? 無料トライアルで評価可能です。商用ライセンスを取得するとすべてのトライアル制限が解除されます。
- 他のフォーマットも読み取れますか? はい – 同じ API で MP4、AVI、MOV、MP3 など多数のコンテナを読み取れます。
- 実行時にインターネット接続は必要ですか? いいえ – JAR がクラスパスにあれば、すべての抽出はローカルで完結します。
- どれくらい大きなファイルを処理できますか? ライブラリはコンテナをストリーミング処理するため、ヒープ使用量を 200 MB 未満に抑えつつ最大 10 GB のファイルを扱えます。
Matroska(MKV)メタデータとは?
Matroska(MKV)メタデータは、MKV コンテナ内部に保存される記述的かつ構造的な情報の集合で、タイトル、コーデック、再生時間、トラック詳細などが含まれます。このデータにアクセスすることで、検索可能なカタログの構築、ファイル整合性の検証、サムネイル生成などの自動化ワークフローを実現できます。
なぜ mkv メタデータ(Java)を読むのか?
Java で MKV メタデータを読むことで、カタログ化の自動化、コーデックや言語要件の検証、手作業なしで主要プロパティを抽出でき、時間とエラーを大幅に削減できます。また、検索可能なデータベースや下流のトランスコーディングパイプラインの構築において、単一の真実情報源として活用できます。
なぜ GroupDocs.Metadata for Java を使用するのか?
GroupDocs.Metadata for Java は、メモリ使用量を抑えつつ 50 以上の入出力フォーマット(MKV を含む)をサポートする高性能ストリーミング API を提供します。低レベルの EBML パースを抽象化するため、バイナリファイル処理に時間を費やすことなくビジネスロジックに集中できます。
前提条件
- GroupDocs.Metadata for Java バージョン 24.12 以降。
- Java Development Kit (JDK) 8 以上がインストール済み。
- Maven(または手動で JAR を管理)で依存関係を管理。
- テスト用の MKV ファイルを、コードから参照できるフォルダー(例:
YOUR_DOCUMENT_DIRECTORY)に配置。
GroupDocs.Metadata for Java の設定
GroupDocs.Metadata for Java は、Matroska(MKV)を含む 50 以上のファイル形式からメタデータを読み取ることができるライブラリです。Maven で追加するか、JAR を手動でダウンロードしてプロジェクトに組み込みます。
Maven:
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/metadata/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-metadata</artifactId>
<version>24.12</version>
</dependency>
</dependencies>
直接ダウンロード:
Maven を使用しない場合は、最新バージョンを GroupDocs.Metadata for Java releases からダウンロードしてください。
ライセンス取得
まずは無料トライアルで機能を試せます。製品環境で使用する場合は、ライセンスを購入するか、GroupDocs から一時ライセンスを取得してトライアル制限を解除してください。
基本的な初期化と設定
以下は GroupDocs.Metadata を使用して MKV ファイルを開くために必要な最小コードです。
import com.groupdocs.metadata.Metadata;
import com.groupdocs.metadata.core.MatroskaRootPackage;
public class MetadataExtraction {
public static void main(String[] args) {
try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.mkv")) {
MatroskaRootPackage root = metadata.getRootPackageGeneric();
// Access and manipulate metadata here
}
}
}
GroupDocs.Metadata を使用した mkv メタデータ(Java)の読み取り方法
Metadata はメディアファイルを表すコアクラスで、埋め込まれたメタデータへのアクセスを提供します。
MKV メタデータは、Metadata インスタンスをファイルに対して作成し、getRootPackageGeneric()、getSegments()、getTags()、getTracks() といった getter メソッドを呼び出すことで取得します。このアプローチにより、低レベルのパースロジックを書かずに EBML ヘッダー、セグメント情報、ユーザータグ、個々のトラック詳細をフルに可視化できます。
Metadata は GroupDocs.Metadata におけるコアクラスで、メディアファイルを表し埋め込まれたメタデータへのアクセスを提供します。
Matroska EBML ヘッダーの読み取り
EBML ヘッダーはバージョン、ドキュメントタイプ、ファイルサイズなど、コアなファイル情報を格納します。
getRootPackageGeneric() は docType、version、fileSize などの EBML レベルプロパティを含む Matroska パッケージのエントリーポイントを返します。
import com.groupdocs.metadata.Metadata;
import com.groupdocs.metadata.core.MatroskaRootPackage;
public class ReadMatroskaEBMLHeader {
public static void run() {
try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.mkv")) {
MatroskaRootPackage root = metadata.getRootPackageGeneric();
String docType = root.getMatroskaPackage().getEbmlHeader().getDocType();
String docTypeReadVersion = root.getMatroskaPackage().getEbmlHeader().getDocTypeReadVersion();
String docTypeVersion = root.getMatroskaPackage().getEbmlHeader().getDocTypeVersion();
String readVersion = root.getMatroskaPackage().getEbmlHeader().getReadVersion();
String version = root.getMatroskaPackage().getEbmlHeader().getVersion();
// Use the extracted header details as needed
}
}
}
重要ポイント
getRootPackageGeneric()は Matroska パッケージのエントリーポイントを返します。- EBML プロパティ(
docType、versionなど)により、詳細な処理に入る前にファイルの互換性を確認できます。
Matroska セグメント情報の読み取り
セグメントは全体のメディアタイムライン、作成ツール、オプションのタイトル情報を記述します。
getSegments() はセグメントオブジェクトのコレクションを返し、各オブジェクトは再生時間、タイトル、作成アプリケーションの詳細を公開します。
import com.groupdocs.metadata.Metadata;
import com.groupdocs.metadata.core.MatroskaRootPackage;
public class ReadMatroskaSegmentInformation {
public static void run() {
try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.mkv")) {
MatroskaRootPackage root = metadata.getRootPackageGeneric();
for (var segment : root.getMatroskaPackage().getSegments()) {
String dateUtc = segment.getDateUtc();
long duration = segment.getDuration();
String muxingApp = segment.getMuxingApp();
String segmentFilename = segment.getSegmentFilename();
String segmentUid = segment.getSegmentUid();
long timecodeScale = segment.getTimecodeScale();
String title = segment.getTitle();
String writingApp = segment.getWritingApp();
// Process the extracted segment information as needed
}
}
}
}
重要ポイント
getSegments()はコレクションを返し、各セグメントは独自のタイトル、再生時間、作成アプリ情報を保持できます。- このデータはプレイリスト構築やバッチ処理時のエンコードパラメータ検証に有用です。
Matroska タグメタデータの読み取り
タグはタイトル、アーティスト、カスタムメモなどの人間が読める情報を格納します。
getTags() はファイルに紐付くタグエントリのリストを返し、targetType(例:movie、track)で整理されます。
import com.groupdocs.metadata.Metadata;
import com.groupdocs.metadata.core.MatroskaRootPackage;
import com.groupdocs.metadata.core.MetadataProperty;
public class ReadMatroskaTagMetadata {
public static void run() {
try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.mkv")) {
MatroskaRootPackage root = metadata.getRootPackageGeneric();
for (var tag : root.getMatroskaPackage().getTags()) {
String targetType = tag.getTargetType();
String targetTypeValue = tag.getTargetTypeValue();
String tagTrackUid = tag.getTagTrackUid();
for (MetadataProperty simpleTag : tag.getSimpleTags()) {
String name = simpleTag.getName();
String value = simpleTag.getValue();
// Utilize the extracted tag information as needed
}
}
}
}
}
重要ポイント
- タグは
targetType(例:movie、track)で整理されます。 simpleTagエントリはTITLE=My Videoのようなキー/バリューのペアを保持します。
Matroska トラックメタデータの読み取り
トラックはコンテナ内の個別の音声、映像、字幕ストリームを表します。
getTracks() は各トラックの技術的仕様(タイプ、コーデック ID、言語、ビットレートなど)へのアクセスを提供します。
import com.groupdocs.metadata.Metadata;
import com.groupdocs.metadata.core.MatroskaRootPackage;
public class ReadMatroskaTrackMetadata {
public static void run() {
try (Metadata metadata = new Metadata("YOUR_DOCUMENT_DIRECTORY/input.mkv")) {
MatroskaRootPackage root = metadata.getRootPackageGeneric();
for (var track : root.getMatroskaPackage().getTracks()) {
String trackType = track.getType();
String codecId = track.getCodecId();
String language = track.getLanguage();
long duration = track.getDuration();
// Process the extracted track information as needed
}
}
}
}
重要ポイント
track.getType()はストリームが映像、音声、字幕のどれかを示します。codecIdはコーデックを識別します(例:V_MPEG4/ISO/AVC)。- この情報はトランスコーディングパイプライン、品質チェック、動的ストリーミングの判断に不可欠です。
mkv メタデータ(Java)を読む一般的なユースケース
- Media catalogs – タイトル、再生時間、言語コードをデータベーステーブルに格納し、迅速な検索を実現。
- Automated quality control – すべてのファイルが必須タグを保持し、コーデック基準に適合しているかリリース前に検証。
- Dynamic streaming – 実行時にユーザーの好みに合わせて適切な音声または字幕トラックを選択。
- Content migration – メタデータを一度抽出し、新しいストレージシステムや CDN に注入。
一般的な問題とトラブルシューティング
| 症状 | 考えられる原因 | 対策 |
|---|---|---|
NullPointerException が getEbmlHeader() で発生 | ファイルパスが間違っている、またはファイルが見つからない | new Metadata("...") のパスを確認し、ディスク上にファイルが存在することを確認してください。 |
| タグが返されない | MKV ファイルにタグ要素が含まれていない | メタデータタグが含まれるメディアファイル(例:MKVToolNix で追加したもの)を使用してください。 |
| 大きなファイルで処理が遅い | ヒープメモリが不足している | JVM ヒープを増やす(-Xmx2g 以上)か、可能であればファイルをチャンクに分割して処理してください。 |
| 予期しない codec ID が出る | 古い Matroska バージョンが完全にサポートされていない | 最新の GroupDocs.Metadata バージョンに更新し、最新のコーデック識別子へのサポートを取得してください。 |
よくある質問
Q: 同じライブラリで他の動画フォーマットのメタデータも抽出できますか?
A: はい、GroupDocs.Metadata は MP4、AVI、MOV、その他多数をサポートしています。API の使用方法は同一で、対象フォーマットに対応したルートパッケージクラスを使用するだけです。
Q: 本番環境でライセンスは必須ですか?
A: 商用ライセンスを取得するとトライアル制限が解除され、すべての機能が利用可能になります。評価目的であればトライアルモードで動作します。
Q: 抽出はオフラインで行われますか?
A: 完全にオフラインです。JAR がクラスパスにあれば、メタデータの読み取りはすべてローカルで実行され、ネットワーク呼び出しは発生しません。
Q: 非常に大きな MKV ファイル(数 GB)でのパフォーマンスはどうですか?
A: ライブラリはコンテナ構造をストリーミング処理するため、メモリ使用量は抑えられます。大規模なタグコレクションを扱う場合は JVM ヒープを十分に確保し、極端に大きなファイルを処理する際は -Xmx の増加を検討してください。
Q: メタデータを変更してファイルに書き戻すことはできますか?
A: GroupDocs.Metadata は主に読み取りに焦点を当てています。書き込みサポートは限定的であり、書き戻し機能については最新の API ドキュメントをご参照ください。
Q: API が扱える最大ファイルサイズはどれくらいですか?
A: ストリーミングアーキテクチャにより、典型的なサーバ構成でヒープメモリを 200 MB 未満に抑えつつ最大 10 GB のファイルを処理できます。
Q: スレッドセーフに関する注意点はありますか?
A: 各 Metadata インスタンスは独立しているため、スレッドごとに別々のインスタンスを使用すれば並列処理は安全に行えます。
最終更新日: 2026-11-02
テスト環境: GroupDocs.Metadata 24.12 for Java
作者: GroupDocs