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

CUE 파일은 답을 알고 있다

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

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

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

$ sudo apt install cuetools shntool flac

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

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

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 "%p - %t" original.flac

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

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

Tag 붙이기

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

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

$ mkdir original
$ mv original.flac original/.

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

$ cuetag newfilename.cue *.flac

이상한 파일 지우기

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

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

참고자료