Como ler tags mp3 no shell?

53

Existe uma maneira de ler as tags mp3 de um arquivo no shell? Algo como: mp3tags MyFile.mp3 authordeve gerar a tag de autor de um arquivo mp3.

red_trumpet
fonte

Respostas:

47

Você também pode usar o ffprobeque faz parte ffmpeg.

sudo apt-get install ffmpeg
ffprobe file.mp3

Se você não quiser outras informações, como o comprimento da trilha e assim por diante, poderá combinar a saída com o grep:

ffprobe file.mp3 2>&1 | grep -A90 'Metadata:'

Ou para obter apenas o autor:

ffprobe -loglevel error -show_entries format_tags=artist -of default=noprint_wrappers=1:nokey=1 file.mp3

Você pode selecionar outras tags, separando-as com uma vírgula, como format_tags=title,album.


Eu queria procurar uma palavra-chave em todos os arquivos mp3 em uma pasta. A pasta tinha 486 arquivos, então ficou interessante saber qual das soluções mencionadas aqui é a mais rápida. Aqui está o loop que eu usei:

# sudo apt-get install ffmpeg lltag eyed3 mp3info id3v2 libimage-exiftool-perl libid3-tools id3tool

keyword='fill_me_in'

getTitleFF()   { ffprobe "$1" 2>&1 | sed -E -n 's/^ *title *: (.*)/\1/p'; }
getTitleLL()   { lltag --show-tags title "$1" | sed -nE 's/^  TITLE=(.*)/\1/p'; }
getTitleEyed() { eyeD3 2>&1 "$1" | sed -n 's|\x1b\[[0-9;]*mtitle[^:]*: ||p'; }
getTitleInfo() { mp3info -p %t "$1"; }
getTitleId3()  { id3v2 -l "$1" | sed -nE 's/^(TIT2 \([^)]*\)|Title *): (.*)/\2/p'; }
getTitleExif() { exiftool -title -b "$1"; }
getTitleId3i() { id3info "$1" | sed -nE 's/^=== TIT2 \([^)]*\): //p'; }
getTitleTool() { id3tool "$1" | sed -n 's|^Song Title:\t||p'; }

for prog in FF LL Eyed Info Id3 Exif Id3i Tool; do
    echo "=== getTitle${prog} ==="
    time \
    for file in *.mp3; do 
        if "getTitle${prog}" "$file" | grep -q "$keyword"; then 
            echo "$file"
        fi
    done
done

Notas:

  • lltage mp3infonão encontrar um título, porque os arquivos que eu estava usando tinham tags ID3v2, veja o comentário de @ s-prasanth: Como ler tags mp3 no shell?
  • eyeD3 é problemático para usar programaticamente, porque usa códigos de cores (negrito).
  • eyeD3e também id3v2(mas apenas para tags ID3 v1) retornam o título e o artista na mesma linha, o que complica ainda mais as coisas; portanto, getTitleEyede às vezes getTitleId3retorna o título e o artista, portanto, não copie e cole essas funções.
  • getTitleId3 funcionará apenas para tags ID3 v2, porque id3v2possui diferentes formatos para tags ID3v1- e ID3v2, ou seja,

    Title  :                                 Artist:    
    

    vs. ID3v2:

    TIT2 (Title/songname/content description): 
    
  • Como o único programa desses 5 eyeD3imprime um aviso vermelho para dois dos arquivos:

    Invalid mode/bitrate combination for layer II
    No ID3 v1.x/v2.x tag found!
    

    Parece que esses dois ficheiros têm etiquetas ID3v1, porque esses dois arquivos são os únicos onde lltage mp3infopode obter um título. Gostaria de saber se isso é um bug, eyeD3pois nenhum outro programa mencionado aqui tem um problema com esses arquivos ...

Resultados (tempo real):

 Program  | Version    | Time / s
----------+------------+-----------
 exiftool | 10.25      | 49.5 ± 0.5
 lltag    | 0.14.5     | 41   ± 1.0
 ffprobe  | 3.1.3-1+b3 | 33   ± 0.5
 eyeD3    | 0.6.18     | 24   ± 0.5
 id3info  | 3.8.3      | 4.2  ± 0.1
 id3v2    | 0.1.12     | 2.9  ± 0.1
 id3tool  | 1.2a       | 1.7  ± 0.1
 mp3info  | 0.8.5a     | 1.4  ± 0.1

