[17/05/09 Edição: este artigo foi escrito antes de eu ter descoberto o MusicBrainz para corrigir tags de álbuns MP3 e o Quod Libet para playback. Se bem que serviu como exercício de programação em bash, caso eu ache algum bug nestes softwares e tenha que corrigir manualmente alguma coisa…
[06/02/10 Edição: para rodar este script, é necessário o pacote mp3info. O Quod Libet é uma bosta, uso o Rhythmbox que atualiza automaticamente sua biblioteca quando as tags dos arquivos são modificadas no MusicBrainz (pacote picard) , e dá pra fazer umas correções de tag simples dentro do próprio Rhythmbox, além de vir instalado como padrão no Ubuntu. De qualquer forma, continua a dica do comando mp3info para descobrir tags de arquivos mp3]
Amarok aberto, o usuário rola o painel com nomes de artistas abaixo esperando encontrar aqueles arquivos de seu artista predileto que baixou sei lá de onde. Porém não encontra. Vai no diretório dos arquivos baixados e pra sua surpresa a tag ‘Artist’ está em branco ou pior, incorreta. São muitos arquivos, várias pastas de diferentes álbuns e shows etc. Abrir as propriedades de cada arquivo e consertar cada um será uma tarefa altamente repetitiva. O que fazer? Rodar o script verifica_artista_mp3.sh "<nome_correto>"
!
#!/bin/bash TXT_BLD=$(tput bold) TXT_RED=$(tput setaf 1) TXT_GREEN=$(tput setaf 2) TXT_YLW=$(tput setaf 3) TXT_BLUE=$(tput setaf 4) TXT_PURPLE=$(tput setaf 5) TXT_CYAN=$(tput setaf 6) TXT_WHITE=$(tput setaf 7) TXT_RESET=$(tput sgr0) if [ "x$1" = "x-h" ]; then echo "Uso: ${0##*/} [-h] [nome_artista] [nome_arq_log|-show]" echo " Procura a partir do diretório atual por arquivos mp3, analizando da tag 'Artist'" echo " Caso seja divergente da string [nome_artista], mostra o número da linha em que apareceu" echo " e a string divergente. O argumento opcional [nome_arq_log] especifica o arquivo de log" echo " que será sobrescrito com arquivos mp3 sem tag definida e demais erros do sistema." echo " Caso o segundo argumento seja '-show' simplesmente mostra uma listagem com linha numeradas" echo " dos mp3 juntamente com suas tags." exit 0 fi ARTIST="${1}" if [ "x${ARTIST}" = "x" ]; then echo -n "Preencha nome exato artista:" read ARTIST fi if [ "x${ARTIST}" = "x" ]; then echo "Nome de artista em branco" >&2 exit 1 fi LOG=${2} if [ "x${LOG}" = "x" ]; then LOG=~/verifica_artista_mp3.log fi if [ "x$LOG" = "xshow" ]; then find . -name "*.mp3" -print0|xargs -0 mp3info -p "Artist: %a\t kB: %k '%F'\n" |nl|more else echo "${TXT_BLD}${TXT_GREEN}* * * * Verificando conteúdos das tags das MP3 ($PWD) * * * * ${TXT_RESET}" find . -name "*.mp3" -print0|xargs -0 mp3info -p " ${TXT_PURPLE}Artist: %a${TXT_RESET}\t kB: %k nnxn ${TXT_BLD}${TXT_RED}'%F'${TXT_RESET} nnxs\n" 2>$LOG|nl|grep -vi "Artist: ${ARTIST}" |sed -e 's,nnxn,\n,' -e 's,nnxs,\\,' if [ $(cat "${LOG}" |wc -l) = 0 ]; then echo -e "mp3info analisou todos os arquivos mp3 dentro de\n'${PWD}'\ncom sucesso!" rm "${LOG}" else echo -e "Erros encontrados, consulte\n${LOG}\n($(cat "${LOG}" |wc -l) linhas)" fi echo -e "Para consertar algum, utilizar\n${TXT_BLD}${TXT_RED}mp3info -a '${ARTIST}'${TXT_RESET} \\" echo "adicionando as linhas acima referentes aos arquivos a serem corrigidos." fi
Achei um programa que corrige estes dados, baixando informações de um banco de dados online com mais de 4 milhões de músicas: http://www.fixtunes.com/download-complete.php?OS=nonitunes
Fica como alternativa para o caso de não ter certeza sobre o artista de um determinado conjunto de mp3’s.
Testeis com umas mp3’s do Green Day e achou os dados corretos de artista, álbum, gênero e ano. O único dado que o programinha não conseguiu determinar foi o título, aí, copiei e colei do nome original do arquivo, e ficou perfeito!
Creio que dê pra rodar no Wine também, não precisa abrir uma máquina virtual Windows pra tal fim que nem eu fiz…