Plex로 음악을 들으면 좋은데, tag를 관리하기 어렵다. 심지어 플레이 리스트도 맘대로 뽑아낼 수 없다. plex로 관리하는 생각을 포기하고 mp3에 있는 id3를 직접 관리하기로 했다. 아래 코드 중 mp3로 변환하는 부분을 byte freaks 에서 사용했다.
#!/bin/bash #for FILE in *.webm; do # echo -e "Processing video '\e[32m$FILE\e[0m'"; # ffmpeg -i "${FILE}" -vn -ab 320k -ar 44100 -y "${FILE%.webm}.mp3"; #one; #file이름을 수정. total=$(ls *.mp3 | wc -l) #echo $total trackNo=0 for FILE in *.mp3; do trackNo=$(expr $trackNo + 1) #echo $trackNo SONG=$(basename "$FILE" | cut -d"-" -f2|sed 's/^_//'| sed 's/_Official_Video//'|sed 's/_//g') ALBUM="Evolution" ARTIST="AlexisFfrench" mYearDate="2018-08-31" #echo $SONG #echo $ALBUM #echo $ARTIST mid3v2 -t "$SONG" -A "$ALBUM" -a "$ARTIST" -y "$mYearDate" -T "$trackNo/$total" "$FILE" done
이미지는 같은 폴더에 covor.jpg나 다른 이름으로 넣어주면 잘 찾는다. 앨범 이름이 같더라도 track에 번호가 없으면 같은 앨범으로 인식하지 않는다. 모두 수정 후 메타데이터 새로 고침하면 다시 읽는다. 자가 격리 기간에 앨범이나 정리해야지.
하루 종일 해 본 결과 Plex가 너무 까탈스럽다고 결론 냈다. 게다가 각 회사마다 id3 태그를 지 멋대로 붙여 같은 앨범으로 인식시키는데 애 먹었다. 같은 앨범이더라도 장르가 다르면 다른 앨범으로 인식한다. 트랙도 겹치면 다른 앨범으로 본다. plex가 스캔하면 id3 정보를 자기 데이터 베이스로 저장하는데, id3 태그를 수정하더라도 지가 가진 정보를 변경하지 않는다. 권한을 6->0->6으로 주어 다시 인식시켰다. 결론은 각 폴더에 앨범을 설명하는 파일을 넣어주고, 스크립트가 파일을 읽어 일괄 업데이트 하는 형식이 가장 낫다고 냈다. 파일 이름에 작곡가, 곡 이름을 정리하고 이를 basename으로 정리했다. 나머지는 찾아서 details.txt에 넣었다. 앨범 커버는 동일 디렉토리에 cover.jpg로 넣으면 된다.
다음 details.txt 파일은 앨범 폴더에 있다. 구분자는 스페이스가 아니라 탭 이다.
SONGEXP $(basename $FILE | cut -d'-' -f2 | sed 's/OfficialVideo//' | sed 's/\.mp3//') ARTISTEXP $(basename $FILE | cut -d'-' -f1) ALBUMEXP "Evolution" mYearDateEXP "2018-08-31" GENREEXP "Classical"
이 파일을 참조하여 업데이트 하는 스크립트는 다음과 같다. 나중에 활용하려 COMMENT는 남겼다. youtube-dl를 –no-playlist로 하면 해당 곡만 다운로드 할 수 있다.
#!/bin/bash #for FILE in *.webm; do # echo -e "Processing video '\e[32m$FILE\e[0m'"; # ffmpeg -i "${FILE}" -vn -ab 320k -ar 44100 -y "${FILE%.webm}.mp3"; #done; #FILE="AlexisFfrench-AMomentInTime-woETd5QW52E.mp3" #Details.txt 파일에 형식 정의 ^I로 구분됨. #SONGEXP: 곡 형식 total=$(ls *.mp3 | wc -l) trackNo=0 for FILE in *.mp3; do trackNo=$(expr $trackNo + 1) SONGEXP=$(cat ./details.txt | grep SONGEXP | cut -d' ' -f2) #변수에서 읽은 expression을 실행하여 다시 변수에 할당. eval song="$SONGEXP" ARTISTEXP=$(cat ./details.txt | grep ARTISTEXP| cut -d' ' -f2) #echo $ARTISTEXP eval artist="$ARTISTEXP" ALBUMEXP=$(cat ./details.txt | grep ALBUMEXP| cut -d' ' -f2) eval album="$ALBUMEXP" mYearDateEXP=$(cat ./details.txt | grep mYearDateEXP| cut -d' ' -f2) eval myeardate="$mYearDateEXP" GENREEXP=$(cat ./details.txt | grep GENREEXP| cut -d' ' -f2) eval genre="$GENREEXP" #echo $song #echo $artist #echo $album #echo $myeardate #echo $genre mid3v2 -t "$song" -A "$album" -a "$artist" -y "$myeardate" -T "$trackNo/$total" --TCON $genre --TPE2 "$artist" "$FILE" done << COMMENT #file이름을 수정. total=$(ls *.mp3 | wc -l) echo $total #echo $total trackNo=0 for FILE in *.mp3; do trackNo=$(expr $trackNo + 1) #echo $trackNo #SONG=$(basename "$FILE" | cut -d"-" -f2|sed 's/^_//'| sed 's/_Official_Video//'|sed 's/_//g' | sed 's/\.flac//'|sed 's/^[0-9]\{1,2\}//'| sed 's/\.mp3//') SONG=$(basename "$FILE" | cut -d'-' -f2| sed 's/\.mp3//'| sed 's/^ //g'|sed 's/^[0-9]\{1,2\} //g') #SONG=$(basename "$FILE" | cut -d'-' -f1-2| sed 's/\.flac//'| sed 's/^ //g'|sed 's/^[0-9]\{1,2\} //') #ARTIST=$(basename "$FILE" | cut -d'-' -f1 | cut -d'.' -f2) #ARTIST="Leszek Mozdzer" #ARTIST="Idil Biret" ARTIST="다양한가수들" #ARTIST="Ivo Pogorelich" #ALBUM="Chopin Piano Favourites" #ALBUM="The Best of Chopin" ALBUM="가요추천1500" #ALBUM="Chopin Recital" #mYearDate="1985-02-15" mYearDate="2020-04-11" #echo $trackNo #echo "$SONG" #echo "$ALBUM" #echo "$ARTIST" #echo "$total" #mid3v2 -t "$SONG" -A "$ALBUM" -a "$ARTIST" -y "$mYearDate" -T "$trackNo/$total" --TCON Classical --TPE2 "$ARTIST" "$FILE" mid3v2 -A "$ALBUM" -a "$ARTIST" -T "$trackNo/$total" --TCON "Other" --TPE1 "$ARTIST" --TIT2 "$SONG" "$FILE" #mid3v2 -T "$trackNo/$total" "$FILE" done COMMENT
유투브에서 음원을 다운로드 하여 개인적으로 들으면 불법이 아니라고 한다.(–;) 구매하는 음원도 내가 정리해야 하는데 굳이 돈 주고 사야할지 모르겠다. 스트리밍으로 듣다가 음원을 구해 듣는 방식이 더 싸겠다.