Em termos de tempo, o vencedor aqui é id3tool(o mp3info é mais rápido, mas não funciona com o ID3 v2). id3v2também é bastante rápido, mas a getTitleId3função precisaria de ajuste para também funcionar com tags ID3v1, o que pode, na pior das hipóteses, desacelerá-lo pelo fator 2.

mxmlnkn
fonte
11
Uau. Sou usuário avançado do exiftool há anos e não fazia ideia de que ele também podia ler metadados para arquivos de som! A solução ffprobe (ou avprobe no meu caso) também é ótima, obrigado. Esta é a melhor resposta!
marlar 30/05
11
Obrigado pelo seu trabalho gigantesco! Algumas dessas ferramentas não estão disponíveis no meu gerenciador de pacotes no Fedora. Você poderia incluir id3infona sua comparação?
Vytenis Bivainis 01/10
ffmpegtem outra vantagem: trabalha com aac/ m4afiles. Outras ferramentas parecem não parecer (ou você sabe o contrário?). Também sugerirei pesquisar sua FORMATseção, para evitar casos em que um fluxo também tenha um titleetc ffprobe -loglevel error -show_entries format -i "$1" 2>&1 | sed -E -n 's|^TAG:title=(.*)$|\1|p'. : .
Jonathan Y.
@JonathanY. Você está certo, o áudio codificado em AAC armazenado em um arquivo M4A-container possui metadados não-ID3 e, portanto, só pode ser lido por ffmpeg e adicionalmente exiftool, fora da seleção na minha resposta.
Mxmlnkn 27/09/2017
Os FLACs têm outro formato de metadados diferente do MP4 / M4A, ou seja, os metadados de comentários do vorbis, mas as tags também podem ser lidas com exiftoolou ffprobe. A ferramenta mais especializada para esse trabalho seria metaflac --listdo flacpacote. Para o ogg exiftooltambém funciona, mas também existe vorbiscomment -lno vorbis-toolspacote. Estranhamente vorbiscommente metaflacnão pode ser trocado, mesmo que o FLAC e o OGG tenham ambos metadados vorbis coment?
Mxmlnkn
26

Ok, eu encontrei um programa sozinho. É chamado mp3info e instalado por

sudo apt-get install mp3info

Para obter tags mp3 únicas de um arquivo, é necessário chamar

mp3info -p %a file.mp3

que fornece ao artista do arquivo. O% a significa que alguém deseja obter o artista e existem outras chaves para as outras tags.

red_trumpet
fonte
20
Informações adicionais: existem 4 padrões diferentes de tags mp3: id3v1, id3v2.2 (obsoleto), id3v2.3, id3v2.4 pt.wikipedia.org/wiki/ID3 . Um arquivo pode ter tags v1 e / ou v2 (sim, as v1 e v2 podem coexistir, mas as v2.xe v2.y não podem coexistir). Eu acredito que a versão 2.3 é a mais usada. De acordo com ibiblio.org/mp3info (consulte Todo), as tags v2 não são suportadas por mp3info. Você pode querer olhar id3v2- Ele pode editar / adicionar v2 e exibir v1 e v2. Se você não gostar da maneira como as tags são exibidas, é possível escrever um script que execute id3v2e processe a saída adequadamente.
precisa
@SPrasanth como exibir uma tag específica. Por exemplo: apenas o artista de um arquivo mp3?
Gowtham Gopalakrishnan
@SPrasanth eu entendi. Obrigado, estou usando -Rflag com greppara obter a saída especificada.
Gowtham Gopalakrishnan 23/04
Quando você imprime o título da faixa com% t, ele é recortado.
Tulains Córdova
11
Infelizmente: Only ID3 versions 1.0 and 1.1 are supported.
simlev 8/01
11

Você pode usar eyed3 . Primeiro, a partir de um terminal, instale:

sudo apt-get install eyed3

Então corra:

eyeD3 song.mp3

Combine isso com greppara obter tags específicas em uma linha.

eyeD3 song.mp3 | grep artist

(para remover todas as tags mp3, veja AQUI )

