2012-01-15 4 views
3

내 미디어 서버의 경우 FLAC 파일에서 MP3로 태그를 전송하는 방법을 찾고 있습니다. bash는 스크립트에서FLAC에서 MP3로 태그 (ID3)를 전송하는 Linux 스크립트

, 나는 현지 바르에 metaflac를 사용하여 태그를 추출 할 수 있지만, ID3V2과 MP3를 태그 할 때, 나는 국가의 문자를 잃을 것 같다 (이 유니 코드해야 추측?)

이 또한 내가 할 수 있어야합니다 리플레이 게인 태그 및 앨범 아트 (모두 FLAC에 있음)를 설정합니다.

무인으로 실행할 스크립트 솔루션을 찾고 있습니다.

답변

5

이 도구를 사용해보십시오 eyed3. 이 프로그램은 앨범 아트 삽입, latin1, utf8, utf16-BE 및 utf16-LE의 텍스트 인코딩을 지원합니다. 그러나 재생 이득은 지원되지 않습니다. 내가 아는 한 널리지지되지 않습니다.

+0

이것은 지금까지 가장 좋은 해결책이었습니다. --set-user-text-frame을 사용하여 (FLAC에서 추출한) 재생 이득 값을 설정할 수도 있습니다. 도전 과제는 "year"태그입니다.이 태그는 설정할 수 있으며 eyeD3으로 다시 읽히지 만 mp3Tag (Windows 용)에서는 읽을 수 없습니다. – TheRoadrunner

+0

ASCII가 아닌 문자는 경고합니다 : " 'ascii'코덱은 XX 위치의 바이트 0xc3을 디코딩 할 수 없습니다 : 서수는 범위 (128)가 아니지만 ASCII 이외의 문자는 새 태그에 완벽하게 삽입됩니다. – TheRoadrunner

+2

문제가 해결 된 시점 : eyeD3은 기본적으로 ID3v2.4 태그를 사용합니다. 이 버전에서는 1 년 동안의 메타 데이터가 더 복잡합니다. eyeD3 -Y는 TDRL (릴리스 날짜) 태그에 기록하는 반면 mp3 태그 (및 기타 태그)는 TDRC (녹음 시간) 태그에서 연도를 찾습니다. 내 태그 스크립트가 포함되도록 변경 --set-text-frame = TDRC : "$ DATE"는 내 문제를 해결합니다. – TheRoadrunner

9

파이썬 솔루션에 관심이 있으시면 mutagen 라이브러리가 정말 좋아 보입니다. 나는 FLAC 파일로 MP3의 ID3 태그를 복사하는이 솔루션을 발견

from mutagen.flac import FLAC 
from mutagen.easyid3 import EasyID3 

flacfile = FLAC("flacfile.flac") 
mp3file = EasyID3("mp3file.mp3") 

for tag in flacfile: 
    if tag in EasyID3.valid_keys.keys(): 
     mp3file[tag] = flacfile[tag] 

mp3file.save() 

:로

그것은 쉽게 될 수 있습니다.

+1

이것은 저에게 효과적 이었지만 Windows 7 파일 탐색기와의 호환성을 위해 1D3v2.3을 강제 실행하려면 저장 옵션을 사용해야했습니다. Mutagen은 기본적으로 v2.4를 사용하려고하지만 저장 옵션을 사용하여 변경할 수 있습니다. mp3file.save (없음, 1, 3) 첫 번째 인수는 기본 파일 이름이고 v1 태그는 세 번째 인수는 v2 포인트 버전입니다. https://mutagen.readthedocs.org/en/latest/api/id3.html?highlight=save#mutagen.id3.ID3.save –

1

빅터의 해결책은 나에게 길을 보여 줬다. 그러나 방금 변환 한 파일에 태그를 복사하는 경우 실패 할 수 있습니다 (예 : flac에서 mp3로). 즉, 태그를 복사하려는 파일에 아직 태그가없는 경우 실패합니다.

그래서 대상 파일을 프라임 처리해야 할 수도 있습니다.

from mutagen import File 
from mutagen.flac import FLAC 
from mutagen.easyid3 import EasyID3 
from mutagen.id3 import ID3, ID3NoHeaderError 

def convert_tags(f1,f2): 
    # f1: full path to file copying tags from 
    # f2: full path to file copying tags to 
    # http://stackoverflow.com/questions/8873364/linux-script-to-transfer-id3-tags-from-flac-to-mp3 
    # http://stackoverflow.com/a/18369606/2455413 
    try: 
     meta = EasyID3(f2) 
    except ID3NoHeaderError: 
     meta = File(f2, easy=True) 
     meta.add_tags() 
     meta.save() 
    from_f = FLAC(f1) 
    to_f = EasyID3(f2) 
    for tag in from_f: 
     if tag in EasyID3.valid_keys.keys(): to_f[tag] = from_f[tag] 
    to_f.save() 
    return