2009. 10. 9. 10:32

ID3v2 분석

mp3 파일은 크게 보면 아래와 같은 구조로 이루어져 있다.


ID3v2는 중복해서 들어갈 수 있기 때문에 하나만 있을 수도 있고 여러개가 있을 수도 있다. ID3v1은 파일의 끝에 붙는다. 오늘은 ID3v2에 대해 더 자세히 알아보도록 하겠다.

=======================================================================================================

ID3v2 의 구조

ID3v2는 아래와 같은 형식으로 이루어져 있다.


헤더는 ID3v2에 대한 전체적인 정보를 가지고 있고, 각 프레임은 가수, 제목, 앨범, 앨범자켓 이미지등의 정보가 각각의 프레임으로 구성되어 있다.

실제 mp3을 헥스뷰어로 열어봐서 각 바이트별로 분석해보겠다.


=======================================================================================================
ID3v2 헤더(10 bytes)


==========================================================
Byte(Length)      Content
==========================================================
0-2(3)               Tag Identifier (ID3가 적힌다)
3-4 (2)              Tag Version.
5(1)                  Flags
6-9(4)               Size of Tag (Tag의 사이즈)
==========================================================

0x00 ~ 0x02 : ID3라고 되있으므로 이 부분부터는 ID3v2라는 것을 의미한다.
0x03 ~ 0x04 : 4와 0으로 되있으므로 버전이 ID3v2.4.0 임을 의미한다.
0x05 : flag 인데 대부분 0 으로 되있다.
0x06 ~ 0x09 :
 tag의 크기인데 중요한것은 이 값이 mp3안에 있는 모든 tag의 크기가 아니라 자신의 크기만이란 것이다. 이 뒤에 ID3으로 시작하는 부분이 또 있을 수 있다. 즉, 위에서 말했듯이 중복해서 들어갈 수 있기 때문에 tag의 총 크기를 구하려면 크기를 누적해서 구해야한다.
 또 중요한 것이 있는데 저기 적힌 값은 Encoding 된 값이다. 4바이트 중에 각 바이트의 최상위 비트를 제거하고 붙여주어야 원래 크기가 된다.
 실제로 값을 구해보면 00 00 05 13 을 2진수로 표현하면,  0000 0000 , 0000 0000,  0000 0101,  0001 0011 이 된다. 여기서 각 바이트의 최상위 비트를 제거하면 000 0000,  000 0000, 000 0101, 001 0011 이 되고, 이를 한줄로 합치면
0000 0000 0000 0000 0010 1001 0011 = 0x293 가 된다.
 그런데 이 값은 헤더의 길이는 포함하지 않은 길이이기 때문에 실제 ID3v2 tag의 길이는 헤더 길이 10바이트를 더해준 0x293 + 10 = 0x29D 가 된다.

=======================================================================================================
ID3v2 프레임(가변 길이)


프레임은 헤더와 내용으로 이루어져있다. 빨간색으로 표시한 부분이 헤더이고, 파란색으로 표시한 부분이 데이터이다.
=============================
- Header
Byte  Content
0-3    Frame identifier
4-7    Size
8-9   Flags
=============================

0x0A ~ 0x0D : 프레임의 ID 이다. 이에 대한 자세한 정보는 이전 포스팅에서 다루었다.

               TIT2는 Title/songname/content description 즉, 노래 제목이다.
0x0E ~ 0x11 : 프레임의 크기이다. 00 00 00 38 이므로 십진수로 56이다. 이것은 헤더를 제외한 프레임 크기이다.
                    따라서 헤더를 포함한 프레임의 크기는 헤더 10바이트를 더한 66바이트 이다.
0x12 ~ 0x13 : 플래그인데 보통 0으로 세팅되어 있다.

헤더 뒤부터는 데이터인데 프레임의 크기가 56이므로 되어있었으므로 56바이트의 크기로 TIT2 즉, 노래 제목이 저장되어 있다.


표시된 부분 다음에 보면 다시 TPE1이라고 되있는데 이것을 이전 포스팅에서 찾아보면 가수이름이라고 되있다. 이런식으로 프레임들이 이어져 붙어 있다.

'공부합시다 > 파일 포맷' 카테고리의 다른 글

PE 파일 분석  (3) 2009.10.26
ID3v2 Frame ID List  (0) 2009.10.08
MP3 ID3 tag 분석  (0) 2009.10.08