2007년 11월 06일
MP3의 태그(Tag)가 깨지는 현상
MP3의 깨진 태그(Tag)
MP3 음악 파일을 관리하다 보면 음악의 문자 정보인 Tag의 일부, 혹은 전부의 글이 깨지는 현상을 볼 수 있다. 다음은 Winamp에서 문제가 생긴 MP3의 Tag를 살펴본 내용이다. Title 정보의 일부가 깨진 것을 볼 수 있다.

이 음악의 올바른 Title은 'Rain or Shine-降っても晴れても-'이다.
이 현상은 대개 영문 Tag보다는 비영문권인 한국어, 일본어 등의 문자에서 발생한다. 이런 현상은 왜 발생하고, 어떻게 수정할 수 있을까? 이 글의 마지막에는 해결 방법을 몇가지 추가할 예정이다.
인코딩(Encoding)
MP3 파일의 Tag정보를 정확히 표시하기 위해서는 우선 그 Tag가 어떤 encoding을 사용하였는지를 알아야 한다.
이 글은 encoding에 대해서 다루는 글이 아니지만 Tag의 깨짐 현상을 이해하려면 약간의 기초 지식이 있어야 한다.
문자의 encoding은 문자를 data로 저장하기 위해 사용하는 규칙이다. 예를 들어 'Rain or Shine-降っても晴れても-'를 일본어 encoding방법 중 하나인 EUC-JP를 이용해 data로 만들면 '52(R) 61(a) 69(i) 6e(n) 20( ) 6f(o) 72(r) 20( ) 53(S) 68(h) 69(i) 6e(n) 65(e) 81(-) 7c8d7e(降) 82c1(っ) 82c4(て) 82e0(も) 90b0(晴) 82ea(れ) 82c4(て) 82e0(も) 81(-)' 가 된다. 한국어를 Encoding하는 방법은 여러 가지가 있는데, EUC-KR, ISO-2022-KR, UHC, JOHAB등의 한국어를 위한 Encoding과 전 세계 언어를 다루기 위해 만든 Unicode 방식이 있고, Unicode에도 UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE등이 있다. 물론 일본어나 중국어 등도 Unicode와 독자적인 encoding방식 여러가지를 가지고 있다.
말하자면 이 encoding 방식 중 어떤 것이 사용되었는가를 모르고 엉뚱한 encoding방식을 사용하여 읽어내면 글자가 깨져서 나오는 것이다.
Tag란?
MP3는 원래 소리 정보 이외에는 들어있지 않다. 이 MP3에 Title등의 추가 정보를 넣어서 관리하기 위해 나온 방식 중 하나가 ID3Tag라고 하는 방식인데, http://www.id3.org/ 에서 정보를 얻을 수 있다.
ID3는 시간이 지나면서 여러가지 버전이 나왔는데 크게 v1.0, v1.1, v2.2, v2.3, v2.4등이 있다. 각 버전별로 Tag가 깨지는 이유가 조금씩 다른데 한번 살펴보자.
ID3Tag v1.0
v1.0은 만들어 질 때 encoding을 전혀 염두에 두지 않고 만들어 진 것 같다.
어떤 encoding을 사용하여야 하는가에 관한 정보가 전혀 들어있지 않고 그냥 data를 기록하도록 되어 있다. 한글 Title 내용을 넣기 위해 EUC-KR로 정보를 넣더라도 읽어오는 프로그램이 EUC-JP로 생각하고 읽으면 깨진다는 것이다. Windows의 경우 한글 Windows처럼 한글이 기본이거나 영문 Windows이지만 한글 기본으로 세팅하거나 혹은 AppLocale이라는 프로그램으로 특정 프로그램이 자신이 한글 상위의 Windows에서 돌아가고 있다고 인식하게 만든 경우에는 EUC-KR로 encoding해서 저장한 글이 제대로 보인다. 그렇지 않은 경우는 깨져서 나오게 된다.
ID3Tag v2.2
v2.x중 현재는 그다지 사용하는 프로그램이 없다. Frame identifier의 길이 등 v2.3, v2.4와 다른 점이 좀 있다. 하지만 아마도 전세계적으로 상당히 많이 사용되고 있다고 생각하는데 iTunes가 기본적으로 v2.2를 사용하기 때문이다. v2.3, v2.4도 지원하지만 v2.4의 경우 아직도 긴 길이의 tag를 제대로 못 지원하는 등의 문제가 있다. 그런 이유로 iTunes를 사용하려면 v2.3으로 Tag정리를 하는 것을 추천한다.
ID3Tag v2.3
v2.3에서는 영문만을 위한 ISO-8859-1와 UTF-16을 지원하게 되었다. 물론 encoding 정보가 모든 Tag의 frame마다 들어가게 된다.
v2.3에서 Tag가 깨지는 이유는 크게 두가지인데, 영문만을 위한 ISO-8859-1로 encoding정보를 기록하고서는 영문이 아닌 내용을 넣는 경우로, 이 경우 원칙적으로 깨진 Tag가 나와야 한다. 하지만 프로그램에 따라서는 현재 OS가 사용하는 encoding으로 보여 주기도 하기 때문에 프로그램마다, 혹은 OS마다 깨지기도 하고 잘 나오기도 한다. 직접 MP3의 data를 열어보기 전에는 이유를 파악하기 힘들다. 또 한가지 경우는 UTF-16의 경우인데, 이 경우 반드시 첫 2바이트를 FF FE 혹은 FE FF로 기록해서 UTF-16BE인지 UTF-16LE인지 판단할 수 있게 해야 한다. 이 부분을 기록하지 않거나 잘못 기록하는 경우에 Tag가 깨질 수 있다. 대개 Tag를 기록하는 프로그램이 잘못된 경우다.
ID3Tag v2.4
v2.4에서는 ISO-8859-1, UTF-16, UTF-16BE, UTF-8의 4가지를 사용할 수 있게 확장되었다. ISO-8859-1, UTF-16의 경우는 v2.3과 같고, UTF-16BE의 경우 첫 2바이트 byte order를 기입하지 않는다. UTF-8의 경우 byte order가 원래 없고 영문의 경우 ISO-8859-1처럼 크기도 작고 편해서 v2.4에서는 UTF-8을 사용하는 프로그램이 많다.
ISO-8859-1, UTF-16의 경우 v2.3과 같은 이유로 Tag가 깨지기도 한다. UTF-16BE와 UTF-8의 경우는 딱히 Tag가 깨지는 예를 본 적이 없다.
해결 방법들
Winamp
http://www.winamp.com/
MP3의 초창기에 나와 아직까지 개발되고 있는 Windows용 MP3 player다.

