Mass .flac-> .mp3 코드 변환 : ID3 태그 정보를 보존하는 쉘 스크립트를 작성하는 방법은 무엇입니까?


9

최근 몇 주 동안 나는 .flac-> .mp3 트랜스 코딩에 대한 '실습'접근 방식에서 훨씬 더 '설정하고 잊어 버린'접근 방식으로 전환했습니다.

첫 번째 단계는 GUI 프론트 엔드 (LAME 플러그인이있는 대담)의 사용을 중단하고 대신 여기에 설명 된 방법을 사용하는 입니다.

두 번째 단계는 .flac 파일을 포함하는 많은 하위 디렉토리가있는 디렉토리를 한 번의 간단한 단계로 코드 변환 할 수 있도록 명령 루프가 재귀 적으로 작동하도록하는 bash 쉘 스크립트를 찾는 것입니다. 이 답변 은 askubuntu.com의 사용자가 제공했습니다.

이제 ID3 태그 정보가 보존되도록 사물을 더 세분화하는 방법을 배우고 싶습니다. 위의 ID3 태그 데이터에 연결된 메서드는 최소값을 유지합니다 (예 : 제목 필드 만 남음).

누구든지 그러한 쉘 스크립트를 작성하는 방법을 가르쳐 줄 수 있습니까?


쉘 스크립트는 다음과 같이 업데이트되었습니다 :

#!/bin/bash
file="$1"
flac -cd "$file" | lame --preset fast extreme - "${file%.flac}.mp3"
id3cp "$file" "${file%.flac}.mp3"

find . -name '*.flac' -exec ~/bin/flac2mp3 '{}' \;~ / Desktop / stack에서 수행하면 다음과 같은 출력이 제공됩니다.

