Accediendo a los metadatos mp3 con Python

¿Cuál es la mejor manera de recuperar metadatos de mp3 en Python? He visto un par de marcos por ahí, pero no estoy seguro de cuál sería el mejor uso … ¿Alguna idea?

Usé eyeD3 el otro día con mucho éxito. Descubrí que podía agregar ilustraciones a la etiqueta ID3 que los otros módulos que observé no podían. Tendrá que descargar el python setup.py install tar y ejecutar python setup.py install desde la carpeta de origen.

Los ejemplos relevantes del sitio web se encuentran a continuación.

Leyendo 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() 

Lee un archivo mp3 (duración de la pista, tasa de bits, etc.) y accede a su etiqueta:

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

Se pueden seleccionar versiones de tags 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 puedes iterar sobre los marcos en bruto:

  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, se puede modificar y guardar:

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

Si la etiqueta vinculada era 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() 

Añadir 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() 

He usado mutagen para editar tags 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 usando esta API.

Un problema con eyed3 es que lanzará NotImplementedError("Unable to write ID3 v2.2") para archivos MP3 comunes.

En mi experiencia, la clase de mutagen 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 tags 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 de Mutagen .

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 el 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 

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() 

Un ejemplo simple del libro Dive Into Python funciona bien para mí, este es el enlace de descarga, el ejemplo es fileinfo.py. No sé si es lo mejor, pero puede hacer el trabajo básico.

El libro completo está disponible en línea aquí .

Busqué las respuestas anteriores y descubrí que no son buenas para mi proyecto debido a problemas de licencia con la GPL.

Y descubrí esto: PyID3Lib , si bien esa fecha de publicación de enlace de Python en particular es antigua, usa ID3Lib , que a su vez está actualizada.

Notable de mencionar es que ambos son LGPL , y son buenos para ir.

Sólo información adicional para ustedes:

Eche un vistazo a la sección ” Editor de metadatos y archivos de MP3″ en la página de PythonInMusic .

El método más fácil es 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 olvide agregar u antes del nombre hasta que sepa el idioma chino.

Puedes leer y editar de forma masiva utilizando 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. 

Después de probar la sencilla ruta de pip install para eyeD3, pytaglib y los módulos ID3 recomendados aquí, encontré que esta cuarta opción era la única que funcionaba. El rest tenía errores de importación con dependencias faltantes en C ++ o algo mágico o alguna otra biblioteca que no se haya pip descargar. Vaya con este para la lectura básica de tags 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 atributos posibles 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.

Este kit de herramientas puede hacer lo que necesites. No puedo decir si es el “mejor”, pero realmente, si hace lo que necesitas, eso es todo lo que importa, ¿verdad?

HTH

Puede depender exactamente de lo que quiere hacer además de leer los metadatos. Si lo que necesita es simplemente la tasa de bits / nombre, etc., y nada más, probablemente lo mejor sea algo liviano.

Si está manipulando el mp3 pasado, PyMedia puede ser adecuado.

Hay bastantes, lo que sea que consigas, asegúrate de probarlo en muchos medios de muestra. Hay algunas versiones diferentes de tags ID3 en particular, así que asegúrate de que no esté desactualizado.

Personalmente he usado esta pequeña clase de MP3Info con suerte. Aunque es bastante viejo.

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

La primera respuesta que utiliza eyed3 está desactualizada, por lo que aquí hay una versión actualizada de la misma.

Leyendo las tags 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 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 

Un problema que encontré al intentar usar eyed3 por primera vez tenía que ver con un error de importación de libmagic a pesar de que estaba instalado. Para arreglar esto, instale el magic-bin whl desde aquí.

Si puedes usar IronPython, existe TagLibSharp. Se puede utilizar desde cualquier lenguaje .NET .

Después de algunas investigaciones iniciales, pensé que los detalles de las canciones podrían ajustarse a mi caso de uso, pero no maneja archivos .m4b. Mutagen lo hace. Tenga en cuenta que si bien algunos (razonablemente) han tenido problemas con el surgimiento de Mutagen de claves de formato nativo, 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 simple = Verdadero que proporciona tags EasyMP3 / EasyID3, que tienen un conjunto de claves coherente, aunque limitado. Hasta ahora solo he realizado pruebas limitadas, pero las claves comunes, como el álbum, el artista, el artista del álbum, el género, el número de pista, el número de disco, etc. están todas presentes e idénticas para los archivos .mb4 y .mp3 cuando se usa easy = True, por lo que Muy conveniente para mis propósitos.

Yo sugeriría mp3-tagger . Lo mejor de esto es que se distribuye bajo la licencia MIT y es compatible con todos los atributos requeridos.

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

Ejemplo:

 from mp3_tagger import MP3File # Create MP3File instance. mp3 = MP3File('File_Name.mp3') # Get all tags. tags = mp3.get_tags() print(tags) 

Es compatible con establecer, obtener, actualizar y eliminar atributos de archivos mp3.