Introdução
Já falei bastante coisa sobre como taguear músicas aqui no blog. Em [1] você encontra um tutorial sobre o programa eyeD3, um eficiente tagueador de músicas, e em [2] um script que faz essa tarefa no modo gráfico usando o Yad.
O script de hoje lê as músicas de um diretório e obtém as informações das tags em um arquivo de texto.
O script: dtag.sh
A seguir o código do script. Certifique-se que o eyeD3 [1] esteja instalado.
#!/bin/bash # [dtag.sh] # Seta tags ID3 em arquivos MP3 de acordo # com o arquivo info.txt # # [Autor] # Daemonio (Marcos Paulo Ferreira) # undefinido at gmail com # https://daemoniolabs.wordpress.com # # [Uso] # $ chmod +x dtag.sh # $ ./dtag.sh Diretorio # # 'Diretorio' é onde estão os arquivos de música # e também o arquivo info.txt. # # Versão 1.0 by daemonio @ Sun Dec 16 11:28:27 BRST 2012 # Versão 1.1 by daemonio @ Qua Fev 13 20:13:52 BRST 2013 # [+] Tratamento de valores de tags com ':'. Modificou-se # uma opção do comando cut. # Versão 1.2 by daemonio @ Sat Dec 21 01:17:39 BRST 2013 # [+] A nova versão do eyeD3 não inclui mais a tag --year. # Com isso, foi necessário mudar o script para trocar # a --year por --recording-date. # OBS: o formato do arquivo info.txt continua o mesmo. # Hash que armazena as tags. declare -A TAGS TRACK=1 OPCOES= TITULO= chave= valor= OLDIFS= # Lê o hash e retorna as opções do # programa eyeD3. function get_eyeD3_options() { local chave local valor local lOPCOES for chave in ${!TAGS[@]} do valor=${TAGS[$chave]} lOPCOES="$lOPCOES --${chave}=\"${valor}\"" done echo "$lOPCOES" } # # MAIN # # Entra no diretório. [ -d "$1" ] && cd "$1" # Testa se há o arquivo info.txt [ ! -e info.txt ] && echo '[+] Arquivo info.txt não encontrado.' && exit 1 # Lê o cabeçalho (primeira linha até a linha vazia) while read LINE do chave=$(echo "$LINE" | cut -f1 -d ':') valor=$(echo "$LINE" | cut -f2- -d ':') # Armazena valores no hash. # O primeiro teste troca year por recording-date devido a # mudança no eyeD3. # O segundo teste coloca o valor adequado para add-image. # O else será executado para as demais opções. if [ "$chave" = "year" ] then TAGS['recording-date']="${valor}" elif [ "$chave" = "add-image" ] then TAGS["$chave"]="${valor}:FRONT_COVER" else [ "$chave" ] && TAGS["$chave"]="$valor" fi done < info.txt.tmp.$$ # Seta as tags em cada música. OLDIFS=$IFS ; IFS='"' for MUSICA in *.mp3 do IFS=$OLDIFS # Lê o nome da faixa. TITULO=$(sed -n "${TRACK}{p;q;}" info.txt.tmp.$$) eval "eyeD3 --remove-all --to-v2.3 --track $TRACK --title \"$TITULO\" $OPCOES \"$MUSICA\"" >/dev/null let TRACK++ done rm -f info.txt.tmp.$$ #EOF
Antes de executá-lo devemos fazer algumas preparações.
O arquivo info.txt
Esse arquivo contém as informações das tags. Ele tem o seguinte formato:
$ cat info.txt album:Takin' Off artist:Herbie Hancock year:1962 genre:Jazz add-image:folder.jpg Watermelon Man Three Bags Full Empty Pockets The Maze Driftin' Alone and I
Nas primeiras linhas temos as tags aceitas e após o ‘:’ o valor de cada uma delas. No fim desse cabeçalho, tem uma linha vazia obrigatória e em seguida os nomes das músicas. O script irá ler esse arquivo e gerará as opções corretas do eyeD3 de acordo com esses valores.
Os nomes das músicas devem corresponder com os arquivos listados alfabeticamente no diretório. Veja:
$ ls *.mp3 01-Herbie Hancock-Takin' Off-Watermelon Man.mp3 02-Herbie Hancock-Takin' Off-Three Bags Full.mp3 03-Herbie Hancock-Takin' Off-Empty Pockets.mp3 04-Herbie Hancock-Takin' Off-The Maze.mp3 05-Herbie Hancock-Takin' Off-Driftin'.mp3 06-Herbie Hancock-Takin' Off-Alone And I.mp3
O primeiro arquivo listado irá receber o primeiro nome de música do info.txt e assim em diante. Você precisa montar o info.txt considerando essa ordem de listagem.
Executando
Após montarmos o info.txt só nos resta executar o script:
$ chmod +x dtag.sh $ ./dtag.sh Herbie_Hancock Removing ID3 v1.x and/or v2.x tag: SUCCESS Converting tag to ID3 v2.3 Setting artist: Herbie Hancock Setting album: Takin' Off Setting title: Watermelon Man Setting track: 1 Setting track genre: Jazz Setting year: 1962 Adding image folder.jpg Writing tag... ... etc ...
Referências
[1] Manipulando Tags ID3 Com O eyeD3 by daemonio (Acessado em: Dezembro/2012)
https://daemoniolabs.wordpress.com/2011/11/24/manipulando-tags-id3-com-o-eyed3/
[2] deye : Usando o yad + eyeD3 by daemonio (Acessado em: Dezembro/2012)
https://daemoniolabs.wordpress.com/2012/02/17/deye-usando-o-yad-eyed3/
[3] Takin’ Off by wikipedia (Acessado em: Dezembro/2012)
http://en.wikipedia.org/wiki/Takin’_Off
Pingback: Manipulando Tags ID3 Com O eyeD3 | Daemonio Labs