Acessando mp3 Meta-dados com Python

votos
98

Qual é a melhor maneira de recuperar mp3 metadados em python? Eu vi um par de quadros lá fora, mas não estou certo sobre qual seria o melhor para usar .... Qualquer idéias?

Publicado 12/08/2008 em 16:16
fonte usuário
Em outras línguas...                            


16 respostas

votos
91

Eu costumava eyeD3 no outro dia com muito sucesso. Eu achei que ele poderia adicionar arte para o tag ID3 que os outros módulos Olhei não podia. Você vai ter que baixar o tar e executar python setup.py installda pasta de origem.

São exemplos relevantes a partir do site estão abaixo.

Lendo o conteúdo de um arquivo mp3 que contém tanto informações v1 ou tag v2:

 import eyeD3
 tag = eyeD3.Tag()
 tag.link("/some/file.mp3")
 print tag.getArtist()
 print tag.getAlbum()
 print tag.getTitle()

Ler um arquivo mp3 (comprimento da pista, bitrate, etc.) e acesso é tag:

if eyeD3.isMp3File(f):
     audioFile = eyeD3.Mp3AudioFile(f)
     tag = audioFile.getTag()

versões específicas de tag podem ser selecionados:

 tag.link("/some/file.mp3", eyeD3.ID3_V2)
 tag.link("/some/file.mp3", eyeD3.ID3_V1)
 tag.link("/some/file.mp3", eyeD3.ID3_ANY_VERSION)  # The default.

Ou você pode iterar sobre os quadros matérias:

 tag = eyeD3.Tag()
 tag.link("/some/file.mp3")
 for frame in tag.frames:
    print frame

Uma vez que uma tag é vinculado a um arquivo que pode ser modificado e salvo:

 tag.setArtist(u"Cro-Mags")
 tag.setAlbum(u"Age of Quarrel")
 tag.update()

Se a marca ligada em foi v2 e você gostaria de guardá-lo como v1:

 tag.update(eyeD3.ID3_V1_1)

Leia em uma tag e removê-lo do arquivo:

 tag.link("/some/file.mp3")
 tag.remove()
 tag.update()

Adicionar um novo tag:

 tag = eyeD3.Tag()
 tag.link('/some/file.mp3')    # no tag in this file, link returned False
 tag.header.setVersion(eyeD3.ID3_V2_3)
 tag.setArtist('Fugazi')
 tag.update()
Respondeu 19/09/2008 em 15:30
fonte usuário

votos
33

Eu usei mutagênico para editar as tags em arquivos de mídia antes. A coisa agradável sobre mutagênico é que ele pode lidar com outros formatos, tais como mp4, FLAC etc. Eu escrevi vários roteiros com um monte de sucesso usando esta API.

Respondeu 14/08/2008 em 10:46
fonte usuário

votos
12

O que você está depois é o ID3 módulo. É muito simples e vai dar-lhe exatamente o que você precisa. Basta copiar o arquivo ID3.py em seu diretório site-packages e você vai ser capaz de fazer algo como o seguinte:

from ID3 import *
try:
  id3info = ID3('file.mp3')
  print id3info
  # Change the tags
  id3info['TITLE'] = "Green Eggs and Ham"
  id3info['ARTIST'] = "Dr. Seuss"
  for k, v in id3info.items():
    print k, ":", v
except InvalidTagError, message:
  print "Invalid ID3 tag:", message
Respondeu 13/08/2008 em 01:44
fonte usuário

votos
11

Um problema com eyed3é que ele vai jogar NotImplementedError("Unable to write ID3 v2.2")para arquivos MP3 comuns.

Na minha experiência, a mutagenclasse EasyID3funciona de forma mais confiável. Exemplo:

from mutagen.easyid3 import EasyID3

audio = EasyID3("example.mp3")
audio['title'] = u"Example Title"
audio['artist'] = u"Me"
audio['album'] = u"My album"
audio['composer'] = u"" # clear
audio.save()

Todas as outras marcas podem ser acessados desta forma e salvo, que servirá a maioria dos propósitos. Mais informações podem ser encontradas no Tutorial Mutagéneo .

Respondeu 24/01/2016 em 00:07
fonte usuário

votos
8

verificar este para fora:

https://github.com/Ciantic/songdetails

Exemplo de uso:

>>> import songdetails
>>> song = songdetails.scan("data/song.mp3")
>>> print song.duration
0:03:12

Salvando alterações:

>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
Respondeu 30/12/2010 em 02:40
fonte usuário

votos
7

Um exemplo simples do livro Dive Into Python funciona ok para mim, este é o link de download, o exemplo é fileinfo.py. Não sei se é o melhor, mas ele pode fazer o trabalho básico.

Todo o livro está disponível online aqui .

Respondeu 12/08/2008 em 16:37
fonte usuário

votos
5

apenas informação adicional para vocês:

dê uma olhada na seção "coisas MP3 e editores de metadados" na página de PythonInMusic .

Respondeu 08/07/2011 em 09:24
fonte usuário

votos
5

Eu olhei as respostas acima e descobri que eles não são bons para o meu projeto por causa de problemas de licenciamento com a GPL.

E eu descobri isso: PyID3Lib , enquanto que determinada ligação python data de lançamento é velho, ele usa o ID3Lib , que em si é até à data.

Notável a mencionar é que ambos são LGPL , e é bom para ir.

Respondeu 20/12/2009 em 20:32
fonte usuário

votos
4

método mais fácil é songdetails ..

para dados de leitura

import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
    print song.artist

