python mp3 metadata
this

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.

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



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 ejemplo simple del libro Dive Into Python funciona bien para mí, this 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 here .


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