Доступ к метаданным mp3 с Python - PullRequest
       119

Доступ к метаданным mp3 с Python

107 голосов
/ 12 августа 2008

Каков наилучший способ получения метаданных mp3 в python? Я видел пару фреймворков, но я не уверен, какой из них лучше всего использовать .... Есть идеи?

Ответы [ 16 ]

96 голосов
/ 19 сентября 2008

Я использовал eyeD3 на днях с большим успехом. Я обнаружил, что он может добавить иллюстрацию к тегу ID3, чего не смогли другие модули, на которые я смотрел. Вам нужно скачать tar и выполнить python setup.py install из папки с исходным кодом.

Соответствующие примеры с веб-сайта приведены ниже.

Чтение содержимого mp3-файла, содержащего информацию тега v1 или v2:

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

Считайте mp3-файл (длину дорожки, битрейт и т. Д.) И получите доступ к его тегу:

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

Можно выбрать конкретные версии тегов:

 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.

Или вы можете перебирать необработанные кадры:

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

Как только тег связан с файлом, его можно изменить и сохранить:

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

Если связанный тег был v2 и вы хотите сохранить его как v1:

 tag.update(eyeD3.ID3_V1_1)

Прочитать тег и удалить его из файла:

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

Добавить новый тег:

 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()
34 голосов
/ 14 августа 2008

Я использовал мутаген для редактирования тегов в медиа-файлах ранее. Хорошая особенность мутагена в том, что он может обрабатывать другие форматы, такие как mp4, FLAC и т. Д. Я написал несколько скриптов с большим успехом, используя этот API.

15 голосов
/ 24 января 2016

Проблема с eyed3 заключается в том, что он выдаст NotImplementedError("Unable to write ID3 v2.2") для обычных файлов MP3.

По моему опыту, mutagen класс EasyID3 работает более надежно. Пример:

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

Все остальные теги могут быть доступны таким образом и сохранены, что послужит большинству целей. Более подробную информацию можно найти в Mutagen Tutorial .

13 голосов
/ 13 августа 2008

Что вам нужно, так это модуль ID3 . Это очень просто и даст вам именно то, что вам нужно. Просто скопируйте файл ID3.py в каталог site-packages, и вы сможете сделать что-то вроде следующего:

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
8 голосов
/ 30 декабря 2010

проверить это:

https://github.com/Ciantic/songdetails

Пример использования:

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

Сохранение изменений:

>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
6 голосов
/ 12 августа 2008

Простой пример из книги Dive Into Python хорошо работает для меня, this - ссылка для скачивания, пример fileinfo.py. Не знаю, лучший ли это, но он может выполнять основную работу.

Вся книга доступна онлайн здесь .

5 голосов
/ 08 июля 2011

Просто дополнительная информация для вас, ребята:

Загляните в раздел "Редакторы MP3 и метаданных" на странице PythonInMusic .

5 голосов
/ 20 декабря 2009

Я посмотрел вышеупомянутые ответы и обнаружил, что они не подходят для моего проекта из-за проблем с лицензией на GPL.

И я узнал это: PyID3Lib , в то время как конкретная привязка python дата выпуска устарела, она использует ID3Lib , которая сама по себе актуальна .

Следует отметить, что оба являются LGPL и хороши для использования.

4 голосов
/ 11 августа 2016

Самый простой способ - songdetails ..

для чтения данных

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

аналогично для редактирования

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

Не забудьте добавить u перед именем, пока вы не знаете китайский язык.

вы можете читать и редактировать массово, используя модуль python glob

ех.

import glob
songs = glob.glob('*')   // script should be in directory of songs.
for song in songs:
    // do the above work.
3 голосов
/ 16 апреля 2018

Попробовав простой маршрут pip install для модулей eyeD3, pytaglib и ID3, рекомендованных здесь, я обнаружил, что этот четвертый вариант - единственный, который работает. У остальных были ошибки импорта с отсутствующими зависимостями в C ++ или чем-то волшебном или какой-то другой библиотеке, которую pip пропустил. Итак, воспользуйтесь этим для базового чтения тегов ID3 ​​(все версии):

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

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

Список возможных атрибутов, которые вы можете получить с 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

Это было крошечным и самодостаточным, как рекламируется.

...