Add mp3_tagger.py

This commit is contained in:
headroom 2025-01-13 15:44:34 +00:00
parent c4013c7095
commit 6dab9b20eb

67
mp3_tagger.py Normal file
View File

@ -0,0 +1,67 @@
import os
import musicbrainzngs
from mutagen.easyid3 import EasyID3
from mutagen.mp3 import MP3
def configurar_musicbrainz():
"""Configura l'accés a l'API de MusicBrainz."""
musicbrainzngs.set_useragent("MP3Tagger", "1.0", "https://example.com")
def obtenir_fitxers_mp3(directori):
"""Obtén tots els arxius MP3 d'un directori i els subdirectoris."""
mp3_files = []
for root, _, files in os.walk(directori):
for file in files:
if file.lower().endswith(".mp3"):
mp3_files.append(os.path.join(root, file))
return mp3_files
def buscar_informacio_musicbrainz(title, artist):
"""Cerca informació d'una cançó a MusicBrainz."""
try:
resultats = musicbrainzngs.search_recordings(recording=title, artist=artist, limit=1)
if resultats['recording-list']:
return resultats['recording-list'][0]
else:
return None
except Exception as e:
print(f"Error en cercar informació a MusicBrainz: {e}")
return None
def etiquetar_mp3(mp3_file):
"""Etiquetar un fitxer MP3 utilitzant MusicBrainz."""
try:
audio = MP3(mp3_file, ID3=EasyID3)
title = audio.get("title", [None])[0]
artist = audio.get("artist", [None])[0]
if not title or not artist:
print(f"No hi ha prou informació per etiquetar: {mp3_file}")
return
informacio = buscar_informacio_musicbrainz(title, artist)
if informacio:
audio["title"] = informacio.get("title", title)
audio["artist"] = ", ".join(artist["name"] for artist in informacio.get("artist-credit", []))
if "release-list" in informacio and informacio["release-list"]:
audio["album"] = informacio["release-list"][0].get("title", "")
audio.save()
print(f"Etiquetes actualitzades per: {mp3_file}")
else:
print(f"No s'ha trobat informació per: {mp3_file}")
except Exception as e:
print(f"Error en processar {mp3_file}: {e}")
def etiquetar_biblioteca(directori):
"""Explora un directori i etiqueta tots els arxius MP3."""
configurar_musicbrainz()
fitxers_mp3 = obtenir_fitxers_mp3(directori)
print(f"S'han trobat {len(fitxers_mp3)} fitxers MP3.")
for mp3_file in fitxers_mp3:
etiquetar_mp3(mp3_file)
if __name__ == "__main__":
directori = input("Introdueix el directori de la biblioteca MP3: ").strip()
etiquetar_biblioteca(directori)