문제

예를 들어 mp3 파일 X 및 m4a 파일 Y를 쉽게 가져와 "X의 태그를 Y에 복사"라고 말할 수 있는 Python 또는 bash의 리소스를 찾고 있습니다.

Python의 "돌연변이" 모듈은 일반적으로 태그를 조작하는 데 적합하지만 다양한 유형의 태그를 포괄하는 "아티스트 필드"라는 추상적인 개념은 없습니다.나는 모든 까다로운 부분을 처리하고 필드 이름 동등성을 아는 라이브러리를 원합니다.모든 태그 시스템이 표현할 수 없는 것의 경우 정보가 손실되거나 최선으로 추측되는 것은 괜찮습니다.

(사용 사례:무손실 파일을 mp3로 인코딩한 다음 mp3를 사용하여 청취합니다.매달 정도, 나는 mp3에 적용한 태그 변경 사항으로 '마스터' 무손실 파일을 업데이트할 수 있기를 원합니다.형식 간 구현 차이를 두고 씨름하는 데 지쳤습니다.)

도움이 되었습니까?

해결책

나는이 정확한 일이 필요했고, 나도 돌연변이겐이 이런 종류의 일을하기에 충분한 추상화가 아니라는 것을 빨리 깨달았다. 다행히 Mutagen의 저자는 미디어 플레이어를 위해 그것을 필요로했습니다. Quodlibet.

사용 방법을 찾기 위해 Quodlibet 소스를 파헤쳐 야했지만, 일단 이해하면 유틸리티를 썼습니다. 격리 이는 Exfalso (Quodlibet의 태깅 구성 요소). 이 추상화 메커니즘을 사용하고 추가적인 추상화 및 기능을 제공합니다.

소스를 확인하려면 다음은 최신 Tarball에 대한 링크입니다. 패키지는 실제로 3 개의 명령 줄 스크립트 세트이며 QL과 인터페이스하기위한 모듈입니다. 모든 것을 설치하려면 다음을 사용할 수 있습니다.

easy_install QLCLI

Exfalso/Quodlibet (및 결과적으로 Sequitur)에 대해 명심해야 할 한 가지는 실제로 오디오 메타 데이터를 올바르게 구현한다는 것입니다. 즉, 모든 태그가 여러 값이 여러 값을 지원한다는 것을 의미합니다 (파일 유형이 금지하지 않는 한, 많은 것은 그렇지 않은 경우). 그래서 : 다음과 같은 일을합니다.

print qllib.AudioFile('foo.mp3')['artist']

단일 문자열을 출력하지는 않지만 다음과 같은 문자열 목록을 출력합니다.

[u'The First Artist', u'The Second Artist']

태그를 복사하는 데 사용하는 방식은 다음과 같습니다.

import os.path
import qllib  # this is the module that comes with QLCLI

def update_tags(mp3_fn, flac_fn):
    mp3 = qllib.AudioFile(mp3_fn)
    flac = qllib.AudioFile(flac_fn)
    # you can iterate over the tag names
    # they will be the same for all file types
    for tag_name in mp3:
        flac[tag_name] = mp3[tag_name]
    flac.write()

mp3_filenames = ['foo.mp3', 'bar.mp3', 'baz.mp3']

for mp3_fn in mp3_filenames:
    flac_fn = os.path.splitext(mp3_fn)[0] + '.flac'
    if os.path.getmtime(mp3_fn) != os.path.getmtime(flac_fn):
        update_tags(mp3_fn, flac_fn)

다른 팁

정확히 그렇게하는 배쉬 스크립트가 있습니다. atwat-tagger. FLAC, MP3, OGG 및 MP4 파일을 지원합니다.

usage: `atwat-tagger.sh inputfile.mp3 outputfile.ogg`

귀하의 프로젝트가 이미 완료되었음을 알고 있지만 검색 엔진을 통해이 페이지를 찾는 사람은 유용 할 수 있습니다.

다음은 Quod Libet의 음악 형식 클래스를 사용하여 파일간에 태그를 복사하기 위해 작성한 스크립트 인 일부 예제 코드입니다 (Mutagen이 아님).실행하려면 그냥 해 copytags.py src1 dest1 src2 dest2 src3 dest3, 그리고 은 sec1의 태그를 dest1에 복사합니다(기존 태그를 삭제한 후) on dest1!) 등입니다.블랙리스트를 참고하여 다음과 같이 조정해야 합니다 원하는 대로 설정할 수 있습니다.블랙리스트는 특정 태그를 차단할 뿐만 아니라 가 복사되는 것을 방지하며, 또한 를 대상 파일로 지정합니다.

분명히 말하면 Quod Libet의 형식에 구애받지 않는 태깅은 mutagen의 기능이 아닙니다.구현된다 위에 돌연변이 유발 물질.따라서 형식에 구애받지 않는 태그 지정을 원한다면 다음을 사용해야 합니다. quodlibet.formats.MusicFile 대신 파일을 열려면 mutagen.File.

코드는 이제 여기에서 찾을 수 있습니다: https://github.com/DarwinAwardWinner/copytags

동시에 트랜스코딩도 수행하려면 다음을 사용하십시오. https://github.com/DarwinAwardWinner/transfercoder

저에게 중요한 세부 사항 중 하나는 Quod Libet의 음악 형식 클래스가 의 구성이 로드될 것으로 예상하고 있으므로 config.init 라인의 스크립트입니다.이 기능이 없으면 로드하거나 저장할 때 온갖 종류의 오류가 발생합니다 파일을 만듭니다.

나는 "표준" 태그와 임의의 태그를 사용하여 flac, ogg 및 mp3 간 복사를 위해 이 스크립트를 테스트했습니다.지금까지는 완벽하게 작동했습니다.

에 관해서는 이유 QLLib을 사용하지 않았기 때문에 저에게는 효과가 없었습니다.나는 그것이 나와 동일한 구성 관련 오류를 겪고 있다고 생각하지만 자동으로 무시하고 단순히 태그 작성에 실패했습니다.

각 형식의 각 태그 이름을 "Abstract Tag"유형으로 매핑 한 다음 간단한 앱을 작성한 다음 쉽게 변환 할 수 있습니다. 당신은 당신이 관심있는 모든 유형을 알 필요조차 없습니다.

주말 프로젝트 유형의 시간 투자 유형처럼 보입니다. 재미있게 보내십시오. 그리고 나는 당신의 구현을 들여다보고 그것을 사용하는 것도 신경 쓰지 않을 것입니다.

Tagpy도 있습니다. 잘 작동하는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top