Java와 GroupDocs.Metadata를 사용하여 mkv 메타데이터 추출하는 방법

이 포괄적인 가이드에서는 GroupDocs.Metadata 라이브러리를 사용하여 Java에서 mkv 메타데이터를 추출하는 방법을 배웁니다. 미디어 카탈로그를 구축하거나 인코딩 매개변수를 검증하거나 썸네일 생성을 자동화하는 경우, 프로그래밍 방식으로 Matroska(MKV) 메타데이터를 읽으면 수많은 수작업 시간을 절약할 수 있습니다. 왜 필요한지, 전제 조건, 정확한 설정 단계, EBML 헤더, 세그먼트 정보, 태그 및 트랙 데이터를 노출하는 상세 코드 스니펫을 단계별로 살펴보겠습니다.

빠른 답변

  • “read mkv metadata java”는 무엇을 의미합니까? 이것은 Java를 사용하여 MKV 파일에서 Matroska 컨테이너 메타데이터(제목, 코덱, 지속 시간 등)를 프로그래밍 방식으로 추출하는 것입니다.
  • 어떤 라이브러리를 사용해야 합니까? GroupDocs.Metadata for Java는 Matroska와 50개 이상의 다른 형식을 위한 전체 기능을 갖춘 고성능 API를 제공합니다.
  • 라이선스가 필요합니까? 무료 체험은 평가에 사용할 수 있으며, 상업용 라이선스를 구매하면 모든 체험 제한이 해제됩니다.
  • 다른 형식을 읽을 수 있습니까? 예 – 동일한 API로 MP4, AVI, MOV, MP3 및 기타 많은 컨테이너를 읽을 수 있습니다.
  • 런타임에 인터넷 접속이 필요합니까? 아니요 – JAR가 클래스패스에 있으면 모든 추출이 로컬에서 수행됩니다.

Matroska (MKV) 메타데이터란?

Matroska (MKV) 메타데이터는 Matroska 컨테이너 내부에 저장된 구조적 및 설명적 정보의 모음으로, EBML 헤더(파일 버전 및 문서 유형), 세그먼트 세부 정보(지속 시간, 믹싱 애플리케이션), 사용자 정의 태그(제목, 설명) 및 트랙 사양(오디오/비디오 코덱 ID, 언어, 비트레이트) 등을 포함합니다. 이 데이터를 접근하면 검색 가능한 카탈로그를 구축하거나 파일 무결성을 확인하거나 썸네일 생성과 같은 자동화 워크플로를 구동할 수 있습니다.

왜 Java에서 mkv 메타데이터를 읽어야 할까요?

Java에서 MKV 메타데이터를 읽으면 카탈로그 자동화를 통해 수천 개의 비디오 파일을 관리하고, 코덱 및 언어 요구 사항을 검증하여 게시 전에 확인하며, 제목, 지속 시간 및 트랙 언어와 같은 정보를 검색 가능한 데이터베이스에 채워 넣을 수 있습니다. 또한 여러 컨테이너에서 비디오 메타데이터를 추출하기 위한 단일 코드 베이스를 제공하여 유지 관리 부담을 줄이고 미디어 파이프라인 전반에 걸쳐 일관된 품질 검사를 보장합니다.

왜 Java용 GroupDocs.Metadata를 사용해야 할까요?

Java용 GroupDocs.Metadata는 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).

Java용 GroupDocs.Metadata 설정

Java용 GroupDocs.Metadata는 Matroska(MKV)를 포함한 50개 이상의 파일 형식에서 메타데이터를 읽을 수 있게 해주는 라이브러리입니다. 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).
  • 이 정보는 트랜스코딩 파이프라인, 품질 검사 및 동적 스트리밍 결정에 필수적입니다.

Java에서 mkv 메타데이터를 읽는 일반적인 사용 사례

  • 미디어 카탈로그 – 빠른 검색을 위해 제목, 지속 시간 및 언어 코드를 데이터베이스 테이블에 채워 넣습니다.
  • 자동 품질 관리 – 모든 파일에 필수 태그가 포함되어 있고 코덱 표준을 준수하는지 릴리스 전에 검증합니다.
  • 동적 스트리밍 – 런타임에 사용자 선호도에 따라 적절한 오디오 또는 자막 트랙을 선택합니다.
  • 콘텐츠 마이그레이션 – 메타데이터를 한 번 추출한 뒤 새로운 스토리지 시스템이나 CDN에 삽입합니다.

일반적인 문제 및 해결 방법

증상가능한 원인해결 방법
getEbmlHeader()에 접근할 때 NullPointerException파일 경로가 잘못되었거나 파일을 찾을 수 없음new Metadata("...")에서 경로를 확인하고 디스크에 파일이 존재하는지 확인하십시오.
태그가 반환되지 않음MKV 파일에 태그 요소가 없음메타데이터 태그가 포함된 미디어 파일을 사용하십시오(예: MKVToolNix로 추가된 파일).
대용량 파일에서 처리 속도 저하힙 메모리 부족JVM 힙을 늘리세요(-Xmx2g 이상) 또는 가능하면 파일을 청크로 처리하십시오.

자주 묻는 질문

Q: 같은 라이브러리로 다른 비디오 형식에서도 메타데이터를 추출할 수 있나요?
A: 예, GroupDocs.Metadata는 MP4, AVI, MOV 등 많은 형식을 지원합니다. API 패턴은 동일하므로 해당 형식에 맞는 루트 패키지 클래스를 사용하면 됩니다.

Q: 프로덕션 사용에 라이선스가 필요합니까?
A: 상업용 라이선스를 구매하면 체험 제한이 해제되고 전체 기능을 사용할 수 있습니다. 라이브러리는 평가 목적으로 체험 모드에서도 작동합니다.

Q: 추출이 오프라인에서 이루어지나요?
A: 네, JAR가 클래스패스에 있으면 모든 메타데이터 읽기가 로컬에서 수행되며 네트워크 호출이 없습니다.

Q: 매우 큰 MKV 파일(수 GB)에서 라이브러리 성능은 어떻습니까?
A: 라이브러리는 컨테이너 구조를 스트리밍하여 메모리 사용량을 적게 유지합니다. 큰 태그 컬렉션을 처리할 경우 JVM에 충분한 힙이 있는지 확인하고, 매우 큰 파일을 처리한다면 -Xmx를 늘리는 것을 고려하십시오.

Q: 메타데이터를 수정하고 파일에 다시 쓸 수 있나요?
A: GroupDocs.Metadata는 주로 읽기에 초점을 맞추고 있습니다. 쓰기 지원은 제한적이며, 쓰기 기능에 대해서는 최신 API 문서를 참고하십시오.


마지막 업데이트: 2026-09-02
테스트 환경: GroupDocs.Metadata 24.12 for Java
작성자: GroupDocs

관련 튜토리얼