dtag.sh: Taguear Músicas MP3 No Terminal

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

Um pensamento sobre “dtag.sh: Taguear Músicas MP3 No Terminal

  1. Pingback: Manipulando Tags ID3 Com O eyeD3 | Daemonio Labs

Deixe um comentário