Как извлечь метаданные mkv в Java с помощью GroupDocs.Metadata

В этом всестороннем руководстве вы узнаете как извлечь метаданные mkv в Java с использованием библиотеки GroupDocs.Metadata. Независимо от того, создаёте ли вы каталог медиа, проверяете параметры кодирования или автоматизируете генерацию миниатюр, программное чтение метаданных Matroska (MKV) экономит бесчисленные часы ручного труда. Мы пройдёмся по причинам, предварительным требованиям, точным шагам настройки и подробным фрагментам кода, которые раскрывают заголовки EBML, информацию о сегментах, теги и данные дорожек.

Быстрые ответы

  • Что означает “read mkv metadata java”? Это программное извлечение метаданных контейнера Matroska (названия, кодеки, длительности и т.д.) из файлов MKV с использованием Java.
  • Какую библиотеку следует использовать? GroupDocs.Metadata for Java предлагает полнофункциональный, высокопроизводительный API для Matroska и более 50 других форматов.
  • Нужна ли лицензия? Бесплатная пробная версия подходит для оценки; коммерческая лицензия снимает все ограничения пробного режима.
  • Можно ли читать другие форматы? Да — тот же API читает MP4, AVI, MOV, MP3 и многие другие контейнеры.
  • Требуется ли доступ к интернету во время выполнения? Нет — всё извлечение происходит локально после того, как JAR находится в вашем classpath.

Что такое метаданные Matroska (MKV)?

Метаданные Matroska (MKV) — это набор структурной и описательной информации, хранящейся внутри контейнера Matroska, включая заголовок EBML (версия файла и тип документа), детали сегмента (длительность, приложение мультиплексирования), пользовательские теги (названия, описания) и спецификации дорожек (идентификаторы аудио/видео кодеков, язык, битрейт). Доступ к этим данным позволяет создавать поисковые каталоги, проверять целостность файлов или управлять автоматическими рабочими процессами, такими как генерация миниатюр.

Почему читать метаданные mkv в Java?

Чтение метаданных MKV из Java позволяет автоматизировать каталогизацию тысяч видеофайлов, проверять требования к кодекам и языкам перед публикацией и заполнять поисковые базы данных названиями, длительностями и языками дорожек. Это также обеспечивает единую кодовую базу для извлечения видеометаданных из разных контейнеров, снижая нагрузку на обслуживание и гарантируя единообразные проверки качества в вашей медиа‑конвейере.

Почему использовать GroupDocs.Metadata для Java?

GroupDocs.Metadata for Java — зрелая библиотека, поддерживающая более 50 входных и выходных форматов, включая Matroska, MP4, AVI и MOV. Она потоково читает структуры контейнеров, поэтому потребление памяти остаётся низким даже для многогигабайтных файлов. API абстрагирует низкоуровневый разбор EBML, позволяя сосредоточиться на бизнес‑логике. Интеграция сводится к добавлению одной зависимости Maven, а библиотека постоянно обновляется для поддержки последних спецификаций кодеков.

Предварительные требования

  • GroupDocs.Metadata for Java версии 24.12 или новее.
  • Java Development Kit (JDK) 8 или новее установлен.
  • Maven (или ручное управление JAR) для управления зависимостями.
  • Файл MKV для тестирования, размещённый в папке, к которой вы можете обратиться из кода (например, YOUR_DOCUMENT_DIRECTORY).

Настройка GroupDocs.Metadata для 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, чтобы снять ограничения пробного режима.

Базовая инициализация и настройка

Ниже представлен минимальный код, необходимый для открытия файла MKV с помощью GroupDocs.Metadata.

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

Как читать метаданные mkv в Java с помощью GroupDocs.Metadata

Metadata — основной класс, представляющий файл MKV и предоставляющий доступ к его метаданным.
Загрузите ваш файл MKV через new Metadata("path/to/file.mkv") и вызовите соответствующие геттеры — getRootPackageGeneric(), getSegments(), getTags() и getTracks() — чтобы получить каждый раздел метаданных. Эта цепочка вызовов даёт полное представление о заголовке EBML, информации о сегментах, пользовательских тегах и деталях отдельных дорожек без написания низкоуровневой логики парсинга.

Чтение заголовка EBML Matroska

Заголовок 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 в Java

  • Каталоги медиа – Заполняйте таблицы базы данных названиями, длительностями и кодами языков для быстрого поиска.
  • Автоматический контроль качества – Проверяйте, что каждый файл содержит необходимые теги и соответствует стандартам кодеков перед выпуском.
  • Динамическая потоковая передача – Выбирайте соответствующую аудио- или субтитровую дорожку в зависимости от предпочтений пользователя во время выполнения.
  • Миграция контента – Извлеките метаданные один раз, а затем внедрите их в новую систему хранения или сеть доставки контента.

Распространённые проблемы и устранение неполадок

СимптомВероятная причинаИсправление
NullPointerException при доступе к getEbmlHeader()Неправильный путь к файлу или файл не найденПроверьте путь в new Metadata("...") и убедитесь, что файл существует на диске.
Теги не возвращаютсяФайл MKV не содержит элементов теговИспользуйте медиафайл, содержащий метаданные тегов (например, добавленные через MKVToolNix).
Медленная обработка больших файловНедостаточно памяти в кучеУвеличьте кучу JVM (-Xmx2g или больше) или обрабатывайте файл частями, если возможно.

Часто задаваемые вопросы

Q: Можно ли извлечь метаданные из других видеоформатов с помощью той же библиотеки?
A: Да, GroupDocs.Metadata поддерживает MP4, AVI, MOV и многие другие. Паттерн API идентичен — просто используйте соответствующий класс корневого пакета для нужного формата.

Q: Требуется ли лицензия для продакшн‑использования?
A: Коммерческая лицензия снимает ограничения пробного режима и открывает полный набор возможностей. Библиотека работает в пробном режиме для целей оценки.

Q: Происходит ли извлечение офлайн?
A: Абсолютно. После того как JAR находится в вашем classpath, все чтения метаданных выполняются локально без сетевых запросов.

Q: Как библиотека работает с очень большими файлами MKV (несколько ГБ)?
A: Библиотека потоково читает структуру контейнера, поддерживая скромное потребление памяти. Убедитесь, что у JVM достаточно кучи для больших коллекций тегов, и при необходимости увеличьте -Xmx.

Q: Можно ли изменить метаданные и записать их обратно в файл?
A: GroupDocs.Metadata в основном ориентирована на чтение. Поддержка записи ограничена; см. последнюю документацию API для возможных функций записи.


Последнее обновление: 2026-09-02
Тестировано с: GroupDocs.Metadata 24.12 for Java
Автор: GroupDocs

Связанные учебные материалы