Какой лучший способ получения метаданных mp3 в python? Я видел несколько фреймворков, но не знаю, какой из них лучше использовать. Есть идеи?
Я использовал eyeD3 на днях с большим успехом. Я обнаружил, что он может добавить обложку в теге ID3 которых другие модули я посмотрел на не мог'т. Вы'придется скачать tar и выполнить питона setup.py установить из папки источника.
Соответствующие примеры с сайта ниже.
Чтение содержимого 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 и вы'd, как, чтобы сохранить его как 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()
Я'вэ использовал мутагеном Для редактирования тегов в медиа-файлах перед. Хорошая вещь о мутагеном является то, что он может обрабатывать другие форматы, такие как MP4, FLAC и т. д. Я'вэ написано несколько скриптов с большим успехом, используя этот API.
Проблема с eyed3 заключается в том, что он будет бросать NotImplementedError("не можете написать ID3 версии 2.2 и")
для обычных mp3-файлов.
По моему опыту, мутаген
класс 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()
Все остальные теги можно получить таким образом и спас, который будет служить большинство целей. Более подробную информацию можно найти в Мутаген учебник.
То, что вы'вновь, после это Ш3 модуль. Это's очень простой и даст вам именно то, что вам нужно. Просто скопируйте файл id3.py на вашем сайте-пакетов каталог, и вы'll быть в состоянии сделать что-то вроде следующего:
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
проверить это один из:
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()
Просто дополнительная информация для вас, ребята:
посмотрите в разделе "в формате mp3 вещи и редакторов метаданных" В странице PythonInMusic.
Я посмотрел на ответы выше и выяснили, что они не подходят для моего проекта из-за проблем лицензирования с GPL.
И я узнала это: PyID3Lib, в то время как конкретное в Python привязки дата выхода старая, она использует ID3Lib, которая сама по себе является актуальной.
Примечательно, чтобы упомянуть, что оба никогда, и хорошо идти.
самый простой способ-это 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 Глоб
экс.
import glob
songs = glob.glob('*') // script should be in directory of songs.
for song in songs:
// do the above work.
После попытки простой типун установить маршрут для eyeD3, pytaglib, и ID3 модули, рекомендованные здесь, я нашел четвертый вариант был только один, чтобы работать. Остальные ошибки импорта недостающих зависимостей в C++ или что-то магии или какой-либо другой библиотеки, что типун
пропустил. Так что идите с этим на базовое чтение 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
Он был крошечным и самодостаточный, как рекламируется.
Я бы предложил для MP3-Таггер. Лучшая вещь об этом она распространяется по лицензия Минпромторга и поддерживает все необходимые атрибуты.
- 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.
Первый ответ, который использует 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, даже если он был установлен. Чтобы это исправить установите магия-ОГРН колесо от ЗДЕСЬ
Это может зависеть от того, что именно вы хотите делать в дополнение к чтению метаданных. Если вам нужен только битрейт/имя и т.д., и ничего больше, то, вероятно, лучше использовать что-то легкое.
Если вы хотите манипулировать mp3 после этого, PyMedia может подойти.
Их довольно много, но какую бы вы ни взяли, обязательно протестируйте ее на большом количестве образцов носителей. Есть несколько различных версий ID3 тегов, в частности, так что убедитесь, что она не слишком устарела.
Лично я с успехом использовал этот небольшой класс MP3Info. Хотя он довольно старый.
Этот набор инструментов может сделать то, что вам нужно. Я не могу сказать, является ли он "лучшим", но на самом деле, если он делает то, что вам нужно, это все, что имеет значение, не так ли?
HTH
После некоторых первоначальных исследований я думал, что songdetails может соответствовать моем случае использовать, но это вовсе'Т-образная рукоятка .m4b файлы. Мутаген делает. Обратите внимание, что, хотя некоторые имеют (в разумных пределах), проблемы с мутагеном'с покрытием формата-родные ключи, которые различаются в зависимости от формата в формат (TIT2 для MP3, название Огг, \xa9nam для mp4, название для WMA и т. д.), мутаген.Файл() есть (новый?) легко=True параметр, который предоставляет EasyMP3/EasyID3 теги, которые имеют последовательную, хотя и ограниченный, набор ключей. Я'вэ только ограниченное тестирование до сих пор, но основные ключи, как альбом, исполнитель, исполнитель альбома, жанр, tracknumber, discnumber и т. д. все это присутствует и идентичен для .mb4 и .mp3 файлов при использовании легко=правда, что делает его очень удобным для моих целей.
Если вы можете использовать установить IronPython, есть TagLibSharp. Он может быть использован из любого .Чистый язык.