philshem
fonte
11
Eu tentei isso, e o comando a usar é eyeD3, com D maiúsculo.). Mas eu encontrei outra ferramenta, que melhor atende às minhas necessidades, chamada mp3info. Isso pode gerar tags mp3 sem a necessidade de usar grep, o que eu prefiro.
red_trumpet
eyeD3 funciona melhor para mim, porque ele trabalha com id3v2, mas @red_trumpet é certo, o comando deve ser eyeD3nãoeyed3
bmaupin
Use o plugin de visualização de tags de saída no formato desejado: eyeD3 --plugin display -p "%t% by %a%" *.
simlev 8/01
Isso não exibe TODAS as tags, por exemplo, nenhum ISRC. O programa abaixo mencionado id3v2 retorna também o ISRC, mas sem duração ...
minyves 29/08
8

Eu prefiro usar o id3v2, apenas digite id3v2 -l somefile.mp3. Você também pode ver a página do manual do id3v2 para uso mais específico.

Psddp
fonte
Isso é ótimo e funciona muito bem
jpo38
Definitivamente deve ser a melhor resposta, todas as outras ferramentas têm problemas de dependência em algumas distribuições.
8783 Sergio
Aqui é recomendado mid3v2devido à falta de suporte Unicode. Também a última atualização do id3v2 foi em 2013 .
Pablo A
2

Você pode tentar o exiftool (ler e gravar informações meta nos arquivos).

"O ExifTool é uma biblioteca Perl independente de plataforma, além de um aplicativo de linha de comando para leitura, gravação e edição de meta-informações em uma ampla variedade de arquivos. O ExifTool suporta muitos formatos diferentes de metadados, incluindo EXIF, GPS, IPTC, XMP, JFIF, GeoTIFF, ICC. Profile, Photoshop IRB, FlashPix, AFCP e ID3, assim como as notas de criador de muitas câmeras digitais da Canon, Casio, FLIR, FujiFilm, GE, HP, JVC / Victor, Kodak, Leaf, Minolta / Konica-Minolta, Motorola, Nikon, Nintendo, Olympus / Epson, Panasonic / Leica, Pentax / Asahi, Fase 1, Reconyx, Ricoh, Samsung, Sanyo, Sigma / Foveon e Sony. " - ExifTool por Phil Harvey

Aqui está um exemplo do comando:

exiftool test.mp3 
ExifTool Version Number         : 10.00
File Name                       : test.mp3
Directory                       : .
File Size                       : 8.2 MB
File Modification Date/Time     : 2016:03:02 21:44:58+01:00
File Access Date/Time           : 2016:04:06 21:34:01+02:00
File Inode Change Date/Time     : 2016:03:02 21:45:36+01:00
File Permissions                : rw-rw-r--
File Type                       : MP3
File Type Extension             : mp3
MIME Type                       : audio/mpeg
MPEG Audio Version              : 1
Audio Layer                     : 3
Sample Rate                     : 44100
Channel Mode                    : Stereo
MS Stereo                       : Off
Intensity Stereo                : Off
Copyright Flag                  : False
Original Media                  : False
Emphasis                        : None
VBR Frames                      : 9544
VBR Bytes                       : 8467680
ID3 Size                        : 115419
Band                            : Tech N9ne Collabos
Album                           : Strangeulation (Deluxe Edition)
Composer                        : Tech N9ne Collabos
Genre                           : Rap & Hip-Hop
Copyright                       : 2014 Strange Music, Inc
Title                           : American Horror Story (feat. Ces Cru)
Artist                          : Tech N9ne Collabos
Track                           : 10
Year                            : 2014
Comment                         : 
Lyrics                          : 
Private                         : (Binary data 8192 bytes, use -b option to extract)
Picture MIME Type               : image/jpeg
Picture Type                    : Front Cover
Picture Description             : 
Picture                         : (Binary data 104371 bytes, use -b option to extract)
Audio Bitrate                   : 272 kbps
Date/Time Original              : 2014
Duration                        : 0:04:09 (approx)
blade19899
fonte
1

Confira lltagse você está procurando uma solução que suporte mais do que apenas mp3 / ID3.

Instale-o com:

sudo apt-get install lltag

para ver todas as tags com ele: ( -Sé para exibição)

lltag -S somefile.mp3

para visualizar determinadas tags:

lltag --show-tags artist,album,title,number somefile.mp3
0xcaff
fonte