如何在 Java 中使用 GroupDocs.Metadata 提取 mkv 元資料
在本完整指南中,您將學習 如何在 Java 中提取 mkv 元資料,使用 GroupDocs.Metadata 函式庫。無論您是建立媒體目錄、驗證編碼參數,或自動產生縮圖,程式化讀取 Matroska(MKV)元資料都能節省大量手動時間。我們將說明原因、前置條件、具體設定步驟,以及展示 EBML 標頭、段落資訊、標籤與軌道資料的詳細程式碼片段。
快速解答
- 「read mkv metadata java」是什麼意思? 這是使用 Java 程式化提取 MKV 檔案中 Matroska 容器的元資料(標題、編解碼器、時長等)。
- 我應該使用哪個函式庫? GroupDocs.Metadata for Java 提供完整功能、高效能的 API,支援 Matroska 以及超過 50 種其他格式。
- 我需要授權嗎? 免費試用可用於評估;商業授權則移除所有試用限制。
- 我可以讀取其他格式嗎? 可以——相同的 API 可讀取 MP4、AVI、MOV、MP3 以及更多容器。
- 執行時需要網路連線嗎? 不需要——所有提取皆在本機完成,只要 JAR 已放在 classpath 中即可。
什麼是 Matroska (MKV) 元資料?
Matroska(MKV)元資料是儲存在 Matroska 容器內的結構與描述資訊集合,包含 EBML 標頭(檔案版本與文件類型)、段落細節(時長、混流應用程式)、使用者自訂標籤(標題、描述)以及軌道規格(音訊/視訊編解碼器 ID、語言、位元率)。存取這些資料可讓您建立可搜尋的目錄、驗證檔案完整性,或驅動自動化工作流程,例如產生縮圖。
為什麼要在 Java 中讀取 mkv 元資料?
在 Java 中讀取 MKV 元資料可讓您 自動化 數千個影片檔案的目錄建立、在發佈前 驗證 編解碼器與語言需求,並 填充 可搜尋的資料庫,包含標題、時長與軌道語言。它同時提供 單一程式碼基礎 以從多種容器提取影片元資料,降低維護負擔,確保在媒體流程中執行一致的品質檢查。
為什麼使用 GroupDocs.Metadata for Java?
GroupDocs.Metadata for Java 是成熟的函式庫,支援 超過 50 種輸入與輸出格式,包括 Matroska、MP4、AVI 與 MOV。它以串流方式處理容器結構,即使是多 GB 的檔案也能保持低記憶體使用量。API 抽象化低階 EBML 解析,讓您專注於業務邏輯。整合只需加入一個 Maven 依賴,且函式庫持續更新以因應最新的編解碼規範。
前置條件
- 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 是一個函式庫,可讀取超過 50 種檔案格式的元資料,包括 Matroska(MKV)。可透過 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 檔案,然後呼叫相應的 getter —— 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)。- 此資訊對於轉碼流程、品質檢查與動態串流決策至關重要。
讀取 mkv 元資料的常見使用情境
- 媒體目錄 – 填充資料庫表格,包含標題、時長與語言代碼,以加速搜尋。
- 自動化品質控制 – 在發佈前驗證每個檔案是否包含必要標籤且符合編解碼標準。
- 動態串流 – 在執行時根據使用者偏好選擇適當的音訊或字幕軌道。
- 內容遷移 – 先提取元資料,然後將其注入新儲存系統或內容傳遞網路。
常見問題與故障排除
| 症狀 | 可能原因 | 解決方法 |
|---|---|---|
NullPointerException 在存取 getEbmlHeader() 時發生 | 檔案路徑不正確或找不到檔案 | 確認 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 有足夠的堆積以容納大型標籤集合,若處理極大檔案,請考慮增加 -Xmx 設定。
Q: 我可以修改元資料並寫回檔案嗎?
A: GroupDocs.Metadata 主要聚焦於讀取。寫入支援有限,請參考最新的 API 文件以了解任何寫回功能。
最後更新: 2026-09-02
測試環境: GroupDocs.Metadata 24.12 for Java
作者: GroupDocs