Add mp3_tagger.py
This commit is contained in:
parent
c4013c7095
commit
6dab9b20eb
67
mp3_tagger.py
Normal file
67
mp3_tagger.py
Normal 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)
|
Loading…
Reference in New Issue
Block a user