Definir tag de título ID3 para ser igual ao nome do arquivo MP3

10

Alguém tem um script bash que vai passar por uma biblioteca de mídia e definir a tag title id3 de cada arquivo MP3 para ser igual ao nome do arquivo?

Estou aberto a outros métodos automatizados também. Pode ser um aplicativo GUI ou qualquer coisa que faça o trabalho automaticamente.

Um método EasyTag é indicado aqui: Como renomear tag de título em massa em arquivos ID3 mp3 - Infelizmente, não entendo os passos.

    
por MountainX 09.03.2012 / 05:22

6 respostas

15

O EasyTAG é de fato uma ótima ferramenta para esse problema. Eu encontrei minha resposta aqui . Em termos de como usá-lo, a melhor referência acaba por ser documentação da EasyTAG .

Open EasyTag, navigate to a folder with music files in it, select all the files in the folder, or all the files you want to tag, click on the "Scan Files" button (you'll have to hover over them to figure out which one it is).

Then, make sure the scanner dropdown is set to "Fill Tag," then in the Fill Tag field, make the appropriate edits until the example below the field looks like what you're looking for. If you need further help as to what to put in the Fill Tag field, click on the "?" button for the legend (listing of what the different possible codes are to translate with) and hit the mask button to list some starting points.

When you're happy with the results, click the "Scan Files" button (in the Scan Files dialog box, not the one you originally clicked to get where you are...the icons look the same) and your changes will be applied. If you are not getting Artist or Album name, simply select all that you want to change, enter the data and click the little button next to that field and all files that are selected will the filled in or changed to that artist or album. This works in most fields.

When you're done, click the save button and you're done.

PS: The CDDB scanner often works pretty well, if you have full albums that you're trying to tag, or at least commercially available song files.

PPS: I am apparently half awake still. According to what you wrote in your original post, try this in the Fill Tag field:

%n. %a - %t

Esta é a seção relevante para esta pergunta:

1.2.2. Automatically with “Fill Tag” scanner:

Some conditions to use this mode:

  • files sorted by albums
  • filenames or parent directory contain tag information (artist, album, title, …)
  • empty or not correct tags

The “Fill Tag” scanner uses a pattern to associate words in the filename and directories with the tag entries. By this way, the tag fields can be completed automatically by pressing the “green” button in the scanner window or the toolbar. If the tag is partially completed, use the option “Overwrite fields when scanning tag” in the “Scanner” tab of the “Preferences” window, to replace all fields by the new values.

Each code correspond to a field, following theses rules :

Strings associated with code    Will fill the field
%a
  Artist
%b
  Album
%c
  Comment
%p
  Composer
%r
  Copyright
%e
  Encoded by
%g
  Genre
%i
  None! (used to ignore a string)
%l
  Number of tracks
%o
  Original artist
%n
  Track
%t
  Title
%u
  URL
%y
  Year

Note : to avoid mistakes, it is recommended to use a code only one time in the pattern. Of course, like when tagging manually, only the selected files are processed by the scanner. You can use the defined patterns in the list, or write yours own patterns to correspond to the format of yours file names and directories. To avoid mistakes when selecting the right pattern, or writing it, a preview shows immediately the results before to apply the pattern. If you need some help with the different codes, press the “Help” button (the lifebuoy) to display the legend of each code. Also, if you want to save yours own patterns, edit or sort then, by pressing the “Mask” button an little editor will be shown on the scanner window.

Below an example of use of patterns :

a) the following filename :

“/mnt/MP3/EVANESCENCE – Fallen (2003) – Rock/01. Going Under.mp3”

b) with the pattern :

“%a - %b (%y) - %g/%n. %t”

c) you will fill the tag with theses strings :

    Artist (%a) => EVANESCENCE
    Album (%b) => Fallen
    Year (%y) => 2003
    Genre (%g) => Rock
    Track (%n) => 01
    Title (%t) => Going Under
    
por 09.03.2012 / 06:21
3

EasyTAG faz todos os tipos de operações de tag / nome de arquivo de lote comuns em arquivos de áudio (e alguns vídeos).

    
por 09.03.2012 / 05:28
2

Eu encontrei uma variedade de ferramentas de linha de comando para serem úteis:

id3v2

id3v2 is a command line id3v2 tag editor. You can add/modifiy/delete id3v2 tags and convert id3v1 tags to id3v2 tags. It's uses id3lib. I'm looking for a co-maintainer. Please email myers_carpenter if you are interested.

eyeD3

eyeD3 is a Python module and program for processing ID3 tags. Information about mp3 files (i.e bit rate, sample frequency, play time, etc.) is also provided. The formats supported are ID3 v1.0/v1.1 and v2.3/v2.4.

estes são ideais quando scripts algo para digitalizar diretórios.

    
por 19.07.2012 / 11:11
1

Isso nem sempre é perfeito, mas eu usei-o para obter os nomes dos arquivos mp3 usando apenas ferramentas unix comuns (incluindo as versões busybox) Talvez alguém com mais do que apenas 6 Tom Petty mp3s possa dar a ele algum mais testes.

for x in *.mp3; do
  TITLE=$(strings "$x" |grep TAG |grep -v TAGL |sed "s/^.*TAG//g ; /^L$/d ; /^@$/d ; /^$/d ; /^Ac$/d")
  #mv "$x" "$TITLE.mp3"
  echo $x" "$TITLE.mp3" #just echo for now, until further tested
done

Editar: Eu interpretei mal a pergunta, mas sabendo disso acima, podemos usar sed para substituir $ TITLE pelo nome do arquivo "$ x" usando sed para substituir a string

sed -i "s/$TITLE/$x/" "$x"

Tenho quase 100% de certeza de que isso não atende a todas as especificações do ID3, mas pode ser suficiente para uso pessoal básico contanto que você faça um backup primeiro

    
por 13.03.2012 / 07:25
1

Surpreende-me que ninguém tenha sugerido a solução mais fácil usando ffmpeg ou avconv :

for i in *.mp3; do avconv -y -i "$i" -c copy -metadata title="$i" new_"$i"; done;
    
por 30.10.2015 / 07:32
0

Eu instalaria o eyeD3 em um python virtualenv com pip install eyeD3 , para que você obtenha a versão mais recente. Depois disso, execute:

for i in *.mp3; do /your/venv/bin/eyeD3 --title "$i" "$i"; done
    
por 19.01.2017 / 23:14