使用 GroupDocs.Metadata 提取 MKV 元資料(Java)

多媒體檔案隨處可見,能夠讀取其內部細節對於媒體管理、目錄編制和分析至關重要。在本教學中,您將學習 how to extract mkv metadata java,使用強大的 GroupDocs.Metadata 函式庫。我們將逐步說明如何設定函式庫、擷取 MKV 檔案的 EBML 標頭、段落資訊、標籤與軌道資料,並展示此知識在實際情境中的應用。

快速解答

  • 「extract mkv metadata java」是什麼意思? 它是使用 Java 程式化讀取 MKV 檔案之元資料的過程。
  • 我應該使用哪個函式庫? GroupDocs.Metadata for Java 為 Matroska 檔案提供完整的 API。
  • 我需要授權嗎? 免費試用可用於評估;購買授權可移除使用限制。
  • 我可以讀取其他格式嗎? 可以,同一函式庫支援 MP4、AVI、MP3 等多種格式。
  • 執行時需要網路連線嗎? 不需要,所有擷取皆在本機完成,只要將函式庫加入專案即可。

Matroska(MKV)元資料是什麼?

Matroska 是一種開放且彈性的容器格式。其元資料包括 EBML 標頭(檔案版本、文件類型)、段落詳細資訊(持續時間、混流應用程式)、標籤(標題、描述)以及軌道規格(音訊/視訊編解碼器、語言)。存取這些資料可讓您建立媒體目錄、驗證檔案完整性,或自動產生縮圖。

為什麼使用 GroupDocs.Metadata(Java)?

  • 完整功能 API – 在不需低階解析的情況下處理 EBML、段落、標籤與軌道。
  • 效能最佳化 – 即使面對大型檔案亦能高效運作。
  • 跨格式支援 – 同一程式碼基礎可重複使用於其他音訊/視訊容器。
  • 簡易 Maven 整合 – 只需加入單一相依性即可開始擷取。

前置條件

  • GroupDocs.Metadata for Java 版本 24.12 或更新。
  • 已安裝 Java Development Kit(JDK)。
  • Maven(或手動 JAR 管理)。
  • 一個用於實驗的 MKV 檔案(放置於 YOUR_DOCUMENT_DIRECTORY)。

設定 GroupDocs.Metadata(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>

直接下載:
如果您不想使用 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 metadata java

現在我們將深入探討您可以讀取的各個元資料區域。

讀取 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
        }
    }
}

Key Points

  • 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
            }
        }
    }
}

Key Points

  • 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
                }
            }
        }
    }
}

Key Points

  • 標籤依 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
            }
        }
    }
}

Key Points

  • track.getType() 告訴您它是視訊、音訊或字幕。
  • codecId 讓您辨識編解碼器(例如 V_MPEG4/ISO/AVC)。
  • 此資料對於轉碼流程或品質檢查至關重要。

常見問題與故障排除

症狀可能原因解決方法
在存取 getEbmlHeader() 時出現 NullPointerException檔案路徑不正確或檔案不存在確認 new Metadata("...") 中的路徑,並確保檔案存在。
未返回任何標籤MKV 檔案缺少標籤元素使用包含元資料標籤的媒體檔案(例如透過 MKVToolNix 添加的)。
在大型檔案上處理緩慢堆積記憶體不足增加 JVM 堆積大小(-Xmx2g 或更高),或在可能的情況下分塊處理檔案。

常見問答

Q: 我可以使用相同的函式庫從其他影片格式提取元資料嗎?
A: 可以,GroupDocs.Metadata 支援 MP4、AVI、MOV 等多種格式。API 使用模式相似,只需使用相對應的根套件類別。

Q: 正式環境使用是否需要授權?
A: 授權可移除試用限制並提供完整功能。此函式庫在試用模式下亦可用於評估。

Q: 擷取過程是否離線進行?
A: 完全離線。只要 JAR 位於 classpath,所有元資料讀取皆在本機執行,無需網路呼叫。

Q: 在處理非常大的 MKV 檔案(數 GB)時效能如何?
A: 函式庫會串流容器結構,保持記憶體使用量適中,但請確保 JVM 有足夠的堆積以容納大型標籤集合。

Q: 我可以修改元資料並寫回檔案嗎?
A: GroupDocs.Metadata 主要聚焦於讀取。寫入功能有限,請查閱最新 API 文件以了解是否支援寫入。

結論

您現在擁有一份完整、可投入生產環境的 extracting mkv metadata java 使用 GroupDocs.Metadata 的指南。透過存取 EBML 標頭、段落資訊、標籤與軌道細節,您可以驅動媒體目錄、自動化品質檢查,或豐富影片串流服務。請嘗試這些程式碼片段,將其套用於自己的工作流程,並探索函式庫更廣泛的格式支援,以開啟更多可能性。


最後更新: 2025-12-22
測試環境: GroupDocs.Metadata 24.12 for Java
作者: GroupDocs