GroupDocs.Metadata を使用した Java での MKV メタデータ抽出

マルチメディアファイルは至る所にあり、内部の詳細情報を読み取れることはメディア管理、カタログ作成、分析において極めて重要です。このチュートリアルでは、強力な GroupDocs.Metadata ライブラリを使って Java で MKV メタデータを抽出する方法 を学びます。ライブラリの設定方法、EBML ヘッダー、セグメント情報、タグ、トラックデータの取得手順を解説し、実際のシナリオでこの知識がどのように活きるかを示します。

Quick Answers

  • 「extract mkv metadata java」とは何ですか?
    Java でプログラム的に MKV ファイルのメタデータを読み取るプロセスです。
  • どのライブラリを使うべきですか?
    Java 用 GroupDocs.Metadata が Matroska ファイル向けの包括的な API を提供します。
  • ライセンスは必要ですか?
    無料トライアルで評価できます。ライセンスを取得すれば使用制限が解除されます。
  • 他のフォーマットも読み取れますか?
    はい、同じライブラリで MP4、AVI、MP3 など多数の形式をサポートしています。
  • 実行時にインターネット接続は必要ですか?
    いいえ、ライブラリをプロジェクトに追加すればローカルで全ての抽出が完了します。

Matroska (MKV) メタデータとは?

Matroska はオープンで柔軟なコンテナ形式です。そのメタデータには EBML ヘッダー(ファイルバージョン、ドキュメントタイプ)、セグメント詳細(再生時間、Muxing アプリケーション)、タグ(タイトル、説明)、トラック仕様(音声/動画コーデック、言語)などが含まれます。これらの情報にアクセスすることで、メディアカタログの構築、ファイル整合性の検証、サムネイル自動生成などが可能になります。

なぜ GroupDocs.Metadata for Java を使うのか?

  • フル機能 API – EBML、セグメント、タグ、トラックを低レベルのパースなしで処理
  • パフォーマンス最適化 – 大容量ファイルでも効率的に動作
  • クロスフォーマット対応 – 同一コードベースで他の音声/動画コンテナも再利用可能
  • シンプルな Maven 連携 – 依存関係を一つ追加するだけで抽出開始

前提条件

  • GroupDocs.Metadata for Java バージョン 24.12 以降
  • Java Development Kit (JDK) がインストール済み
  • Maven(または手動で JAR を扱う方法)
  • 実験用の MKV ファイル(YOUR_DOCUMENT_DIRECTORY に配置)

GroupDocs.Metadata for Java の設定

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>

Direct Download:
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 メタデータ抽出

それでは、読み取れる各メタデータ領域を詳しく見ていきます。

Matroska EBML ヘッダーの読み取り

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 プロパティ(docTypeversion など)でファイルの互換性を確認できる

Matroska セグメント情報の読み取り

セグメントは全体のメディアタイムラインや作成ツールを記述します。

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 タグメタデータの読み取り

タグはタイトル、アーティスト、カスタムメモなど、人が読める情報を格納します。

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(例: movietrack)で整理される
  • simpleTag エントリは TITLE=My Video のようなキー/バリューのペアを保持

Matroska トラックメタデータの読み取り

トラックは音声、動画、字幕など個別のストリームを表します。

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
  • この情報はトランスコーディングパイプラインや品質チェックに必須

よくある問題とトラブルシューティング

症状想定原因対策
NullPointerExceptiongetEbmlHeader() 呼び出し時に発生ファイルパスが間違っている、またはファイルが見つからないnew Metadata("...") のパスを確認し、ファイルが存在することを確かめる
タグが取得できないMKV ファイルにタグ要素が含まれていないメタデータタグが付与されたメディアファイル(例: MKVToolNix で追加)を使用
大容量ファイルで処理が遅いヒープメモリ不足JVM ヒープを増やす(-Xmx2g 以上)か、可能であればチャンク単位で処理

Frequently Asked Questions

Q: 同じライブラリで他の動画フォーマットのメタデータも抽出できますか?
A: はい、GroupDocs.Metadata は MP4、AVI、MOV など多数をサポートしています。API の使用パターンは同様で、適切なルートパッケージクラスを使用します。

Q: 本番環境での使用にライセンスは必須ですか?
A: ライセンスを取得すればトライアル制限が解除され、全機能が利用可能になります。評価段階はトライアルモードで動作します。

Q: 抽出はオフラインで行われますか?
A: 完全にローカルで実行されます。JAR がクラスパスにあるだけで、ネットワーク呼び出しは発生しません。

Q: 数ギガバイト級の非常に大きな MKV ファイルでも性能はどうですか?
A: ライブラリはコンテナ構造をストリーミングで処理するためメモリ使用量は抑えられますが、タグコレクションが大きくなる場合は十分なヒープを確保してください。

Q: メタデータを編集してファイルに書き戻すことはできますか?
A: GroupDocs.Metadata は主に読み取りに焦点を当てています。書き込み機能は限定的で、最新の API ドキュメントでサポート状況をご確認ください。

結論

これで GroupDocs.Metadata を使用した Java での MKV メタデータ抽出 に関する完全な実装ガイドが完成しました。EBML ヘッダー、セグメント情報、タグ、トラック詳細を活用すれば、メディアカタログの構築、品質チェックの自動化、動画ストリーミングサービスの付加価値向上など、さまざまなシナリオに応用できます。コードスニペットを試し、独自のワークフローに合わせてカスタマイズし、ライブラリが提供する他フォーマットへの対応もぜひ探索してください。


最終更新日: 2025-12-22
テスト環境: GroupDocs.Metadata 24.12 for Java
作者: GroupDocs