JavaでGroupDocs.Metadataを使用してMKVメタデータを抽出する方法
この包括的なガイドでは、GroupDocs.Metadataライブラリを使用してJavaでMKVメタデータを抽出する方法を学びます。メディアカタログの構築、エンコードパラメータの検証、サムネイル生成の自動化など、Matroska(MKV)メタデータをプログラムで読み取ることで、膨大な手作業の時間を節約できます。なぜそれが必要か、前提条件、正確なセットアップ手順、そしてEBMLヘッダー、セグメント情報、タグ、トラックデータを示す詳細なコードスニペットを順に解説します。
クイック回答
- 「read mkv metadata java」とは何ですか? これは、Javaを使用してMKVファイルからMatroskaコンテナのメタデータ(タイトル、コーデック、再生時間など)をプログラム的に抽出することです。
- どのライブラリを使用すべきですか? GroupDocs.Metadata for Javaは、Matroskaおよび50以上の他のフォーマットに対応したフル機能で高性能なAPIを提供します。
- ライセンスは必要ですか? 評価用には無料トライアルが利用でき、商用ライセンスを取得するとすべてのトライアル制限が解除されます。
- 他のフォーマットも読み取れますか? はい、同じAPIでMP4、AVI、MOV、MP3など多数のコンテナを読み取れます。
- 実行時にインターネット接続は必要ですか? いいえ、JARがクラスパスにある限り、すべての抽出はローカルで行われます。
Matroska(MKV)メタデータとは?
Matroska(MKV)メタデータは、Matroskaコンテナ内に保存されている構造的かつ記述的な情報の集合で、EBMLヘッダー(ファイルバージョンとドキュメントタイプ)、セグメント詳細(再生時間、マクシングアプリケーション)、ユーザー定義タグ(タイトル、説明)、トラック仕様(音声/動画コーデックID、言語、ビットレート)などが含まれます。このデータにアクセスすることで、検索可能なカタログの構築、ファイル整合性の検証、サムネイル生成などの自動化ワークフローを実現できます。
なぜJavaでMKVメタデータを読み取るのか?
JavaでMKVメタデータを読み取ることで、数千本の動画ファイルのカタログ化を自動化し、公開前にコーデックや言語の要件を検証し、タイトル、再生時間、トラック言語などを検索可能なデータベースに登録できます。また、複数のコンテナから動画メタデータを抽出する単一コードベースを提供し、保守コストを削減し、メディアパイプライン全体で一貫した品質チェックを実現します。
なぜGroupDocs.Metadata for Javaを使用するのか?
GroupDocs.Metadata for Javaは、Matroska、MP4、AVI、MOVなど50以上の入力および出力フォーマットに対応した成熟したライブラリです。コンテナ構造をストリーミングで処理するため、マルチギガバイトのファイルでもメモリ使用量が低く抑えられます。APIは低レベルのEBML解析を抽象化し、ビジネスロジックに集中できるようにします。Maven依存関係を1つ追加するだけで統合でき、最新のコーデック仕様に対応するよう継続的に更新されています。
前提条件
- 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を使用してJavaでMKVメタデータを読み取る方法
Metadata はMKVファイルを表す主要クラスで、メタデータへのアクセスを提供します。new Metadata("path/to/file.mkv") でMKVファイルをロードし、適切なゲッター(getRootPackageGeneric()、getSegments()、getTags()、getTracks())を呼び出して各メタデータセクションを取得します。この単一の呼び出しチェーンにより、低レベルのパースロジックを書かずにEBMLヘッダー、セグメント情報、ユーザータグ、個々のトラック詳細を完全に把握できます。
Matroska EBMLヘッダーの読み取り
EBMLヘッダーは、バージョン、ドキュメントタイプ、ファイルサイズなどのコア情報を格納しています。getRootPackageGeneric() は、開いたファイルのEBMLヘッダーパッケージを返します。
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() は、ファイルに関連付けられたタグエントリのリストを返します。
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() は各トラックの技術的仕様へのアクセスを提供します。
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)。- この情報は、トランスコーディングパイプライン、品質チェック、動的ストリーミングの判断に不可欠です。
JavaでMKVメタデータを読み取る一般的なユースケース
- メディアカタログ – タイトル、再生時間、言語コードをデータベーステーブルに格納し、迅速な検索を実現します。
- 自動品質管理 – すべてのファイルが必須タグを含み、リリース前にコーデック標準に準拠しているかを検証します。
- 動的ストリーミング – 実行時にユーザーの好みに応じて適切な音声または字幕トラックを選択します。
- コンテンツ移行 – メタデータを一度抽出し、新しいストレージシステムやコンテンツ配信ネットワークに注入します。
一般的な問題とトラブルシューティング
| 症状 | 考えられる原因 | 対策 |
|---|---|---|
getEbmlHeader() にアクセスしたときの NullPointerException | ファイルパスが間違っているか、ファイルが見つからない | new Metadata("...") のパスを確認し、ディスク上にファイルが存在することを確認してください。 |
| タグが返されない | MKVファイルにタグ要素がない | メタデータタグを含むメディアファイルを使用してください(例:MKVToolNixで追加されたもの)。 |
| 大きなファイルで処理が遅い | ヒープメモリが不足している | JVMヒープを増やす(-Xmx2g 以上)か、可能であればファイルをチャンクに分割して処理してください。 |
よくある質問
Q: 同じライブラリで他の動画フォーマットからメタデータを抽出できますか?
A: はい、GroupDocs.MetadataはMP4、AVI、MOVなど多数のフォーマットをサポートしています。APIの使い方は同一で、フォーマットに応じたルートパッケージクラスを使用するだけです。
Q: 本番環境での使用にライセンスは必要ですか?
A: 商用ライセンスを取得すればトライアル制限が解除され、すべての機能が利用可能になります。ライブラリは評価目的でトライアルモードでも動作します。
Q: 抽出はオフラインで行われますか?
A: 完全にオフラインです。JARがクラスパスにある限り、すべてのメタデータ読み取りはローカルで行われ、ネットワーク呼び出しは発生しません。
Q: ライブラリは非常に大きなMKVファイル(数GB)でどのように動作しますか?
A: ライブラリはコンテナ構造をストリーミングで処理するため、メモリ使用量は抑えられます。大きなタグコレクションを扱う場合はJVMのヒープが十分であることを確認し、極めて大きなファイルを処理する際は -Xmx の増加を検討してください。
Q: メタデータを変更してファイルに書き戻すことはできますか?
A: GroupDocs.Metadataは主に読み取りに焦点を当てています。書き込みサポートは限定的で、書き戻し機能については最新のAPIドキュメントをご参照ください。
Last Updated: 2026-09-02
Tested With: GroupDocs.Metadata 24.12 for Java
Author: GroupDocs