MP4 / ISO 베이스 미디어 파일 분석기
.mp4, .m4a, .m4v, 그리고 퀵타임 .mov는 모두 같은 컨테이너이며 ftyp에 찍힌 브랜드만 다릅니다. 이 도구는 그 박스 구조를 브라우저 안에서 읽습니다. 파일은 업로드되지 않습니다. 가장 먼저 답하는 질문은 패스트 스타트 여부입니다. moov 박스에는 모든 샘플의 크기·시각·오프셋 색인이 들어 있어서, moov가 mdat 뒤에 있으면 플레이어는 마지막 바이트가 도착할 때까지 재생을 시작할 수 없습니다. 로컬에서는 즉시 열리는 영상이 HTTP로 내려받을 때만 한참 멈추는 이유가 바로 이것입니다. 그 아래에는 박스 트리가 유형·오프셋·선언 크기·파일 내 비중과 함께 중첩되어 표시되므로, 용량을 차지하는 것이 실제 미디어인지 지나치게 큰 커버 이미지인지 편집기가 남긴 free 박스인지 한눈에 드러납니다. 트랙마다 ID, 핸들러가 비디오인지 오디오인지 자막인지, 샘플 엔트리에서 읽은 코덱과 설정 박스가 있을 때의 RFC 6381 전체 문자열(avcC의 avc1.42C01E, esds의 mp4a.40.2, vpcC의 vp09.00.30.08), 그리고 영상은 화면 크기를, 음성은 샘플레이트와 채널 수를 보여 줍니다. 길이는 원시 틱 수와 타임스케일을 나눈 형태로 표시합니다. 15360이라는 값은 타임스케일이 600인지 15360인지 알기 전까지 아무 의미가 없고, 무비 헤더가 최종 권위도 아니기 때문입니다. 트랙이 무비 길이보다 길 수 있고, 조각화된 파일은 대개 무비 길이를 0으로 두고 총 길이를 mvex/mehd에 넣습니다. 만든 날짜와 수정한 날짜는 ISO BMFF가 퀵타임에서 물려받은 1904년 기준으로 환산하며, 먹서가 0으로 남긴 경우에는 설정되지 않음으로 표시합니다. 선언된 크기는 결코 그대로 믿지 않습니다. 상위 박스보다 큰 크기를 주장하는 박스는 따라가지 않고 이름이 붙은 오류로 거절하며, 크기 0은 "끝까지", 크기 1은 64비트 확장 크기로 읽고, uuid 박스의 16바이트 확장 유형은 페이로드 앞에서 건너뜁니다. 다만 디코딩은 하지 않습니다. 헤더 뒤의 영상이 온전한지, 소리가 무음인지, 인코더가 실제로 낸 비트레이트가 얼마인지는 알 수 없고, 컨테이너가 스스로 무엇이라고 말하는지만 보여 줍니다.
사용법
- .mp4, .m4a, .m4v, .mov 파일을 상자에 놓습니다. 헤더 박스만 읽으므로 수 기가바이트짜리 영상도 짧은 클립만큼 빠르게 열립니다.
- 패스트 스타트 줄을 먼저 봅니다. 아니오라면 브라우저가 파일 전체를 받아야 1초라도 재생할 수 있다는 뜻이므로, 배포 전에 moov를 앞으로 옮겨 다시 먹싱하세요.
- 플레이어가 파일을 거부할 때는 주 브랜드와 호환 브랜드를 확인합니다. "qt "는 퀵타임 호환만 주장하는 파일이고, 웹 플레이어가 기대하는 것은 "isom"이나 "mp42"입니다.
- 트랙 칸에서 코덱, 트랙 고유의 타임스케일과 길이, 화면 크기나 샘플레이트를 확인합니다. 길이를 타임스케일로 나누면 초가 되며, 계산이 보이도록 두 값을 함께 표시합니다.
- 박스 트리에서 예상보다 큰 항목을 찾습니다. 작은 파일에서는 커버 이미지나 남겨진 free 박스가 놀랄 만큼 큰 비중을 차지하기도 하며, 비중 열이 그것을 드러냅니다.
자주 묻는 질문
- 패스트 스타트는 무엇을 바꾸며, 아닌 파일은 어떻게 고치나요?
- moov 박스는 색인입니다. 파일 안 모든 샘플의 크기와 시각, 바이트 오프셋이 여기에 들어 있습니다. 플레이어는 무엇이든 디코딩하기 전에 이 색인이 필요하므로, 먹서가 기본으로 하는 대로 moov가 mdat 뒤에 쓰이면 HTTP로 스트리밍하는 브라우저는 첫 프레임을 그리기 전에 파일 전체를 받거나 범위 요청으로 moov를 찾아다녀야 합니다. moov를 앞으로 옮기는 것은 미디어를 전혀 바꾸지 않는 순수한 재배치이며, ffmpeg의 -movflags +faststart나 qt-faststart 계열 도구가 해 줍니다. moov가 이동하면 stco나 co64 안의 청크 오프셋이 모두 달라지기 때문에 단순 복사가 아니라 다시 쓰는 작업이 됩니다.
- 길이가 왜 두 숫자를 나눈 형태로 나오나요?
- ISO 베이스 미디어 파일은 시간을 틱으로 저장하고, 헤더마다 1초가 몇 틱인지 알려 주는 타임스케일을 따로 가지고 있습니다. 무비 헤더는 흔히 600이나 1000을 쓰고, 비디오 트랙은 15 fps에 15360처럼 프레임률로 나누어떨어지는 값을, 오디오 트랙은 거의 언제나 샘플레이트 그 자체인 44100이나 48000을 씁니다. 44032라는 값은 그 자체로는 아무 뜻이 없어서, 44.1 kHz 오디오로는 1초이고 600틱 무비 시계로는 73초입니다. 답만 보여 주는 대신 나눗셈을 보여 주면 반올림도 드러납니다. 6초로 예상한 파일이 5.98초로 보고되는 흔한 이유가 트랙 길이가 무비 틱의 정수배가 아니기 때문입니다.
- 만든 날짜가 1904년이거나 설정되지 않음으로 나옵니다. 파일이 망가진 건가요?
- 아닙니다. ISO BMFF는 퀵타임의 기준 시각을 물려받았고 그 기준은 1904년 1월 1일 UTC 자정입니다. 그리고 많은 먹서가 이 칸을 아예 채우지 않습니다. ffmpeg는 기본값으로 0을 쓰는데 0이 곧 기준 시각입니다. 즉 1904년에 만들어진 것처럼 보이는 파일은 사실 만든 시각을 말하지 않기로 한 도구가 만든 파일입니다. 값이 채워져 있어도 시간대 정보가 어디에도 없어 촬영 장소를 알려 주지 못하고, 손쉽게 고칠 수 있으므로 그 자체로는 아무것도 증명하지 못합니다.
- 조각화된 파일은 왜 샘플이 하나도 없는 것처럼 보이나요?
- DASH와 fMP4 기반 HLS, 그리고 갑작스러운 종료에도 살아남아야 하는 녹화가 쓰는 조각화 MP4는 moov에 트랙 정의와 "조각이 뒤따른다"는 뜻의 mvex 박스만 두고, 실제 샘플은 파일 곳곳에 흩어진 moof 박스와 그 뒤의 mdat으로 기술합니다. 그래서 moov 안의 샘플 테이블이 비어 있는 것이 정상이고, 헤더를 쓸 시점에 알 수 없었기 때문에 무비 길이도 보통 0입니다. 누군가 기록해 두었다면 총 길이는 mvex/mehd에 있습니다. 조각화된 파일을 아무 데서나 잘라도 그 지점까지는 재생되는 이유, 그리고 보통의 프로그레시브 MP4는 그렇지 않은 이유가 바로 이 구조입니다.
- MP4, M4A, M4V, MOV, 3GP는 왜 모두 여기서 열리나요?
- 하나의 형식이기 때문입니다. ISO/IEC 14496-12가 박스 구조를 정의하고, 파일 맨 앞의 ftyp 박스가 주 브랜드와 호환 브랜드 목록을 선언합니다. "M4A "는 애플 계열의 오디오 전용, "M4V"는 여기에 애플의 영상 관례를 더한 것, "qt "는 나머지 전부의 조상인 원래 퀵타임 배치, "3gp4"는 모바일 프로파일, 웹 플레이어가 찾는 범용 브랜드는 "isom"이나 "mp42"입니다. 확장자는 운영체제에 주는 힌트일 뿐이고 실제 선언은 브랜드 목록이며, 둘이 어긋나는 일이 잦아 파일이 재생되지 않을 때 가장 먼저 확인할 곳입니다.
- 이 도구가 파일을 고치거나 moov 위치를 바꿔 주나요?
- 아닙니다. 읽기만 하며, 그것도 일부러 최소한만 읽습니다. 파일을 잘라 가며 박스 헤더만 훑기 때문에 mdat은 메모리에 올라오지 않고, 아주 큰 영상도 작은 파일만큼 빨리 검사됩니다. 아무것도 업로드하지 않고 아무것도 다시 쓰지 않습니다. 박스가 파일보다 큰 크기를 주장한다는 오류로 트리가 중간에 끊긴다면 대개 전송 중 잘렸거나 다운로드가 끊긴 파일이며, 이때 복구하는 방법은 헤더 수정이 아니라 남은 조각으로 다시 먹싱하는 것입니다.
관련 도구
WebP 파일 검사기
.webp 파일의 RIFF 청크를 브라우저에서 훑어봅니다. 손실·무손실·확장 구분, 캔버스와 프레임 크기 비교, 애니메이션 타이밍, 알파, ICC, Exif, XMP를 보여줍니다.
GIF 구조 분석기
GIF 파일의 블록 구조를 그대로 읽어 프레임 지연과 폐기 방식, 반복 설정, 팔레트, 투명도, 프레임별 실제 바이트 비용까지 보여줍니다.
STL 3D 모델 분석기 (삼각형·부피·바운딩 박스·베드 적합성)
.stl 파일(바이너리 또는 ASCII)을 드롭하면 즉시 삼각형 수, 바운딩 박스, X×Y×Z 크기, 부피, 표면적, 워터타이트 검사, 3방향 직교 프리뷰, 그리고 흔한 3D 프린터 베드(Bambu·Prusa·Voron·Ender) 적합 여부까지 표시.
폴더 트리 시각화
들여쓰기된 파일·폴더 이름 목록 붙여넣기 → 예쁜 ASCII 트리. README에 붙여넣기 좋음.
기간 변환기
기간을 사람 친화("1h 30m")·시계(1:30:00)·ISO 8601(PT1H30M)·초/분/시/일 사이 변환.
Mbox 보관 파일 뷰어
mbox 보관 파일을 브라우저에서 분할합니다. 메시지 경계와 디코딩된 헤더, MIME 구조, 스레드, 중복 Message-ID를 보여 주며 업로드는 없습니다.