Organizando tags MP3 com Python e taglib 29/11/07

O título é só uma piada, aqui você não vai organizar nada, isso foi apenas um exercício bobo de programação. O Tiago Madeira fez seu blog renascer das cinzas com um script em Ruby que preenche as tags de arquivos MP3 baseando-se no nome do arquivo. Eu achei legal e como estou querendo aprender Python resolvi fazer parecido com essa linguagem.

O resultado é o script abaixo que não faz exatamente a mesma coisa que o dele. Pelo que eu entendi do código Ruby o script do Tiago entra nos subdiretórios e sai acertando as tags de arquivos com o padrão de nome “Faixa - Titulo.mp3″. O meu fica no diretório corrente e acerta as tags de arquivos no padrão “Artista - Album - Faixa - Titulo.mp3″. O script é burro e espera esse padrão de nome de arquivo, se não for esse ele vai fazer besteira.

Programadores Python, pelo amor de Deus, não me matem! Eu não tenho experiência alguma com a linguagem e com certeza absoluta isso ai pode ser feito de maneira muito mais elegante, muito mais Python. Simplesmente fui na documentação da linguagem e usei as primeiras coisas que eu encontrei pra ler diretórios e executar expressões regulares. Qualquer sugestão de melhoria é bem vinda e acatada com carinho pelo wannabe programmer aqui.

Para executar o código você deve ter o interpretador Python (duh!) e a TagLib para Python, que é TagPy. No ubuntu um apt-get install python-tagpy resolve tudo.

#!/usr/bin/env python
import os, re, tagpy
 
conteudo = os.listdir(os.getcwd())
 
for i in conteudo:
    if os.path.isfile(i) and re.search('mp3$', i) is not None:
        arquivo = tagpy.FileRef(i)
        tag = arquivo.tag()
        nome_do_arquivo = i.split(".")
        nome_do_arquivo = nome_do_arquivo[0].split(" - ")
        tag.artist = nome_do_arquivo[0]
        tag.album = nome_do_arquivo[1]
        tag.track = int(nome_do_arquivo[2])
        tag.title = nome_do_arquivo[3]
        arquivo.save()

[update] Vivendo e aprendendo, uma versão um pouco mais enxuta do script. A biblioteca padrão do Python é bem extensa e ainda não conheço muito dela. A dica do modulo glob eu achei lendo um script qualquer na net.

import os, glob, tagpy
 
for file in glob.glob("*.mp3"):
    nome, extensao = os.path.splitext(file)
    nome = nome.split(" - ")
    arquivo = tagpy.FileRef(file)
    tag = arquivo.tag()
    tag.artist = nome[0]
    tag.album = nome[1]
    tag.track = int(nome[2])
    tag.title = nome[3]
    arquivo.save()
Desenvolvimento 2 Comentários The Beatles – Tomorrow Never Knows


2 comentários

Python é uma linguagem legal pra caramba, legal sua resposta ao post.

Sabe que eu comecei recentemente a aprender Ruby e no início também fiquei em dúvida sobre começar Python ou Ruby. Resolvi por Ruby simplesmente porque achei o código mais bonitinho :) E acho que foi uma ótima escolha, porque estou me divertindo muito aprendendo. É muito massa não usar WHILE e FOR, programar com tudo orientado a objetos (inclusive números e caracteres são objetos!), modificar funções e classes básicas do sistema… vale a pena. Nessas linguagens de hoje em dia é muito mais fácil fazer essas coisas simples que antes fazíamos em shell… hehe

Eu sou um chato em relação à organização de MP3s. Se eu fosse você, dava uma olhada no Picard, da MusicBrainz[1], que além de adicionar as tags, ainda renomeia os arquivos para o padrão que você definir nas configurações.

[1] http://musicbrainz.org

Comente, participe!




Comentário