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()