[node.js] Node.js 에서 MP3 메타 데이터 다루기

ID3

MP3 도 다른 파일들과 같이 음악의 정보를 담고있는 메타데이터가 존재한다. MP3파일은 ID3 라는 메타데이터 포맷을 사용하여 정보를 저장한다. 본 글에서는 node-id3 라는 모듈을 사용하여 Node.js 에서 ID3를 읽고 쓰는 방법에 대해 다룬다.

읽기 (Read)

본격적으로 들어가기 전에 터미널에서 다음 명령어를 입력하여 모듈을 설치해준다.

npm install node-id3

그리고 다음과 같은 코드를 입력하여 ID3 데이터를 출력해준다.

var nodeID3 = require('node-id3');
//모듈 불러오기
var data = nodeID3.read("./sample.mp3");
console.log(data);

첫번째 라인에서 모듈을 불러오고, 두번째 줄에서 모듈 객체의 read 메소드를 통해 메타데이터를 불러오는 모습을 볼 수 있다. fs 모듈 없이 MP3 파일의 경로만 입력해주면 추출할 수 있다. data 변수에 저장되는 값은 Json 형태이다.

여기서 앨범 커버에 해당되는 image 부분을 사진 파일로 저장하는 방법은 마지막 부분에서 다루겠다.

쓰기 (Write)

node-id3 모듈을 사용하여 id3 데이터를 직접 수정하는 것도 가능하다.

nodeID3.removeTags("./music/sample.mp3");
//해당 MP3파일의 ID3 Tag 모두 삭제

var tags = {
  title: "시차 (We Are) (Feat. 로꼬 & GRAY)",
  artist: "우원재",
  album: "We Are",
  image: "./image/sample.jpg"
};

var success = nodeID3.write(tags, "./music/sample.mp3");

아주 간단한 방법으로 id3 태그를 바꾸는 모습을 볼 수 있다. 직접 코드를 실행하고 확인해보자.

앨범커버 추출

첫번째로 id3 태그를 파싱하여 추출하였다. 하지만 앨범커버 즉, 이미지는 텍스트 형태가 아니므로 사진 파일로 저장해줘야 한다. 추출된 id3 데이터를 보면, Image 부분은 Buffer 형태로 추출된 모습을 볼 수 있다. 우린 fs 모듈을 사용하여 이를 파일로 저장해줄 수 있다.

var fs = require('fs');

fs.writeFile('result.jpg', data.image.imageBuffer, 'binary', function(err) {
  //...
});