ID3
ID3는 MP3 파일에서 사용하는 메타데이터 포맷으로, 음악의 제목, 음악가 이름 등의 음악 파일에 관련된 정보를 담는다.
ID3에는 ID3v1과 ID3v2 두 가지의 버전이 있으며, 이들은 서로 호환성이 없으며 하나의 파일 안에 동시에 존재할 수도 있다.
ID3v1과 ID3v1.1
편집ID3v1은 1996년에 에릭 켐프(Eric Kemp)에 의해 고안되어 사실상의 표준이 되었다. ID3v1은 파일 끝에 128 바이트를 덧붙이는데, ‘TAG’라는 문자열로 시작되므로 미디어 플레이어가 쉽게 인식할 수 있다. 초기의 MP3 재생기는 때때로 MPEG 스트림 사이에 삽입된 데이터에 적절히 대응하지 못하고, 재생을 멈추거나 잡음이 튀는 등의 문제가 있었고, 심지어 재생을 못하기도 했다(태그가 파일의 첫 부분에 있는 경우). 이 같은 문제 때문에 태그는 보통 파일의 첫 부분보다는 끝에 삽입됐다.
오프셋 | 길이 | 설명 |
---|---|---|
0 | 3 | "TAG" 인식 문자열 |
3 | 30 | 음악 제목 문자열 |
33 | 30 | 가수(음악가) 문자열 |
63 | 30 | 음반 문자열 |
93 | 4 | 음반 출시년도 문자열 |
97 | 30 | 비고 문자열 |
127 | 1 | 장르 바이트[* 1] |
ID3v1.1은 1997년에 미하엘 무췰러(Michael Mutschler)에 의해 ID3v1의 확장으로 고안된 것으로, ID3v1의 128 바이트를 유지하면서 곡 번호 정보를 추가했다. 이 새 필드는 비고 필드의 끝에서 두 번째 바이트에 위치한다.
오프셋 | 길이 | 설명 |
---|---|---|
0 | 3 | "TAG" 인식 문자열 |
3 | 30 | 음악 제목 문자열 |
33 | 30 | 가수(음악가) 문자열 |
63 | 30 | 음반 문자열 |
93 | 4 | 음반 출시년도 문자열 |
97 | 28 | 비고 문자열 |
125 | 1 | 바이트 분리자 (항상 0) |
126 | 1 | 곡 번호 바이트 |
127 | 1 | 장르 바이트 |
ID3v1과 ID3v1.1의 규격은 모든 문자열이 ISO 8859-1로 부호화(인코딩)된 것으로 간주한다. 그러나 많은 프로그램들이 서유럽 외의 언어를 지원하기 위해 시스템의 기본 인코딩을 사용한다. 규격상 인코딩에 대한 공통적인 처리 방식이 없기 때문에, 서로 다른 인코딩을 사용하는 시스템 간에는 인식을 제대로 하지 못하는 문제가 생길 수 있다. 또한 ID3v1 규격에는 모든 문자열의 끝에 남는 공간에는 널 문자를 채우도록 되어 있지만, 윈앰프와 같은 일부 프로그램들은 공백 문자와 같은 다른 문자를 채우기도 한다.
ID3v2
편집ID3v1은 그 크기가 128바이트로 정해졌기 때문에, 추가적인 정보를 넣는 것이 거의 불가능했다. 이 문제를 해결하기 위해 Lyric3과 같은 다른 포맷이 제안되기도 하였으며, 마틴 닐슨(Martin Nilsson)이 제안한 ID3v2 태그 포맷도 이런 문제를 극복하였다. ID3v2 태그 포맷은 다음과 같은 특징을 가지고 있다.
- 파일의 첫 부분에 큰 데이터 블록으로 삽입되며, ID3v1과의 호환성이 없다. (ID3v2.4부터는 선택적으로 파일의 끝에 삽입할 수 있다)
- 프로그램이 파일의 끝까지 읽어 들이기 전에 태그 정보를 얻을 수 있기 때문에 스트리밍 파일을 재생할 때 이득이 된다.
- 태그의 길이가 변경될 경우 전체 파일이 재작성되어야 하기 때문에 태그를 쓸 때 효율성 면에서 불리할 수 있다. 이런 이유 때문에 ID3v2 태그 뒤에 적당한 공백을 넣어서, 태그의 길이가 어느 이상 커지지 않으면 전체 파일을 재작성하지 않는 방법을 사용하는 경우도 있다.
- 몇 개의 고정된 필드를 제공했던 ID3v1과는 달리, ID3v2 태그는 포맷이 정형화된 태그 프레임들로 이루어져 있기 때문에 확장하기 용이하다.
- 작사자, 지휘자, 매체 종류, BPM, 가사, 이미지, 볼륨, 잔향 설정, 암호화된 정보 등과 같은 다양한 정보를 넣을 수 있다.
- 태그에 가짜 동기 신호가 삽입되는 것을 방지하기 위한 비동기화(unsynchronisation) 옵션을 제공하기 때문에, ID3v2 태그가 삽입된 MP3 파일은 ID3v2를 지원하지 않는 프로그램에서도 안전하게 재생할 수 있다.
- 태그 전체의 크기는 256MB까지 허용되며 프레임 하나의 크기는 16MB까지 허용된다.
- 유니코드를 지원하므로 국제화된 태그를 이용할 수 있다. 기본적으로 UTF-16 인코딩을 지원하며, 또한 ID3v2.4부터는 UTF-8을 지원한다.
ID3v2에는 다음과 같은 세 가지 버전이 있다. 각 버전들은 구조가 비슷하지만 서로 호환성은 없다.
- ID3v2.2 (1998년): ID3v2 태그의 첫 버전으로, 현재는 거의 사용되지 않는다.
- ID3v2.3 (1999년): 태그 프레임의 속성을 나타내는 필드가 추가되었으며 확장된 헤더를 제공한다.
- ID3v2.4 (2000년): 확장된 헤더의 구조가 바뀌었고, 푸터를 지원하므로 파일의 끝에도 삽입할 수 있다. 또한 UTF-8 인코딩을 지원한다.
ID3v2는 너무 많은 정보를 하나의 메타데이터 포맷에 담기 때문에 구현이 힘들다는 단점을 갖고 있다. 예를 들어, 오디오의 길이를 저장하는 TLEN 프레임과 오디오의 인코딩 방법을 저장하는 AENC 프레임 등은 메타데이터가 담긴 파일을 분석해도 알아 낼 수 있는 정보이며(다만 경우에 따라서 오디오의 길이를 쉽게 알 수 없는 경우는 있다), ID3v2.4에 있는 84개의 프레임이 각각 서로 다른 내부 구조를 갖고 있으며 버전마다 구조가 다른 경우도 있기 때문에 일괄적인 처리가 힘들어진다. APEv2와 같이 나중에 만들어진 메타데이터 포맷은 내부 구조를 통일하여 이런 문제를 해결한다.
같이 보기
편집외부 링크
편집- (영어) ID3v2 공식 웹사이트
- (영어) 초기 ID3v2 규격
- (영어) ID3v1에서 정의된 음악 장르 목록
- (영어) ID3 code