노래를 찾아다니다가 간신히 찾았더니 flac, 혹은 ape 파일과 cue파일만 덩그러니 있는 것을 받았습니다. flac 파일을 재생하면 원하는 노래가 들어있는 것은 확실하지만 음반 전체가 재생이 되서 곤란합니다. 원하는 곡만 잘라내서 듣고 싶은데 방법이 없을까 고민하다 찾아보았습니다.

CUE 파일은 답을 알고 있다

CUE 파일은 열어보면 CD에 대한 정보를 포함하고 있습니다. 마구잡이로 저장된 것은 아니며, CUE 시트 포멧에 맞춰 작성되어 있습니다. 이 파일을 이용하면 분할이 가능합니다.

우선은 필요한 것의 설치부터

저는 3가지 프로그램을 설치했습니다.

$ sudo apt install cuetools shntool flac

각각 용도는 다음과 같습니다.

  • cuetools: cuebreakpoint 명령어로 정상적인 CUE 파일인지 검사하고 cuetag로 tag를 설정합니다.
  • shntool: 실제로 파일을 분할할 때 사용할 shnsplit 명령어가 여기 포함됩니다.
  • flac: flac 파일 지원을 위해 설치합니다.

만약 ape 파일을 분할하려는 경우에는 다음 의존성을 추가로 설치합니다.

$ sudo apt-add-repository -y ppa:flacon
$ sudo apt update
$ sudo apt install -y flacon

CUE파일의 인코딩은?

몇번 작업하다보니 CUE 파일이 UTF-8이 아닌 경우가 있었습니다. 그런 경우엔 변환이 필요합니다.

일단 바로 cat 명령어 등을 통해 열어서 정상적인지 확인해본 뒤, 인코딩이 깨진 경우에만 다음 작업을 수행합니다.

$ iconv -f shift_jis -t utf-8//IGNORE original.cue -o new.cue
  • -f: 지금 입력되는 파일의 인코딩이 무엇인지 정합니다. 제 경우 SHIFT_JIS 였습니다.
  • -t: 출력이 어떤 양식으로 될지 정합니다. UTF-8로 변환하되, 변환할 수 없는 단어는 무시하도록 지정했습니다.
  • -o: 변환결과를 저장할 파일명입니다.

가끔 이렇게 하려고 하면 에러가 나는 파일이 있습니다. 그 경우는 -o 옵션을 제거하고, 결과물을 육안으로 확인 뒤 정상적인 내용을 수작업으로 추려야합니다.

CUE파일이 정상일까?

원래대로라면 이 파트는 필요가 없을텐데, 대부분 CUE 파일이 BOM을 포함하는 것으로 보였습니다. 그리고 cuetools의 프로그램들은 여기서 에러를 냅니다.

일단 CUE파일을 정상적으로 파싱할 수 있는지 시험운전을 해봅니다.

$ cuebreakpoints filename.cue
bad character '�'
bad character '�'
bad character '�'
...

이 경우, BOM을 지워야 작업이 가능합니다.

$ tail --bytes=+4 filename.cue | cat > newfilename.cue

파일이 정상적이라면 다음과 같이 나올 것입니다.

$ cuebreakpoints newfilename.cue
3:53.05
7:35.23
11:27.53

곡 분할하기

다음 명령어를 실행하면 한 덩어리였던 flac파일이 여러 파일로 분할됩니다.

$ shnsplit -f newfilename.cue -o flac -t "%n - %p - %t" original.flac

각 옵션에 대해 알아봅시다.

  • -f newfilename.cue: 지정한 파일에서 metadata를 얻어서 분할에 사용합니다. 단순히 자르기만 해도 되는 경우면 이 옵션을 빼고 cuebreakpoints newfilename.cue | shnsplit ... 과 같은 방법으로 해도 되지만, 분할하면서 자동으로 파일명을 붙이게 하기 위해 이렇게 했습니다.
  • -o flac: 출력물의 포멧을 flac으로 지정합니다.
  • -t "%p - %t": 파일명을 "공연자 - 제목" 으로 지정합니다. 사용할 수 있는 포맷은 %p(공연자, 아티스트를 말합니다), %a(앨범). %t(제목), %n(트랙 넘버)입니다.

-t 옵션 맨 앞에 %n을 넣는 것은 고의적인 부분입니다. 이 뒤에서 실행할 명령어에서 순서대로 파일을 인식하게 하기 위함입니다.

Tag 붙이기

하지만 분할된 파일에는 아직 tag가 붙어있지 않습니다. 손수 붙여도 상관 없겠지만 상당히 귀찮은 작업임에 틀림 없습니다. 다행히도 CUE파일을 파싱해서 자동으로 붙일 수 있습니다.

먼저 원본 파일을 옮깁니다.

$ mkdir original
$ mv original.flac original/.

그 다음 다음 명령어를 수행하면 끝납니다.

$ cuetag newfilename.cue *.flac

이상한 파일 지우기

CUE 파일 상태에 따라 이상한 파일명의 파일이 생길 수 있습니다. 이런 파일이 생길 경우 이런 식으로 지울 수 있습니다.

$ find . -exec rename 's/[^\x00-\x7F]//g' "{}" \;

참고자료