semelhante para editar

import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
    song.artist = u"The Great Blah"
    song.save()

Não se esqueça de adicionar u antes do nome até que você saiba língua chinesa.

u pode ler e editar em massa usando módulo python glob

ex.

import glob
songs = glob.glob('*')   // script should be in directory of songs.
for song in songs:
    // do the above work.
Respondeu 11/08/2016 em 09:05
fonte usuário

votos
1

Pode depender exatamente o que você quer fazer além de ler os metadados. Se é simplesmente a taxa de bits / nome etc. que você precisa, e nada mais, algo leve é ​​provavelmente o melhor.

Se você está manipulando o mp3 passado que PyMedia pode ser adequado.

Há muito poucos, o que quer que você começa, certifique-se e testá-lo em abundância de meios amostra. Existem algumas versões diferentes de tags ID3, em particular, para ter certeza que não é muito desatualizado.

Pessoalmente, eu usei essa classe mp3info pequeno com sorte. É bastante antiga embora.

http://www.omniscia.org/~vivake/python/MP3Info.py

Respondeu 12/08/2008 em 16:37
fonte usuário

votos
1

Este conjunto de ferramentas pode fazer o que você precisa. Eu não posso dizer se é o "melhor", mas realmente, se ele faz o que você precisa, isso é tudo que importa, certo?

HTH

Respondeu 12/08/2008 em 16:32
fonte usuário

votos
0

Eu sugeriria mp3-tagger . A melhor coisa sobre isso é que é distribuído sob licença MIT e suporta todos os atributos necessários.

- artist;
- album;
- song;
- track;
- comment;
- year;
- genre;
- band;
- composer;
- copyright;
- url;
- publisher.

Exemplo:

from mp3_tagger import MP3File

# Create MP3File instance.
mp3 = MP3File('File_Name.mp3')

# Get all tags.
tags = mp3.get_tags()
print(tags)

Ele suporta a definir, obter, atualizar e excluir atributos de arquivos mp3.

Respondeu 26/06/2018 em 13:50
fonte usuário

votos
0

Depois de tentar a simples pip installrota para módulos eyeD3, pytaglib, e ID3 recomendados aqui, achei esta quarta opção foi o único a trabalhar. O resto tinha erros de importação com dependências em falta em C ++ ou algo mágico ou alguma outra biblioteca que pipperdeu. Então, vá com um presente para a leitura básica de tags ID3 (todas as versões):

https://pypi.python.org/pypi/tinytag/0.18.0

from tinytag import TinyTag
tag = TinyTag.get('/some/music.mp3')

Lista de possíveis atributos que você pode obter com TinyTag:

tag.album         # album as string
tag.albumartist   # album artist as string
tag.artist        # artist name as string
tag.audio_offset  # number of bytes before audio data begins
tag.bitrate       # bitrate in kBits/s
tag.disc          # disc number
tag.disc_total    # the total number of discs
tag.duration      # duration of the song in seconds
tag.filesize      # file size in bytes
tag.genre         # genre as string
tag.samplerate    # samples per second
tag.title         # title of the song
tag.track         # track number as string
tag.track_total   # total number of tracks as string
tag.year          # year or data as string

Ele foi pequena e auto-suficiente, como anunciado.

Respondeu 16/04/2018 em 01:34
fonte usuário

votos
0

A primeira resposta que usa eyed3 é ultrapassada por isso aqui é uma versão atualizada do mesmo.

Ler etiquetas de um arquivo mp3:

 import eyed3

 audiofile = eyed3.load("some/file.mp3")
 print(audiofile.tag.artist)
 print(audiofile.tag.album)
 print(audiofile.tag.album_artist)
 print(audiofile.tag.title)
 print(audiofile.tag.track_num)

Um exemplo do website para modificar tags:

 import eyed3

 audiofile = eyed3.load("some/file.mp3")
 audiofile.tag.artist = u"Integrity"
 audiofile.tag.album = u"Humanity Is The Devil"
 audiofile.tag.album_artist = u"Integrity"
 audiofile.tag.title = u"Hollow"
 audiofile.tag.track_num = 2

Um problema que encontrou ao tentar usar eyed3 pela primeira vez tinha a ver com um erro de importação de libmagic apesar de ter sido instalado. Para corrigir esse instalar o whl magic-bin de aqui

Respondeu 08/04/2018 em 15:52
fonte usuário

votos
0

Depois de alguma pesquisa inicial Pensei songdetails pode encaixar meu caso de uso, mas não manipula .m4b arquivos. Mutagênico faz. Note-se que, enquanto alguns têm (razoavelmente) tomada problema com revestimento de chaves formato nativo, que variam de formato para o formato (TIT2 para mp3, ogg título para, \ xa9nam para mp4, Título de WMA etc.), mutagen.File (de Mutagéneo ) tem um (novo?) fácil = True parâmetro que fornece etiquetas EasyMP3 / EasyID3, que têm um consistente, ainda que limitada, conjunto de chaves. Eu tenho feito apenas testes limitados até agora, mas as teclas comuns, como álbum, artista, albumartist, gênero, tracknumber, discnumber, etc. estão todos presentes e idêntico para .mb4 e arquivos .mp3 ao usar fácil = True, tornando-se muito conveniente para os meus propósitos.

Respondeu 12/07/2015 em 23:17
fonte usuário

votos
0

Se você pode usar IronPython, há TagLibSharp. Ele pode ser usado de qualquer linguagem .NET .

Respondeu 26/08/2008 em 18:48
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more