다음은 ID3tag v2.3 UTF-16으로 정리된 MP3하나의 정보를 읽은 것이다. playlist에서 해당 곡에 오른쪽 클릭 후 View File Info...를 선택하면 나온다.

다음은 ID3tag v1.1 EUC-KR(혹은 MAC - Korean)으로 encoding된 MP3를 읽은 것이다. 현재 Windows의 기본 설정이 MAC - Korean으로 설정되어 있기 때문에 정상적으로 표시된다. 위에서 설명한 것처럼 v1.1에는 encoding정보가 없기 때문에 Winamp의 경우 기본 encoding을 Windows에 설정된 encoding으로 사용한다. 여기서 Copy to ID3v2버튼을 클릭하면 이 정보가 깨끗하게 ID3v2로 넘어가고

위와 같이 정상적으로 표시되는 것은 한글 Windows일 경우, 혹은 다른 Windows에서 Unicode가 아닌 프로그램에서 사용할 기본 코드를 아래와 같이 한글로 설정한 경우이다. Control Panel의 Regional and Language Options에 있다.

다음은 ID3tag v1.1의 Japanese encoding을 사용한 MP3를 읽은 것이다. Windows의 기본 코드가 현재 일본어로 되어 있지 않기 때문에 일부가 깨져 나온다. 물론 이때 Copy to ID3v2를 클릭해도 이 깨진 정보가 그대로 ID3v2로 넘어가서 소용이 없다.

이 문제를 해결하려면 무엇보다 encoding정보를 알아야 한다. v1.x에 들어가 있는 정보를 정상적으로 빼내지 못하면 아무것도 할 수 없다. 여러가지 방법이 있겠지만 완벽한 방법은 없다고 생각한다. 보통 mp3와 같이 있는 text가 있을 경우 그 text의 encoding을 encoding예측이 가능한 에디터에서 열어보는 방법도 있고 각 encoding별로 정보를 보여주는 프로그램을 사용하는 것도 좋은 방법이다. 혹은 그냥 찍어볼 수도 있다.
이제 문제도 파악했고 encoding도 알고 있다면 어떻게 할까? 위의 경우 가장 단순하게는 일본어 Windows에서 Winamp를 돌려서 해당 파일을 v2.x로 변환할 수 있겠지만 부담이 심하다. 좀 더 쉬운 방법은 위에서 언급한 Regional and Language Options에서 해당 encoding에 해당하는 언어를 선택하는 것인데 매번 rebooting해야 할 수 있다.
여기서 설명하는 방법은 Microsoft AppLocale을 사용하는 것이다.
http://www.microsoft.com/globaldev/tools/apploc.mspx
AppLocale은 특정 프로그램이 실행될 때 기본 언어 설정을 강제로 지정해 주는 프로그램이다. 100% 듣지는 않지만 Winamp에는 사용할 수 있다. 우선 프로그램을 설치한 후 AppLocale을 실행해서 winamp.exe를 지정하고

