Alterando as ID tags de seus arquivos de áudio em massa pelo terminal

Publicado por Luís Fernando C. Cavalheiro em 13/09/2012

[ Hits: 7.717 ]

Blog: https://github.com/lcavalheiro/

 


Alterando as ID tags de seus arquivos de áudio em massa pelo terminal



Prezados,

Teve um tempo que fiz esta mesma pergunta por aqui. Pesquisei, o pessoal do VOL ajudou, e agora vou postar, com bastante calma, como fazer para que outras pessoas que tenham esta mesma necessidade, possam resolver.

Para justificar, fiz isso porque o Rhythmbox lê as tags ID dos arquivos de áudio (uma espécie de metadados reconhecidos por quase todos os player de som) e ordena os arquivos na lista de reprodução usando estas informações.

Então, como baixo muita coisa na Internet, ficava tudo bagunçado, e tenho certo horror maníaco de ver meus arquivos bagunçados. Minha casa e meus quase 2k livros podem ser bagunçados, mas meu computador não!

Para resolver isso, eu usei uma ferramenta chamada ID3v2 Tool. O site deles é esse aqui:
E nele, você pode baixar o código-fonte, ver as dependências e tudo o mais. No site da ferramenta, o id3lib é apontado como dependência, mas em packages.ubuntu.com, lista-se como dependências:
  • libc6
  • libgcc1
  • libid3-3.8.3c2a
  • libstdc++6
  • zlib1g

Para os usuários do Ubuntu, é preciso estar com o repositório universe habilitado no sources.list, e esse pacote está disponível desde o Hardy Heron.

O pacote é suportado no Debian, mas não aparece em packages.debian.org.

Instale o pacote e suas dependências. Em distribuições Debians-like, o repositório relacionado aos arquivos que usam alguma coisa que fere a licença GNU, precisa estar habilitado no sources.list.

No Ubuntu, este é o repositório universe, enquanto no Debian, é o non-free. Uma vez habilitado e atualizado o repositório, um comando como:

sudo apt-get install id3v2

Provavelmente instalará o pacote.

Uma vez com o id3v2 instalado, as principais opções da linha de comando são:
  • -l [arquivo]: lista as tags ID da música;
  • -y [yyyy]: altera a tag ID do ano da música;
  • -t [nome]: altera a tag ID do nome da música;
  • -T [número]: altera a tag ID do número da faixa da música;
  • -a [artista]: altera a tag ID do nome do artista da música;
  • -A [álbum]: altera a tag ID do álbum da música.

Para renomear os arquivos em massa, precisa-se criar um script que faça isso. Vou usar como exemplo o meu caso, mas você precisará adaptá-lo às suas necessidades.

Estudo de caso: diretório músicas de lcavalheiro

O meu diretório Música, é organizado da seguinte maneira: cada artista é um subdiretório, e cada álbum é um subdiretório dentro do diretório do artista.

O nome dos diretórios dos álbuns segue o padrão "yyyy - álbum", onde 'yyyy', é o ano de lançamento do álbum. Cada arquivo é nomeado com o padrão "xx nomedamúsica.extensão", onde 'xx', é o número da faixa. Então, se eu usar o comando pwd dentro do diretório de um álbum, fica assim:

pwd
/home/lcavalheiro/Música/Dead Can Dance/2012 - Live Happenings


Esta padronização me permite usar a própria estrutura de diretórios para criar as principais tags ID, deixando apenas para o nome do arquivo a função de gerar as tags ID do nome da música e do número de faixa.

O script, ficaria assim:

#!/bin/bash
# Script de renomeação em massa dos arquivos
# Autor: Luís Fernando Carvalho Cavalheiro ( pessoal at profcavalheiro dot com)
# Versão 0.1
# Data da versão: 20120906
# Eu autorizo expressamente o uso, a redistribuição e a alteração deste script, desde que você me dê os créditos por ser o autor original
# Para funcionar corretamente, este script precisa ser executado no diretório no qual se encontram as músicas (no meu caso, dentro do diretório do álbum)


