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.761 ]

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

Guia pós-instalação do Fedora 21 Xfce Spin

Abrindo aplicativos gráficos como usuário root logado como usuário comum sem kdesudo ou gksudo

Instalando Pragha Music Player no Slackware

Manipulando arquivos PDF pela linha de comando

Vínculos simbólicos - Mantendo suas configurações salvas em nuvem

Leitura recomendada

Ordenando strings em shell script

Fancy Git

Criando um simples script para desmontar e ejetar o CD-ROM

ShellSpeak - Para pessoas com deficiência de fala

Deixe seu Xubuntu com a cara do macOS

  

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