홈 › 3장 MediaInfo와 파일 분석

3.1 MediaInfo 사용법 - GUI, CLI, 라이브러리

미디어 파일 분석의 표준 도구 MediaInfo의 세 가지 사용 방식과 출력 형식(TEXT, JSON, XML), 라이브러리 API 호출 구조를 설명합니다.

최종 수정 2026-10-28 · 읽는 시간 약 3분 · 운영 프리즘(Prism) · 편집 원칙

#MediaInfo란

MediaInfo는 MediaArea가 개발한 오픈소스(BSD 계열 라이선스) 미디어 분석 도구입니다. 파일을 열어 컨테이너, 코덱, 해상도, 프레임레이트, 타임코드 같은 기술 메타데이터를 읽어 줍니다. 영상을 재생하거나 디코딩하지 않고 헤더와 구조를 분석하기 때문에 빠르고, 수백 가지 포맷을 지원합니다.

MAM과 인제스트 시스템에서 MediaInfo가 널리 쓰이는 이유는 세 가지입니다.

  1. 방송용 포맷(MXF, XDCAM, DNxHD, ProRes, 타임코드 등)의 정보를 상세하게 보여 줍니다.
  2. 같은 엔진을 GUI, 명령줄, 라이브러리(DLL/so) 로 모두 쓸 수 있습니다.
  3. 결과를 TEXT, JSON, XML, HTML 같은 형식으로 뽑을 수 있어 자동화가 쉽습니다.

#사용 방식 세 가지

#1) GUI

가장 쉬운 방식입니다. 파일을 끌어다 놓으면 Basic, Text, Tree, HTML 같은 보기 모드로 정보를 보여 줍니다. 새 포맷을 처음 만났을 때 "이게 뭐지?"를 확인하는 용도로 좋습니다.

#2) 명령줄(CLI)

스크립트와 배치 처리에 적합합니다.

# 기본 텍스트 출력
mediainfo input.mxf

# 가능한 모든 항목 출력 (--Full 또는 -f)
mediainfo --Full input.mxf

# JSON으로 출력 (파싱용)
mediainfo --Output=JSON input.mxf

# 특정 항목만 뽑아내기
mediainfo --Inform="Video;%Width%x%Height% %FrameRate%" input.mxf

--Inform의 %항목% 문법은 파일명 규칙이나 DB 입력용 문자열을 만들 때 편리합니다.

#3) 라이브러리

MAM이나 인제스트 서버처럼 프로그램 안에서 분석하려면 MediaInfo 라이브러리(Windows의 MediaInfo.dll)를 직접 호출합니다. 호출 흐름은 단순합니다.

MediaInfo_New()                    객체 생성
MediaInfo_Option("Complete","1")   옵션 지정 (전체 항목 출력 여부)
MediaInfo_Option("Inform","JSON")  출력 형식 지정
MediaInfo_Open(파일 경로)           파일 열기 → 분석 수행
MediaInfo_Inform()                 지정한 형식의 문자열 얻기
MediaInfo_Get(스트림종류, 번호, "항목명")  항목 하나만 얻기
MediaInfo_Close() / _Delete()      정리

C++, C#, Delphi, Python 등 대부분의 언어용 래퍼(wrapper)가 이 흐름을 그대로 따릅니다. 실제로 MediaInfo DLL의 C++ 헤더(MediaInfoDLL.h)를 이용해 간단한 분석 GUI를 만들면, 핵심 코드는 파일을 열고 Option으로 출력 형식(TEXT / OLDXML / JSON / HTML)을 고른 뒤 Inform()을 호출하는 정도입니다.

Python에서 ctypes로 DLL을 직접 호출해 본 최소 예제입니다(Windows 64비트 DLL 기준).

import ctypes, os

d = ctypes.WinDLL(os.path.abspath('MediaInfo.dll'))
d.MediaInfo_New.restype = ctypes.c_void_p
d.MediaInfo_Open.restype = ctypes.c_size_t
d.MediaInfo_Open.argtypes = [ctypes.c_void_p, ctypes.c_wchar_p]
d.MediaInfo_Option.restype = ctypes.c_wchar_p
d.MediaInfo_Option.argtypes = [ctypes.c_void_p, ctypes.c_wchar_p, ctypes.c_wchar_p]
d.MediaInfo_Inform.restype = ctypes.c_wchar_p
d.MediaInfo_Inform.argtypes = [ctypes.c_void_p, ctypes.c_size_t]

h = d.MediaInfo_New()
d.MediaInfo_Option(h, 'Complete', '0')
d.MediaInfo_Option(h, 'Inform', 'TEXT')
d.MediaInfo_Open(h, os.path.abspath('input.mxf'))
print(d.MediaInfo_Inform(h, 0))

#출력 형식 선택

형식 옵션 값 용도
TEXT TEXT 사람이 읽기
JSON JSON 프로그램이 파싱, DB 저장
XML OLDXML 또는 MIXML 기존 XML 연동. MIXML은 버전에 따라 구조가 다름
HTML HTML 보고서
EBUCore, PBCore EBUCore 등 방송 메타데이터 교환 표준 형식

Complete=1(CLI의 --Full)을 주면 일반 출력에서 생략되는 수백 개의 항목을 모두 받을 수 있습니다. 대량 인제스트에서는 필요한 항목만 Get으로 읽는 방식이 더 가볍습니다.

#필요한 항목만 뽑는 방법

MediaInfo는 항목 이름이 정해져 있습니다. 예를 들어 Video 스트림의 Format, Width, Height, FrameRate, ScanType, Format_Commercial_IfAny 같은 이름으로 접근합니다. 전체 항목 목록은 mediainfo --Info-Parameters 명령으로 확인할 수 있습니다.

운영 시스템에서는 이 목록 가운데 쓰는 항목만 화이트리스트로 정해 두고 읽는 방식이 안정적입니다. 라이브러리 버전이 올라가며 항목이 추가되거나 이름이 바뀌어도 시스템이 영향을 덜 받기 때문입니다.

#정리

  • MediaInfo는 재생 없이 파일 헤더와 구조를 읽는 분석 도구입니다.
  • GUI는 탐색용, CLI는 스크립트용, 라이브러리는 시스템 통합용입니다.
  • 자동화에는 JSON 출력과 필요한 항목만 읽는 방식을 권장합니다.

다음 글에서는 실제 출력을 보면서 각 항목이 무엇을 의미하는지 읽어 봅니다.

#참고 자료

링크는 2026-10-28에 열람이 되는 것을 확인했습니다. 규격과 도구 문서는 개정될 수 있으므로 적용하기 전에 최신 판을 확인하세요.