Winamp에서 사용할 언어를 지정하면

다음과 같이 정상적인 결과를 얻을 수 있다. 이 경우에도 여러가지 이유로 정보가 조금씩 깨어지는 경우도 있다. 이제 Copy to ID3tag를 눌러준다. 확인후 원래의 ID3tag v1은 uncheck해서 v2만 남겨두도록 하는 것이 좋다.

iTunes
우선 iTunes를 사용한다면 ID3Tag v2.3의 UTF-16을 사용하는 것을 추천한다. 가장 iTunes와 문제가 없다. 그 이외의 경우 긴 Tag를 인식 못하거나 encoding을 잘못 잡거나 Shared music에서 정상적으로 나오지 않을 수 있다. 그리고 하나의 MP3에 v1.x와 v2.x가 모두 들어 있을 경우 v1.x를 우선으로 읽기 때문에 encoding문제가 생길 수 있다. v2.x만 남기고 나머지는 지우는 것이 좋다.
// 작업중
MP3TAG
http://www.mp3tag.de/en/
MP3TAG는 광범위한 종류의 Tag를 읽고 정리해 주는 무료 tool이다. ID3tag v1.x, v2.x를 완벽하게 지원하고 기본적인 title, artist등의 tag이외에 모든 tag를 등록할 수 있고 jacket도 편리하게 추가할 수 있다.
다음은 ID3v2.3 UTF-16 tag로 정리된 mp3 하나를 MP3TAG에서 읽어본 장면이다.

사용법은 홈페이지나 Help를 찾아보면 나오고, 이 프로그램으로 encoding이 잘못도니 Tag를 바로잡아 보자. 하지만 사실 할 수 있는 것은 그다지 많지는 않다.
// 작업중
Unicode Rewriter
// 작업중
MP3 음악 파일을 관리하다 보면 음악의 문자 정보인 Tag의 일부, 혹은 전부의 글이 깨지는 현상을 볼 수 있다. 다음은 Winamp에서 문제가 생긴 MP3의 Tag를 살펴본 내용이다. Title 정보의 일부가 깨진 것을 볼 수 있다.

이 음악의 올바른 Title은 'Rain or Shine-降っても晴れても-'이다.
이 현상은 대개 영문 Tag보다는 비영문권인 한국어, 일본어 등의 문자에서 발생한다. 이런 현상은 왜 발생하고, 어떻게 수정할 수 있을까? 이 글의 마지막에는 해결 방법을 몇가지 추가할 예정이다.
인코딩(Encoding)
MP3 파일의 Tag정보를 정확히 표시하기 위해서는 우선 그 Tag가 어떤 encoding을 사용하였는지를 알아야 한다.
이 글은 encoding에 대해서 다루는 글이 아니지만 Tag의 깨짐 현상을 이해하려면 약간의 기초 지식이 있어야 한다.
문자의 encoding은 문자를 data로 저장하기 위해 사용하는 규칙이다. 예를 들어 'Rain or Shine-降っても晴れても-'를 일본어 encoding방법 중 하나인 EUC-JP를 이용해 data로 만들면 '52(R) 61(a) 69(i) 6e(n) 20( ) 6f(o) 72(r) 20( ) 53(S) 68(h) 69(i) 6e(n) 65(e) 81(-) 7c8d7e(降) 82c1(っ) 82c4(て) 82e0(も) 90b0(晴) 82ea(れ) 82c4(て) 82e0(も) 81(-)' 가 된다. 한국어를 Encoding하는 방법은 여러 가지가 있는데, EUC-KR, ISO-2022-KR, UHC, JOHAB등의 한국어를 위한 Encoding과 전 세계 언어를 다루기 위해 만든 Unicode 방식이 있고, Unicode에도 UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE등이 있다. 물론 일본어나 중국어 등도 Unicode와 독자적인 encoding방식 여러가지를 가지고 있다.
말하자면 이 encoding 방식 중 어떤 것이 사용되었는가를 모르고 엉뚱한 encoding방식을 사용하여 읽어내면 글자가 깨져서 나오는 것이다.
Tag란?
MP3는 원래 소리 정보 이외에는 들어있지 않다. 이 MP3에 Title등의 추가 정보를 넣어서 관리하기 위해 나온 방식 중 하나가 ID3Tag라고 하는 방식인데, http://www.id3.org/ 에서 정보를 얻을 수 있다.
ID3는 시간이 지나면서 여러가지 버전이 나왔는데 크게 v1.0, v1.1, v2.2, v2.3, v2.4등이 있다. 각 버전별로 Tag가 깨지는 이유가 조금씩 다른데 한번 살펴보자.
ID3Tag v1.0
v1.0은 만들어 질 때 encoding을 전혀 염두에 두지 않고 만들어 진 것 같다.
어떤 encoding을 사용하여야 하는가에 관한 정보가 전혀 들어있지 않고 그냥 data를 기록하도록 되어 있다. 한글 Title 내용을 넣기 위해 EUC-KR로 정보를 넣더라도 읽어오는 프로그램이 EUC-JP로 생각하고 읽으면 깨진다는 것이다. Windows의 경우 한글 Windows처럼 한글이 기본이거나 영문 Windows이지만 한글 기본으로 세팅하거나 혹은 AppLocale이라는 프로그램으로 특정 프로그램이 자신이 한글 상위의 Windows에서 돌아가고 있다고 인식하게 만든 경우에는 EUC-KR로 encoding해서 저장한 글이 제대로 보인다. 그렇지 않은 경우는 깨져서 나오게 된다.
ID3Tag v2.2
v2.x중 현재는 그다지 사용하는 프로그램이 없다. Frame identifier의 길이 등 v2.3, v2.4와 다른 점이 좀 있다. 하지만 아마도 전세계적으로 상당히 많이 사용되고 있다고 생각하는데 iTunes가 기본적으로 v2.2를 사용하기 때문이다. v2.3, v2.4도 지원하지만 v2.4의 경우 아직도 긴 길이의 tag를 제대로 못 지원하는 등의 문제가 있다. 그런 이유로 iTunes를 사용하려면 v2.3으로 Tag정리를 하는 것을 추천한다.
ID3Tag v2.3
v2.3에서는 영문만을 위한 ISO-8859-1와 UTF-16을 지원하게 되었다. 물론 encoding 정보가 모든 Tag의 frame마다 들어가게 된다.
v2.3에서 Tag가 깨지는 이유는 크게 두가지인데, 영문만을 위한 ISO-8859-1로 encoding정보를 기록하고서는 영문이 아닌 내용을 넣는 경우로, 이 경우 원칙적으로 깨진 Tag가 나와야 한다. 하지만 프로그램에 따라서는 현재 OS가 사용하는 encoding으로 보여 주기도 하기 때문에 프로그램마다, 혹은 OS마다 깨지기도 하고 잘 나오기도 한다. 직접 MP3의 data를 열어보기 전에는 이유를 파악하기 힘들다. 또 한가지 경우는 UTF-16의 경우인데, 이 경우 반드시 첫 2바이트를 FF FE 혹은 FE FF로 기록해서 UTF-16BE인지 UTF-16LE인지 판단할 수 있게 해야 한다. 이 부분을 기록하지 않거나 잘못 기록하는 경우에 Tag가 깨질 수 있다. 대개 Tag를 기록하는 프로그램이 잘못된 경우다.
ID3Tag v2.4
v2.4에서는 ISO-8859-1, UTF-16, UTF-16BE, UTF-8의 4가지를 사용할 수 있게 확장되었다. ISO-8859-1, UTF-16의 경우는 v2.3과 같고, UTF-16BE의 경우 첫 2바이트 byte order를 기입하지 않는다. UTF-8의 경우 byte order가 원래 없고 영문의 경우 ISO-8859-1처럼 크기도 작고 편해서 v2.4에서는 UTF-8을 사용하는 프로그램이 많다.
ISO-8859-1, UTF-16의 경우 v2.3과 같은 이유로 Tag가 깨지기도 한다. UTF-16BE와 UTF-8의 경우는 딱히 Tag가 깨지는 예를 본 적이 없다.
해결 방법들
Winamp
http://www.winamp.com/
MP3의 초창기에 나와 아직까지 개발되고 있는 Windows용 MP3 player다.

다음은 ID3tag v2.3 UTF-16으로 정리된 MP3하나의 정보를 읽은 것이다. playlist에서 해당 곡에 오른쪽 클릭 후 View File Info...를 선택하면 나온다.

