From 6dab9b20ebf5b3158325fbd992e9bff1a2a169ee Mon Sep 17 00:00:00 2001 From: headroom Date: Mon, 13 Jan 2025 15:44:34 +0000 Subject: [PATCH] Add mp3_tagger.py --- mp3_tagger.py | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 mp3_tagger.py diff --git a/mp3_tagger.py b/mp3_tagger.py new file mode 100644 index 0000000..fb4e614 --- /dev/null +++ b/mp3_tagger.py @@ -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)