提取 MKV 元数据 Java 与 GroupDocs.Metadata
多媒体文件无处不在,能够读取它们的内部细节对于媒体管理、目录编制和分析至关重要。在本教程中,您将学习 如何使用强大的 GroupDocs.Metadata 库提取 mkv metadata java。我们将演示如何设置库、提取 EBML 头、段信息、标签和轨道数据,并展示这些知识在实际场景中的价值。
快速答案
- “extract mkv metadata java” 是什么意思? 这是使用 Java 以编程方式读取 MKV 文件元数据的过程。
- 应该使用哪个库? 使用 GroupDocs.Metadata for Java,它提供了对 Matroska 文件的完整 API。
- 需要许可证吗? 免费试用可用于评估;购买许可证后可去除使用限制。
- 可以读取其他格式吗? 可以,同一库支持 MP4、AVI、MP3 等多种格式。
- 运行时需要网络连接吗? 不需要,所有提取工作在本地完成,只要将库添加到项目中即可。
什么是 Matroska (MKV) 元数据?
Matroska 是一种开放、灵活的容器格式。其元数据包括 EBML 头(文件版本、文档类型)、段详情(时长、复用应用程序)、标签(标题、描述)以及轨道规格(音频/视频编解码器、语言)。访问这些数据可以帮助您构建媒体目录、验证文件完整性或自动生成缩略图。
为什么选择 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>
直接下载:
如果不想使用 Maven,可从 GroupDocs.Metadata for Java releases 下载最新版本。
获取许可证
先使用免费试用探索功能。生产环境请购买许可证,或从 GroupDocs 获取临时许可证以去除试用限制。
基本初始化和设置
下面的代码展示了打开 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
}
}
}
关键点
getRootPackageGeneric()返回 Matroska 包的入口点。- EBML 属性(
docType、version等)帮助您验证文件兼容性。
读取 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(例如movie、track)组织。 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)。- 这些数据对转码流水线或质量检查至关重要。
常见问题与故障排除
| 症状 | 可能原因 | 解决方案 |
|---|---|---|
NullPointerException 在访问 getEbmlHeader() 时出现 | 文件路径不正确或文件未找到 | 检查 new Metadata("...") 中的路径并确保文件存在。 |
| 未返回标签 | MKV 文件缺少标签元素 | 使用包含元数据标签的媒体文件(例如通过 MKVToolNix 添加的)。 |
| 大文件处理缓慢 | 堆内存不足 | 增加 JVM 堆大小(-Xmx2g 或更高),或在可能的情况下分块处理文件。 |
常见问答
问:我可以使用同一库提取其他视频格式的元数据吗?
答:可以,GroupDocs.Metadata 支持 MP4、AVI、MOV 等多种格式。API 使用方式类似,只需使用相应的根包类。
问:生产环境是否必须购买许可证?
答:许可证可去除试用限制并提供完整功能。库在试用模式下可用于评估。
问:提取过程是否离线进行?
答:完全离线。只要 JAR 在类路径中,所有元数据读取均在本地完成,无需网络请求。
问:在处理非常大的 MKV 文件(数 GB)时性能如何?
答:库会流式读取容器结构,保持内存占用适中,但请确保 JVM 有足够的堆空间以容纳可能的大型标签集合。
问:我可以修改元数据并写回文件吗?
答:GroupDocs.Metadata 主要侧重于读取。写入功能有限,请查阅最新 API 文档了解写入支持情况。
结论
现在您已经掌握了使用 GroupDocs.Metadata 提取 mkv metadata java 的完整、可用于生产的指南。通过访问 EBML 头、段信息、标签和轨道细节,您可以为媒体目录、自动质量检查或视频流服务提供强大支持。尝试代码片段,依据自己的工作流进行适配,并探索库对更多格式的支持,以实现更广阔的可能性。
最后更新: 2025-12-22
测试环境: GroupDocs.Metadata 24.12 for Java
作者: GroupDocs