다음은 ID3tag v1.1 EUC-KR(혹은 MAC - Korean)으로 encoding된 MP3를 읽은 것이다. 현재 Windows의 기본 설정이 MAC - Korean으로 설정되어 있기 때문에 정상적으로 표시된다. 위에서 설명한 것처럼 v1.1에는 encoding정보가 없기 때문에 Winamp의 경우 기본 encoding을 Windows에 설정된 encoding으로 사용한다. 여기서 Copy to ID3v2버튼을 클릭하면 이 정보가 깨끗하게 ID3v2로 넘어가고

위와 같이 정상적으로 표시되는 것은 한글 Windows일 경우, 혹은 다른 Windows에서 Unicode가 아닌 프로그램에서 사용할 기본 코드를 아래와 같이 한글로 설정한 경우이다. Control Panel의 Regional and Language Options에 있다.

다음은 ID3tag v1.1의 Japanese encoding을 사용한 MP3를 읽은 것이다. Windows의 기본 코드가 현재 일본어로 되어 있지 않기 때문에 일부가 깨져 나온다. 물론 이때 Copy to ID3v2를 클릭해도 이 깨진 정보가 그대로 ID3v2로 넘어가서 소용이 없다.

이 문제를 해결하려면 무엇보다 encoding정보를 알아야 한다. v1.x에 들어가 있는 정보를 정상적으로 빼내지 못하면 아무것도 할 수 없다. 여러가지 방법이 있겠지만 완벽한 방법은 없다고 생각한다. 보통 mp3와 같이 있는 text가 있을 경우 그 text의 encoding을 encoding예측이 가능한 에디터에서 열어보는 방법도 있고 각 encoding별로 정보를 보여주는 프로그램을 사용하는 것도 좋은 방법이다. 혹은 그냥 찍어볼 수도 있다.
이제 문제도 파악했고 encoding도 알고 있다면 어떻게 할까? 위의 경우 가장 단순하게는 일본어 Windows에서 Winamp를 돌려서 해당 파일을 v2.x로 변환할 수 있겠지만 부담이 심하다. 좀 더 쉬운 방법은 위에서 언급한 Regional and Language Options에서 해당 encoding에 해당하는 언어를 선택하는 것인데 매번 rebooting해야 할 수 있다.
여기서 설명하는 방법은 Microsoft AppLocale을 사용하는 것이다.
http://www.microsoft.com/globaldev/tools/apploc.mspx
AppLocale은 특정 프로그램이 실행될 때 기본 언어 설정을 강제로 지정해 주는 프로그램이다. 100% 듣지는 않지만 Winamp에는 사용할 수 있다. 우선 프로그램을 설치한 후 AppLocale을 실행해서 winamp.exe를 지정하고

Winamp에서 사용할 언어를 지정하면

다음과 같이 정상적인 결과를 얻을 수 있다. 이 경우에도 여러가지 이유로 정보가 조금씩 깨어지는 경우도 있다. 이제 Copy to ID3tag를 눌러준다. 확인후 원래의 ID3tag v1은 uncheck해서 v2만 남겨두도록 하는 것이 좋다.

iTunes
우선 iTunes를 사용한다면 ID3Tag v2.3의 UTF-16을 사용하는 것을 추천한다. 가장 iTunes와 문제가 없다. 그 이외의 경우 긴 Tag를 인식 못하거나 encoding을 잘못 잡거나 Shared music에서 정상적으로 나오지 않을 수 있다. 그리고 하나의 MP3에 v1.x와 v2.x가 모두 들어 있을 경우 v1.x를 우선으로 읽기 때문에 encoding문제가 생길 수 있다. v2.x만 남기고 나머지는 지우는 것이 좋다.
// 작업중
MP3TAG
http://www.mp3tag.de/en/
MP3TAG는 광범위한 종류의 Tag를 읽고 정리해 주는 무료 tool이다. ID3tag v1.x, v2.x를 완벽하게 지원하고 기본적인 title, artist등의 tag이외에 모든 tag를 등록할 수 있고 jacket도 편리하게 추가할 수 있다.
다음은 ID3v2.3 UTF-16 tag로 정리된 mp3 하나를 MP3TAG에서 읽어본 장면이다.

사용법은 홈페이지나 Help를 찾아보면 나오고, 이 프로그램으로 encoding이 잘못도니 Tag를 바로잡아 보자. 하지만 사실 할 수 있는 것은 그다지 많지는 않다.
// 작업중
Unicode Rewriter
// 작업중
# by | 2007/11/06 02:15 | Pro's Life | 트랙백(1) | 덧글(0)




