Editando tags id3 com python
Ola a todos,
Hoje vou falar de um problema que muitas pessoas devem ter. Ao baixar uma música qualquer da internet os carinhas colocam o nome do site no Titulo da música, no artista e nos comentários mas como isso se o o arquivo esta com nome correto?
Eles usam as tags ID3, mas então o que é a tag ID3?
“A etiqueta ID3 (em inglês: ID3 Tag) é um conjunto de informações mais usados junto com o formato de áudio MP3. Ela permite armazenar informações como o título, artista, album, número da faixa, ou outra informação sobre o arquivo no próprio aquivo.” Wikipedia [1]
Depois de ler um pouco a respeito resolvi mudar as tags das músicas para que quando as estiver escutando apareçam os dados válidos como nome da música e do Artista que a canta. Eu uso o Rhythmbox[2] e este pode até ser integrado ao seu software para conversa instantanea como AMSN[4], PIDGIN[4] dentre outros. Fazer isso na mão seria muito cansativo e não divertido, solução …. python.
Para este script utilizei uma biblioteca não padrão do python o mutagen[5], este serve para mostrar/editar as tags ID3 das músicas em formato mp3.
De acordo com o exemplo do site bastam 4 linhas para abrir->modificar->salvar o titulo de uma música em formato mp3 em seu HD.
from mutagen.easyid3 import EasyID3 audio = EasyID3("sua_musica.mp3") audio["title"] = "Somente um exemplo no titulo" audio.save()
Agora vamos a meu script, não vou comentar pois o código já esta bem comentado.
#!/bin/env python #!-*- coding: utf-8 -*- from sys import exit from os import walk, path from os.path import isfile, join """ @author: Valdinei dos Santos @twitter: http://twitter.com/valdineisantos @site: http://valdineidossantos-com.umbler.net/ @date: 16 Janeiro 2010 """ try: from mutagen.easyid3 import EasyID3 except: print "Necessario instalar a biblioteca mutagen" print "Site: http://code.google.com/p/mutagen/" print "Python Setup Tools: easy_install mutagen" exit(1) #Diretorio que vai ser pesquisado directory_root = "/home/valdinei/Musica/Downloads/" def getInformations(track): fileAtributes = dict() """ O Padrão das músicas estavam "01 - Artista - Album.mp3" Nesta parte de Código vc deve se adequar a sua realidade mas isso é só trabalhar com strings. """ #split por "- " me dará com resultado 3 strings trackNumber, artist, title = track.split("- ") #Que depois de tratadas serao retorandas como valor final fileAtributes["trackNumber"] = trackNumber.strip() fileAtributes["artist"] = artist.strip() #Tratando a string como um lista. O .mp3 esta sendo ignorado pois pego tudo -4 casas do final fileAtributes["title"] = title.strip()[:-4] return fileAtributes """ Caso tenhamos mais diretorios internos sera recursivo. Mais sobre Walk em : http://docs.python.org/library/os.html#os.walk """ for (original, directoryname, filenames) in walk (directory_root): filenames.sort() total = len(filenames) cont = 0; for filename in filenames: """ Calculando a porcentagem de arquivos feitos (parcial * 100)/numero total de músicas """ cont = cont + 1 percent = round (cont * 100 / total ) print "%02d%%" % percent info = getInformations(filename) #Verifico se o endereço do arquivo é valido realmente e se ele continua la. if isfile( join(original,filename) ): """ Agora vamos começar a modificar as tags ID3 dos arquivos MP3 depois salva-los. """ try: mp3 = EasyID3( join(original,filename) ) mp3["title"] = info["title"] mp3["artist"] = info["artist"] mp3["tracknumber"] = info["trackNumber"] #Salva as informações no arquivo mp3.save() except Exception, e: print "%s %s" % (e.__doc__, e ) print "Todos os Arquivos foram modificados"
E com isso suas mp3 agora vão ter o formato que você definiu que teriam. Atenção eu em momento algum modifiquei o nome físico do arquivo, somente as meta informações baseadas no nome que era o que eu tinha em mãos.
Não estou em momento nenhum incentivando a NINGUÉM baixar NADA da internet. A idéia original aqui era simplesmente python + programação e algumas boas práticas.
Algumas coisas que derrepente podem ter passados despercebidas foi o uso do os.walk, os.join, os.isfile todos importados no cabeçalho. Mas isso pode ser um outro assunto de post.
Seguem os links de referencia:
[1] Wikipedia : http://pt.wikipedia.org/wiki/ID3
[2] Rhythmbox: http://projects.gnome.org/rhythmbox/
[4] AMSN: http://www.amsn-project.net/ (esse projeto originalmente era feito por um brasileiro)
[5] PIDGIN: http://www.pidgin.im/
[6] Mutagen: http://code.google.com/p/mutagen/