2013-03-10 3 views
0

음악 컬렉션을 스캔하고 트랙의 ID3 정보를 읽고 해당 음악가가 가지고있는 노래가없는 한 저장하려는 작은 도구를 만들고 있습니다. 두 번 이상 액세스했습니다. 나는 태그를 읽기 위해 Mutagen을 사용할 계획이다.대량 ID3 태그 스캔 최적화

그러나 자신과 다른 많은 음악 컬렉션은 엄청나며 2 만 곡을 초과합니다. 내가 아는 한 Mutagen과 같은 라이브러리는 ID3 정보를 얻기 위해 모든 노래를 열고 닫아야합니다. MP3가 굉장히 성능이 무겁지는 않지만 많은 노래입니다. 이미 노래 수가 2 개를 초과하면 각 아티스트의 수를 유지하면서 정보를 저장하지 않는 형태로 마이너 최적화를 계획하고 있지만 아티스트 ID3 태그를 확인하기 위해 모든 노래를 열어야한다고 말할 수있는 범위 내에서 .

아티스트 이름에 대한 힌트로 디렉토리를 사용하고 아티스트 곡 수가 2를 초과하면 해당 디렉토리에서 더 이상 정보를 읽지 않는 아이디어에 놀랐지 만 모든 사람이 깔끔한 아티스트/앨범/노래 디렉토리.

많은 MP3를 열 때 오버 헤드를 줄일 수있는 다른 최적화 방법이 있습니까?

답변

1

조숙 한 최적화에주의하십시오. 이것이 성능 문제가 될 것이라고 확신하십니까? 귀하의 요구 사항은 무엇입니까 - 얼마나 빨리 스크립트를 실행해야합니까? 순진한 접근 방식으로 얼마나 빨리 실행됩니까? 최적화하기 전에 프로필을 작성하고 평가하십시오. 나는 실제로 존재하지 않는 성능 문제를보고있는 중대한 가능성이 있다고 생각합니다.

정답을 보증하려면 각 파일을 한 번씩 방문하지 않아야합니다. 앞에서 보았 듯이 파일을 완전히 건너 뛰는 최적화는 기본적으로 자동 추측에 지나지 않습니다.

이전에 수행 한 검사 기록을 보관할 수 있으며, 후속 검사에서 파일의 마지막 수정 날짜를 사용하여 이미 검사 한 파일을 다시 검사하지 않도록 할 수 있습니까? 이는 첫 번째 스캔이 약간의 시간이 걸릴 수 있음을 의미 할 수 있지만 이후의 스캔은 더 빠를 것입니다.

음악 컬렉션에서 많은 복잡한 쿼리를 신속하게 수행해야하는 경우 전체 컬렉션의 메타 데이터를 데이터베이스 (예 : SQLite 또는 MySQL)로 가져 오는 것이 좋습니다. 가져 오기에는 시간이 걸립니다. 새 파일을 삽입하기 위해 업데이트하는 데 약간의 시간이 걸릴 것입니다 (위의 마지막 수정 날짜 확인). 그러나 일단 데이터가 데이터베이스에 있으면, 데이터베이스가 현명하게 설정되었다고 가정하면 모든 것이 상당히 부드럽습니다.

예술가 또는 트랙 제목 감지 여러 가지 방법으로 사용하여 내가 당신을 추천이 질문에 대한 일반적
+1

데이터베이스에 도달하고 디스크에서 읽는 것은 많은 입출력입니다. 일단 들어가면 오랜 시간이 걸릴 수 있습니다. – Makoto

1

: 확인

첫번째 방법 : 어쩌면 ARTIST - TITLE.mp3 형식의 파일 이름인가?
(또는 유사)이 파일은 먼저 형식 인 경우 확인해야 물론

for file in os.listdir(PATH_TO_MP3s): 
    artist = re.split("[\_\-\.]", file)[-3] 
    track = re.split("[\_\-\.]", file)[-2] 
    filetype = re.split("[\_\-\.]", file)[-1] 

(이것에 대한 파일 이름은 "아티스트 - Track.mp3"가 될 것입니다).

2 단계

3, 마지막 하나는 ID3 태그를 확인하는 것입니다 디렉토리 이름이 맞는 경우 (당신이 말한 것처럼) 확인 될 것이다 (즉, 파일에 맞지 않는 첫 번째 경우).

하지만 신뢰하기 전에 값이 올바른지 확인하십시오.
예를 들어 누군가가 "Track-Artist.mp3"을 사용하여 아티스트와 트랙을 전환하는 코드를 제공한다면.