for i in */*.mp3; do
artista=$(echo `pwd` | cut -d'/' -f5) \
album=$(echo `pwd` | cut -d'/' -f6 | cut -d'-' -f2 | cut -c2-) \
ano=$(echo `pwd` | cut -d'/' -f6 | cut -c1-4) \
musica=$(echo "$i" | sed 's/.mp3/-teste/' | cut -d'-' -f1 | cut -c4-) \
faixa=$(echo "$i" | cut -c1-2) \
id3v2 -a "$artista" -A "$album" -t "$musica" -y "$ano" -T "$faixa" "$i" \
done # EOF

Explicando:
  • Para "$artista", ordeno que o script use o caminho completo do diretório atual (ou seja, do diretório do álbum), usando o comando cut para pegar o quarto diretório da árvore da raiz até o diretório atual;
  • O mesmo raciocínio vale para "$album", mas neste caso, só me interessa os dados depois do ano de lançamento do álbum. EXCEÇÃO: quando ordenei as tags ID do artista de K-pop PSY, mantive o ano no nome dos álbuns, já que eu NÃO LEIO COREANO;
  • O mesmo raciocínio de "$album" vale para "$ano", mas pegando apenas os quatro primeiros dígitos do nome do diretório;
  • Para "$musica", uso o sed para substituir a extensão por um "-teste". Poderia ser qualquer coisa, desde que o nome de nenhum dos arquivos tenha um " - ". Se tiver, use qualquer outro caractere. A partir daí, pego com o próximo cut todos os caracteres antes do símbolo e descarto os três primeiros (dois números e um espaço);
  • Para "$faixa", o raciocínio é similar, mas, mais simples do que para "$musica". Simplesmente pego os dois primeiros caracteres do nome do arquivo;
  • E então, uso o id3v2, para atribuir todas as tags ID que me interessam.

Fim do estudo de caso.

Enfim, após esta longa dica, espero ter ajudado os confrades que encontram-se na mesma situação que eu.

Como diria Crowley, divirtam-se!

Outras dicas deste autor

MAME no Ubuntu 12.04 - Instalação com GNOME Video Arcade front-end

Habilitando dicionários para correção ortográfica para o Claws Mail no Gentoo

Oracle Java em Debians-like (sem recorrer a PPAs)

Cliente Steam Beta em sua distribuição - Instalando e rodando (mesmo sem ter conta beta)

Copiando CD de músicas no Slackware pelo shell

Leitura recomendada

Criando um alias (atalho) no bash - Slackware 10.2

Execução anônima em xpdf

Wallpaper Slideshow no LXDE

myip - Comando que retorna somente o IP

Linux Omni-bot Autosetup 2011, programinha que facilita o uso do Omni-bot

  

Comentários
[1] Comentário enviado por invernosantigos em 12/01/2021 - 01:25h

Parece ser o que eu e muita gente está procurando. Para resolver uns bugs irritantes no VLC e no SMplayer, que não exibem mais o nome das músicas nas playlists se o nome não estiver os metadados. Fica em branco. E renonear metadados de 755 músicas como no meu caso é uma péssima idéia. Mas para o usuário iniciante sem conhecimentos de programação ou shell script, seu trabalho ainda é um pouco obscuro e de usabilidade ruim. Acho que dá para melhorar : Que tal separar as opções ? Renomear de acordo com o nome de arquivo; acrescentar nome do artista ou do álbum, à partir da pasta em que o arquivo está ( Se os arquivos estiverem em pastas de acordo com o artista ou álbum, o nome desta pasta é acrescido nos metadados. ); e colocar tudo isso em linhas que podem ser comentadas ou descomentadas. Com essas possibilidades, fica uma programação limpa, que poderia ser facilmente customizada ( até por um noob profissional ), e seria possível que futuramente até possa ser incluído como ferramenta padrão em distribuições linux, uma contribuição SUA para a evolução das ferramentas de bibliotecas de mídia do linux.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts