Programmino per Tag mp3

Pubblicità

S.t.e.r.l.o.k.

Utente Èlite
Messaggi
1,842
Reazioni
114
Ciao a tutti sto sviluppando uno scrip in Python che venga in contro alle mie esigenze, in pratica deve inserire ai tag mp3 TITOLO - NUMERO - ALBUM - GENERE - e generare la playlist M3U, tutto in una sola azione, l'unica noia che mi da e l'incorporazione della copertina nei file mp3, che non viene visualizzata o riconosciuta da esplora risorse in "anteprima" e One Commander dopo limportazione, pernso che non la riesca ad incorporare a dovere, con altri programmini riesco perfettamente a vederla su windows.... Vi incoollo i sorgenti, grazie:

Python:
import os
import re
import tkinter as tk
from tkinter import filedialog, messagebox
from mutagen.id3 import ID3, ID3NoHeaderError, TIT2, TPE1, TALB, TRCK, TDRC, APIC, TCON

def process_files(directory, artist, album, year, genre, cover_path):
    # Creazione del file di playlist
    playlist_path = os.path.join(directory, "playlist.m3u")
    with open(playlist_path, 'w') as playlist_file:
        for filename in os.listdir(directory):
            if filename.lower().endswith('.mp3'):
                match = re.match(r"(\d+)\s*-\s*(.+)\.mp3", filename)
                if match:
                    track_number = match.group(1)
                    title = match.group(2)
                    file_path = os.path.join(directory, filename)
                    
                    try:
                        audio = ID3(file_path)
                    except ID3NoHeaderError:
                        audio = ID3()
                    except Exception as e:
                        messagebox.showerror("Errore", f"Errore nel file {filename}: {str(e)}")
                        continue
                    
                    # Aggiungi/Modifica i metadati
                    audio["TIT2"] = TIT2(encoding=3, text=title)
                    audio["TRCK"] = TRCK(encoding=3, text=track_number)
                    audio["TPE1"] = TPE1(encoding=3, text=artist)
                    audio["TALB"] = TALB(encoding=3, text=album)
                    audio["TDRC"] = TDRC(encoding=3, text=year)
                    audio["TCON"] = TCON(encoding=3, text=genre)  # Aggiungi il genere

                    # Aggiungi la copertina se fornita
                    if cover_path:
                        try:
                            with open(cover_path, 'rb') as cover_file:
                                cover_data = cover_file.read()
                                mime_type = 'image/jpeg' if cover_path.lower().endswith('.jpg') or cover_path.lower().endswith('.jpeg') else 'image/png'
                                audio["APIC"] = APIC(encoding=3, mime=mime_type, type=3, desc='Cover', data=cover_data)
                        except Exception as e:
                            messagebox.showerror("Errore", f"Errore nel file della coperina: {str(e)}")
                            continue
                    
                    # Salva i metadati
                    try:
                        audio.save(file_path)
                    except Exception as e:
                        messagebox.showerror("Errore", f"Errore nel salvataggio dei metadati per {filename}: {str(e)}")
                        continue

                    # Aggiungi il file MP3 alla playlist
                    playlist_file.write(f"{filename}\n")
    
    messagebox.showinfo("Completato", "Metadati aggiornati e playlist creata con successo.")

def select_directory():
    directory = filedialog.askdirectory()
    if directory:
        artist = artist_entry.get()
        album = album_entry.get()
        year = year_entry.get()
        genre = genre_entry.get()
        cover_path = cover_path_var.get()
        if not artist or not album or not year or not genre:
            messagebox.showwarning("Dati Mancanti", "Assicurati di inserire tutti i dettagli richiesti.")
            return
        process_files(directory, artist, album, year, genre, cover_path)

def select_cover():
    cover_file = filedialog.askopenfilename(filetypes=[("Image Files", "*.png;*.jpg;*.jpeg")])
    cover_path_var.set(cover_file)

# Configurazione GUI
root = tk.Tk()
root.title("Aggiorna Metadati MP3")

tk.Label(root, text="Seleziona la cartella contenente i file MP3").pack(pady=10)

# Input per artista, album, anno, e genere
tk.Label(root, text="Artista:").pack(pady=5)
artist_entry = tk.Entry(root)
artist_entry.pack(pady=5)

