Accediendo a metadatos mp3 con Python
metadata (15)
Después de probar la ruta simple de pip install
para los módulos eyeD3, pytaglib e ID3 recomendados aquí, encontré que esta cuarta opción era la única que funcionaba. El resto tenía errores de importación con dependencias faltantes en C ++ o algo mágico o alguna otra biblioteca que falló. Así que vaya con este para la lectura básica de las etiquetas ID3 (todas las versiones):
https://pypi.python.org/pypi/tinytag/0.18.0
from tinytag import TinyTag
tag = TinyTag.get(''/some/music.mp3'')
Lista de posibles atributos que puede obtener con 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
Era pequeño y autónomo, como se anunciaba.
¿Cuál es la mejor manera de recuperar metadatos mp3 en Python? He visto un par de marcos por ahí, pero no estoy seguro de cuál sería el mejor para usar ... ¿Alguna idea?
Después de una investigación inicial, pensé que los detalles de las canciones podían encajar en mi caso de uso, pero no maneja los archivos .m4b. Mutagen lo hace. Tenga en cuenta que, si bien algunos (razonablemente) han tenido problemas con la aparición de las claves nativas de formato de Mutagen, que varían de formato a formato (TIT2 para mp3, título para ogg, / xa9nam para mp4, título para WMA, etc.), mutagen.File ( ) tiene un (nuevo?) parámetro easy = True que proporciona etiquetas EasyMP3 / EasyID3, que tienen un conjunto consistente, aunque limitado, de claves. Hasta ahora solo he hecho pruebas limitadas, pero las teclas comunes, como álbum, artista, albumartist, género, número de pista, número, etc. están todas presentes e idénticas para los archivos .mb4 y .mp3 cuando se usa easy = True, lo que lo hace muy conveniente para mis propósitos.
El método más fácil es https://github.com/Ciantic/songdetails ..
para leer datos
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
print song.artist
similarmente para editar
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
song.artist = u"The Great Blah"
song.save()
No olvides agregar tu nombre antes de que conozcas el idioma chino.
Puedes leer y editar a granel usando el módulo de python glob
ex.
import glob
songs = glob.glob(''*'') // script should be in directory of songs.
for song in songs:
// do the above work.
He usado mutagen para editar etiquetas en archivos multimedia antes. Lo bueno de mutagen es que puede manejar otros formatos, como mp4, FLAC, etc. He escrito varios scripts con mucho éxito utilizando esta API.
La primera respuesta que usa eyeD3 está desactualizada, así que aquí hay una versión actualizada de la misma.
Lectura de etiquetas de un archivo 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)
Un ejemplo del sitio web para modificar etiquetas:
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
Un problema que encontré al intentar usar eyed3 por primera vez tuvo que ver con un error de importación de libmagic a pesar de que estaba instalado. Para arreglar esta instalación, el contenedor mágico whl desde here
Lo que buscas es el módulo ID3 . Es muy simple y te dará exactamente lo que necesitas. Simplemente copie el archivo ID3.py en su directorio de paquetes de sitio y podrá hacer algo como lo siguiente:
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
Miré las respuestas anteriores y descubrí que no son buenas para mi proyecto debido a problemas de licencia con GPL.
Y descubrí esto: PyID3Lib , aunque esa fecha de lanzamiento de python en particular es antigua, usa ID3Lib , que está actualizada.
Cabe destacar que ambos son LGPL y están listos para funcionar.
Puede depender exactamente de lo que quiera hacer además de leer los metadatos. Si simplemente es la tasa de bits / nombre, etc. lo que necesita, y nada más, algo ligero probablemente sea lo mejor.
Si está manipulando el mp3 pasado, PyMedia puede ser adecuado.
Hay bastantes, lo que sea que consigas, asegúrate y pruébalo en muchos medios de muestra. Hay algunas versiones diferentes de las etiquetas ID3 en particular, así que asegúrese de que no estén demasiado desactualizadas.
Personalmente, he usado esta clase pequeña de MP3Info con suerte. Aunque es bastante viejo.
Si puede usar IronPython, está TagLibSharp. Se puede usar desde cualquier lenguaje .NET .
Solo información adicional para ustedes:
Eche un vistazo a la sección "material MP3 y editores de metadatos" en la página de PythonInMusic .
Un problema con eyed3
es que lanzará NotImplementedError("Unable to write ID3 v2.2")
para archivos MP3 comunes.
En mi experiencia, la clase EasyID3
funciona de manera más confiable. Ejemplo:
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()
Se puede acceder a todas las demás etiquetas de esta manera y guardarlas, lo que servirá para la mayoría de los propósitos. Se puede encontrar más información en el Tutorial Mutagen .
mira esto:
https://github.com/Ciantic/songdetails
Ejemplo de uso:
>>> import songdetails
>>> song = songdetails.scan("data/song.mp3")
>>> print song.duration
0:03:12
Guardando cambios:
>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
eyeD3 el otro día con mucho éxito. Descubrí que podría agregar ilustraciones a la etiqueta ID3 que los otros módulos que examiné no podrían. Deberá descargar el python setup.py install
tar y ejecutar la python setup.py install
de python setup.py install
desde la carpeta de origen.
Los ejemplos relevantes del sitio web están a continuación.
Leer el contenido de un archivo mp3 que contiene información de etiqueta v1 o v2:
import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
print tag.getAlbum()
print tag.getTitle()
Lea un archivo mp3 (longitud de la pista, velocidad de bits, etc.) y acceda a su etiqueta:
if eyeD3.isMp3File(f):
audioFile = eyeD3.Mp3AudioFile(f)
tag = audioFile.getTag()
Se pueden seleccionar versiones de etiquetas específicas:
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.
O puede iterar sobre los cuadros sin procesar:
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
for frame in tag.frames:
print frame
Una vez que una etiqueta está vinculada a un archivo, puede modificarse y guardarse:
tag.setArtist(u"Cro-Mags")
tag.setAlbum(u"Age of Quarrel")
tag.update()
Si la etiqueta vinculada fue v2 y desea guardarla como v1:
tag.update(eyeD3.ID3_V1_1)
Lea una etiqueta y elimínela del archivo:
tag.link("/some/file.mp3")
tag.remove()
tag.update()
Agrega una nueva etiqueta:
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()
Este kit de herramientas puede hacer lo que necesita. No puedo decir si es el "mejor", pero realmente, si hace lo que necesita, eso es todo lo que importa, ¿no?
HTH