01 - Amon Tobin - Chomp Samba.flac: done         
LAME 3.98.4 64bits (http://www.mp3dev.org/)
Using polyphase lowpass filter, transition band: 19383 Hz - 19916 Hz
Encoding <stdin> to ./01 - Amon Tobin - Chomp Samba.mp3
Encoding as 44.1 kHz j-stereo MPEG-1 Layer III VBR(q=0)
Parsing ./01 - Amon Tobin - Chomp Samba.flac: done.  Copying to ./01 - Amon Tobin - Chomp Samba.mp3: done

id3info 원래 .flac 및 결과 .mp3의 경우 각각 다음과 같습니다.

*** Tag information for 01 - Amon Tobin - Chomp Samba.flac

(즉, 아무것도);

*** Tag information for 01 - Amon Tobin - Chomp Samba.mp3
*** mp3 info
MPEG1/layer III
Bitrate: 128KBps
Frequency: 44KHz

.flac에는 확실히 태그 정보가 있습니다. EasyTAG를 열어서 확인할 수 있습니다. EasyTAG는 이것을 .mp3의 경우 'FLAC Vorbis Tag'이지만 'ID3 Tag'라고합니다. 이것이 문제입니까?


를 사용해 보셨습니까 ffmpeg?
Hello71

아뇨 솔직히 CLI에서 실제로 사용하지 않았습니다. 누군가에 대해 이야기 펄 스크립트. 나는 내일 그것을 시도하고 지금 늦게 다시보고합니다.
boehj

답변:


7
#!/bin/sh

file="$1"
outfile=${file%.flac}.mp3

eval $(metaflac --export-tags-to - "$file" | sed "s/=\(.*\)/='\1'/")

flac -cd "$file" | lame --preset fast extreme \
        --add-id3v2 --tt "$TITLE" --ta "$ARTIST" --tl "$ALBUM" \
        --ty "$DATE" --tn "$TRACKNUMBER" --tg "$GENRE" \
        - "$outfile"

감사합니다 Kambus! 그것은 거의 트릭을 수행합니다. 내가 원하는 태그의 대부분은 이제 트랜스 코딩 후 제목, 앨범, 아티스트, 연도, 트랙 번호입니다. CD 필드 (1/1, 1/2 등)가이를 가로 지르지 않았으며 'Track Number Of ' 필드도 없습니다 . 그러나 이것은 실제로 나를 귀찮게하지 않습니다. 흥미롭게도 'Trip Hop'음악이 들어있는 디렉토리에서이 스크립트를 사용해 보았습니다. 태그는 그대로 유지되었지만 스크립트는 장르를 'Trip Hop'에서 'Trip-Hop'으로 변경했습니다. 그래서 나는 그것이 알려진 장르의 데이터베이스에 의존하고 있다고 생각합니다. 귀하의 의견에 다시 한번 감사드립니다!
boehj

@ pedrogent : 도와 드리겠습니다! "metaflac --export-tags-to-file"을 사용하여 다른 태그가 무엇인지 수동으로 확인하고 $ TITLE 및 다른 태그와 같은 방식으로 사용할 수 있지만 id3 AFAIK에 해당 필드가 없기 때문에 문제가 발생합니다. 주석 태그에 넣을 수 있습니다. 예, 미리 정의 된 장르 목록이 있습니다 : link
Kambus

안녕하세요 캄 버스. 예, 여기서 문제의 일부는 ID3 태그 데이터에 대한 명확한 '표준'이 없다는 것입니다. 주석 태그는 플레이어마다 매우 다르게 해석됩니다 (또는 전혀 아님). 당신의 대본은 굉장합니다. 다시 감사합니다.
boehj

1

mp3fs를 사용하여 flac를 mp3로 대량 인코딩하는 방법

flac 파일을 mp3로 변환하는 프로그램을 사용하는 대신 mp3fs를 사용하여 가상 mp3로 표시하고 복사 작업을 대기시킬 수있는 프로그램을 사용할 수 있습니다. 그것은 나를 위해 훌륭하게 작동합니다.

mp3fs 및 ultracopier 다운로드 및 설치 :

sudo apt-get install mp3fs ultracopier

실행할 각 mp3fs에 대해 flac 및 mp3 디렉토리 쌍을 작성하십시오. 듀얼 코어 CPU가 있으므로 두 개를 실행합니다. flac 파일이있는 파티션에 flac 디렉토리를 보관하면 해당 디렉토리를 빠르게 이동할 수 있습니다. 이 파티션을 시스템에서 "스토리지"라고합니다.

cd /media/Storage
mkdir mp3fs mp3fs/flac_1 mp3fs/mp3_1 mp3fs/flac_2 mp3fs/mp3_2

명령 행에서 또는에 추가하여 디렉토리를 마운트 할 수 있습니다 /etc/fstab. 마운트시 가상 mp3의 비트 전송률 및 인코딩 알고리즘을 구성 할 수도 있습니다. 320kbps의 일정한 비트 전송률을 가진 mp3를 원하며 lame은 가능한 최고의 mp3를 생성하는 데 필요한 모든 시간이 걸릴 수 있습니다.

명령 행에서 :

mp3fs -b 320 -oquality=0 /media/Storage/mp3fs/flac_1 /media/Storage/mp3fs/mp3_1 -o allow_other,ro
mp3fs -b 320 -oquality=0 /media/Storage/mp3fs/flac_2 /media/Storage/mp3fs/mp3_2 -o allow_other,ro

퓨즈가 다음과 같이 불평하면

fusermount : /etc/fuse.conf를 열지 못했습니다 : 권한이 거부되었습니다
fusermount : 옵션 allow_other는 etc / fuse.conf에 'user_allow_other'가 설정된 경우에만 허용됩니다.

에서 user_allow_other옵션의 주석 처리를 제거 /etc/fuse.conf하거나

sudo chmod 644 /etc/fuse.conf

또는에서 /etc/fstab:

mp3fs#/media/Storage/mp3fs/flac_1 /media/Storage/mp3fs/mp3_1 fuse user,ro,allow_other,bitrate=320,quality=0 0 0
mp3fs#/media/Storage/mp3fs/flac_2 /media/Storage/mp3fs/mp3_2 fuse user,ro,allow_other,bitrate=320,quality=0 0 0

에 디렉토리를 추가 한 후 /etc/fstab다음을 사용하여 마운트 할 수 있습니다.

sudo mount -a

끝난! 초음파 복사기를 시작하십시오. 그놈 패널 또는 사용하는 모든 것에 표시기 아이콘이 배치됩니다. 클릭하고 사본 추가를 선택하십시오. 나는 두 개의 코어를 사용하기 위해 두 번 그렇게했습니다. 파일 브라우저를 사용하여 일부 flac를 flac_1로 이동하십시오. mp3_1 디렉토리로 이동하여 mp3를 울트라 복사기 창 중 하나로 끌어 복사 큐를 시작하십시오. Ultracopier는 파일의 목적지를 묻습니다. 이제 flac를 mp3로 일괄 인코딩하는 하나의 코어가 사용 중입니다.

다른 코어를 사용하려면 flac 파일을 flac_2로 옮기고 mp3를 mp3_2에서 두 번째 울트라 복사기 창으로 드래그하십시오.

업데이트 : UltraCopier 대신 MiniCopier를 사용하고 있으며 사용하기가 조금 더 쉽습니다. 아래의 의견을 참조하십시오.


최신 버전의 mp3fs 및 fuse가있는 디렉토리 목록에 버그가있는 것 같습니다 : sourceforge.net/tracker/…
Ophidian

@Ophidian : 흥미 롭습니다. 다른 배포판을 사용하여 일부 컴퓨터에서 일부 테스트를 실행했습니다. 나는 그것들을 각각 1 분 안에 오류없이 실행시켰다. 내가 사용한 mp3fs 버전은 0.30과 같습니다. 커널 2.3.38, 2.3.39 및 3.0.0, libfuse 버전 2.8.4 및 2.8.6을 사용했습니다. 버그 보고서에서 언급 된 Libfuse는 2.8.5입니다. 퓨즈가 원인이라는 결론을 내리기에 충분하지는 않지만 2.8.5를 사용하는 동안 문제가 발생하면 다른 버전을 사용해 볼 가치가 있습니다. mp3fs를 사용해 보셨습니까? 어떤 커널과 어떤 libfuse에서? 문제가 발생 했습니까?
Arjan Drieman

울트라 복사기 대신 이제 미니 복사기 를 사용하고 있으며 사용하기가 조금 더 쉽습니다. Java 앱이므로 설치가 필요 없지만 JRE가 필요합니다. 바구니 아이콘과 상자 아이콘이 있습니다. 하나 이상의 소스를 파일 관리자에서 바스켓 아이콘으로, 대상 디렉토리를 상자 아이콘으로 끌어 올 수 있으며, 이것이 큐에 복사 작업을 추가하기 위해 수행해야하는 전부입니다. MiniCopier에는 고장난 품목에 대한 별도의 탭이 있습니다. MiniCopier는 시스템에서 1 % 대 3 %의 울트라 복사기보다 적은 CPU 사이클을 사용합니다. 그 힘 ;-) 10 시간의 큐에 바로 저장 12분
Arjan Drieman

쉘 기반 복사 큐를 원한다면 superuser 에서 해결책을 찾았습니다 . 조정하지 않으면 2 개의 대기열을 실행할 수 없으며 오류가 어떻게 될지 잘 모르겠습니다.
Arjan Drieman

0

id3cpFLAC가 ID3을 사용하지 않으므로 작동 할 수 없습니다. 대신 Vorbis 태그를 사용합니다.

avconv전환을 통해 태그를 유지 관리하는 옵션이 있습니다. 그것은 코덱의 조합에 따라 변덕스럽고 가치가 있지만 귀하의 경우에는 다음과 같이 작동합니다 (버전 9.16-6).

avconv -i in.flac -map_metadata 0:g:0 out.mp3

(사용 : 폴더에이 모든 FLAC 파일을 적용 (재귀 적으로) 쉽게이 같은 같습니다 bash)

for f in */**/*.flac; do
  avconv -i "${f}" -map_metadata 0:g:0 "`echo "${f}" | sed -e s/flac$/mp3/`";
done

참고 그 avconv용도가 자동으로 절름발이; 품질 및 기타 사항을 제어하기위한 추가 옵션이 있습니다. 자세한 man avconv내용을 확인하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.