tk.Label(root, text="Album:").pack(pady=5)
album_entry = tk.Entry(root)
album_entry.pack(pady=5)

tk.Label(root, text="Anno:").pack(pady=5)
year_entry = tk.Entry(root)
year_entry.pack(pady=5)

tk.Label(root, text="Genere:").pack(pady=5)
genre_entry = tk.Entry(root)
genre_entry.pack(pady=5)

# Input per coperina
tk.Label(root, text="Copertina:").pack(pady=5)
cover_path_var = tk.StringVar()
cover_entry = tk.Entry(root, textvariable=cover_path_var, state='readonly')
cover_entry.pack(pady=5)
cover_button = tk.Button(root, text="Seleziona Copertina", command=select_cover)
cover_button.pack(pady=5)

# Bottone per selezionare la cartella
button = tk.Button(root, text="Seleziona Cartella", command=select_directory)
button.pack(pady=10)

root.mainloop()
 
Unica confrontare tuo output con un mp3 dove l'immagine si vede. Se tutto l'header dei metadata e' correftto forse devi usare un formato specifico di immagine, o una dimensione non superiore a.
 
Dici chela responsabilità e piu che altro di Esplora Risorse, e di One Commander? I Player visualizzano perfettamente tutto, le foto sono di dimensioni accettabili...
 
non lo so, difficile a dirsi. "divide and conquer" : se di altri file mp3 mostrano l'immagine, confonta bene header e formato imagine con l'mp3 buono-.
 
Non so se ho capito, prova così:
Sostituisci:
Python:
def select_cover():
    cover_file = filedialog.askopenfilename(filetypes=[("Image Files", "*.png;*.jpg;*.jpeg")])
    cover_path_var.set(cover_file)
con
Python:
def select_cover():
    image_types = [("Image PNG", "*.png"), ("Image JPG", "*.jpg"), ("Image JPEG", "*.jpeg")]
    cover_file = filedialog.askopenfilename(filetypes=image_types, title="Seleziona un File")
    cover_path_var.set(cover_file)
 
Nel codice non vedo nulla che possa offrire una anteprima di una immagine selezionata. Di fatto le immagini le selezioni con la dialog di filedialog.askopenfilename il quale ti permette di navigare tra le directory, ma non offre alcuna anteprima pre-selezione. Quindi non capisco cosa dovrebbe darti l'anteprima di una immagine pre- o selezionata. :/

Edit, Ok forse ho capito. :P
 
Ultima modifica:
Nella foto e indicato le anteprime come le intendo dire, l'album in esame e sato creato con MP3TAG che funziona perfettamente, con il programma scritto in py non esce nulla, ma niente da dire sulla riproduzione e visualizzazione degli altri metadata
Immagine 2024-07-29 181319.webp
 
Continuo a non capire :P
Credo tu intenda le copertine dell'album visualizzate nel player (o programma tipo il tuo sopra) mentre si ascolta una canzone.
Per me c'è un errore alla riga 41 (almeno credo sia la 41 :P), type=3 non so cosa sia, forse intendevi TPE1=3. Se noti bene l'hai pure importato.
audio["APIC"] = APIC(encoding=3, mime=mime_type, type=3, desc='Cover', data=cover_data)
proverei con:
audio["APIC"] = APIC(encoding=3, mime=mime_type, TPE1=3, desc='Cover', data=cover_data)
Bye^^
 
Tagliamo la testa al toro, ditemi i tag per le .jpg migliori da utilizzare che correggo lo script........thx
 
Ultima modifica:
Ho provato a cambiare anche il mutagen con le alternative che mi ha proposto Google, ho utilizzato anche i tag ultimi usciti e non, dai ripasso i file con Mp3TaG per Windows che mette l'anteprima, ciao e grazie a tutti
 
Ho provato a cambiare anche il mutagen con le alternative che mi ha proposto Google, ho utilizzato anche i tag ultimi usciti e non, dai ripasso i file con Mp3TaG per Windows che mette l'anteprima, ciao e grazie a tutti

Prova anche MusicBrainz Picard, è ottimo e puoi impostare come rinominare i file secondo tuo piacimento.
 
Pubblicità
Pubblicità
Indietro
Top