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

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

Ответ 1

Я использовал 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()

Ответ 2

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

Ответ 3

Проблема с 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()

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

Ответ 4

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

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

Ответ 5

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

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

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

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

Ответ 7

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

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

Следует отметить, что оба LGPL, и они хороши.

Ответ 8

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

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

Ответ 9

Самый простой способ: 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 до имени, пока не узнаете китайский язык.

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

ех.

import glob
songs = glob.glob('*')   // script should be in directory of songs.
for song in songs:
    // do the above work.

Ответ 10

Попробовав простой маршрут 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

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

Ответ 11

Этот инструментарий может делать то, что вам нужно. Я не могу сказать, является ли это "лучшим", но на самом деле, если он делает то, что вам нужно, что все, что имеет значение, верно?

НТН

Ответ 12

Это может зависеть от того, что вы хотите сделать в дополнение к чтению метаданных. Если это просто битрат/имя и т.д., Что вам нужно, и ничего больше, возможно, что-то облегченное.

Если вы манипулируете mp3, что PyMedia может быть подходящим.

Есть немало, независимо от того, что вы делаете, убедитесь в этом и испытайте его на большом количестве образцов. В частности, есть несколько различных версий тегов ID3, поэтому убедитесь, что они не слишком устарели.

Лично я использовал этот небольшой класс MP3Info с удачей. Однако он довольно старый.

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

Ответ 13

Первый ответ, который использует eyed3, устарел, поэтому здесь его обновленная версия.

Чтение тегов из 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)

Пример с сайта для изменения тегов:

 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

Проблема, с которой я столкнулся при попытке использовать eyed3 в первый раз, была связана с ошибкой импорта libmagic, даже если она была установлена. Чтобы исправить это, установите волшебную корзину отсюда

Ответ 15

После некоторых начальных исследований я думал, что songdetails может соответствовать моему варианту использования, но он не обрабатывает файлы .m4b. Мутаген. Обратите внимание, что хотя некоторые из них имеют (разумно) проблему с Mutagen-всплытием встроенных ключей формата, которые варьируются от формата к формату (TIT2 для mp3, название для ogg,\xa9nam для mp4, Title for WMA и т.д.), Mutagen.File( ) имеет (новый?) параметр easy = True, который обеспечивает теги EasyMP3/EasyID3, которые имеют последовательный, хотя и ограниченный набор ключей. Пока что я провел ограниченное тестирование, но общие ключи, такие как альбом, исполнитель, альбом, жанр, дорожка, диск и т.д., Все присутствуют и идентичны для файлов .mb4 и .mp3 при использовании easy = True, что делает его очень удобно для моих целей.

Ответ 16

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

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

Пример:

from mp3_tagger import MP3File

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

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

Он поддерживает установку, получение, обновление и удаление атрибутов mp3 файлов.