{{위키데이터 속성 추적}}
[[파일:ID3 in KDE3 (cs).png|thumb]]
'''ID3'''는 [[MP3]] 파일에서 사용하는 [[메타데이터]] 포맷으로, 음악의 제목, 음악가 이름 등의 음악 파일에 관련된 정보를 담는다.

ID3에는 ID3v1과 ID3v2 두 가지의 버전이 있으며, 이들은 서로 호환성이 없으며 하나의 파일 안에 동시에 존재할 수도 있다.

== ID3v1과 ID3v1.1 ==
ID3v1은 [[1996년]]에 에릭 켐프(Eric Kemp)에 의해 고안되어 사실상의 표준이 되었다. ID3v1은 파일 끝에 128 [[바이트]]를 덧붙이는데, ‘TAG’라는 문자열로 시작되므로 [[미디어 플레이어]]가 쉽게 인식할 수 있다. 초기의 MP3 재생기는 때때로 [[MPEG]] 스트림 사이에 삽입된 데이터에 적절히 대응하지 못하고, 재생을 멈추거나 잡음이 튀는 등의 문제가 있었고, 심지어 재생을 못하기도 했다(태그가 파일의 첫 부분에 있는 경우). 이 같은 문제 때문에 태그는 보통 파일의 첫 부분보다는 끝에 삽입됐다.

{| class="wikitable" style="text-align:center"
|+ '''ID3v1 포맷'''
! 오프셋 !! 길이 !! 설명
|-
| 0 || 3 || "TAG" 인식 문자열
|- 
| 3 || 30 || 음악 제목 문자열
|- 
| 33 || 30 || 가수(음악가) 문자열
|- 
| 63 || 30 || 음반 문자열
|- 
| 93 || 4 || 음반 출시년도 문자열
|- 
| 97 || 30 || 비고 문자열
|- 
| 127 || 1 || 장르 바이트<ref group="*">원래 규격에는 0부터 79까지 80개 값에 대해서만 정의되어 있었지만, [[윈앰프]]에서는 이 정의를 147까지 확장했다.</ref>
|}
<references group="*" />

ID3v1.1은 [[1997년]]에 [[미하엘 무췰러]](Michael Mutschler)에 의해 ID3v1의 확장으로 고안된 것으로, ID3v1의 128 [[바이트]]를 유지하면서 '''곡 번호''' 정보를 추가했다. 이 새 필드는 '''비고''' 필드의 끝에서 두 번째 [[바이트]]에 위치한다.

{| class="wikitable"
|+ '''ID3v1.1 포맷'''
! 오프셋 !! 길이 !! 설명
|-
| 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개의 프레임이 각각 서로 다른 내부 구조를 갖고 있으며 버전마다 구조가 다른 경우도 있기 때문에 일괄적인 처리가 힘들어진다. [[APE 태그|APEv2]]와 같이 나중에 만들어진 [[메타데이터]] 포맷은 내부 구조를 통일하여 이런 문제를 해결한다.

== 같이 보기 ==
* [[APE 태그|APEv2]]
* [[보비스 코멘트]]

== 외부 링크 ==
* {{언어링크|en}} [https://web.archive.org/web/20100516140449/http://www.id3.org/ ID3v2 공식 웹사이트]
* {{언어링크|en}} [https://web.archive.org/web/20050831205932/http://www.id3.org/id3v2-00.txt 초기 ID3v2 규격]
* {{언어링크|en}} [https://web.archive.org/web/20050907065104/http://www.linuxselfhelp.com/HOWTO/MP3-HOWTO-13.html ID3v1에서 정의된 음악 장르 목록]
* {{언어링크|en}} [https://web.archive.org/web/20140407071748/http://talkera.org.cp-in-1.webhostbox.net/wp/?p=81 ID3 code]
[[분류:메타데이터]]