Ответы:
На днях я успешно использовал eyeD3 . Я обнаружил, что он может добавлять изображения в тег ID3, чего не могли другие модули, на которые я смотрел. Вам нужно будет установить с помощью pip или загрузить 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()
import eyed3
(d в нижнем регистре).
Раньше я использовал мутаген для редактирования тегов в медиафайлах. Хорошая особенность мутагена в том, что он может обрабатывать другие форматы, такие как mp4, FLAC и т. Д. Я написал несколько сценариев с большим успехом, используя этот API.
TIT2
для mp3, title
для ogg, \xa9nam
для mp4, Title
для WMA и т.д. - отстой.
Проблема с тем 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()
Таким образом можно получить доступ ко всем другим тегам и сохранить их, что будет служить большинству целей. Дополнительную информацию можно найти в Руководстве по мутагену .
Вам нужен модуль 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
проверьте это:
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 .
Простой пример из книги Dive Into Python мне подходит, это подходит ссылка для скачивания, пример - fileinfo.py. Не знаю, лучший ли он, но он справится с основной работой.
Вся книга доступна онлайн здесь .
Я просмотрел приведенные выше ответы и обнаружил, что они не подходят для моего проекта из-за проблем с лицензированием по GPL.
И я узнал следующее: PyID3Lib , а эта конкретная привязка python дата выпуска устарела, она использует ID3Lib , которая сама по себе является актуальной.
Следует отметить, что оба являются LGPL , и их можно использовать.
Самый простой способ - это подробности песни ..
для чтения данных
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.
Попробовав простой 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
Как рекламировалось, он был крошечным и самодостаточным.
Первый ответ, который использует 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, даже если она была установлена. Чтобы исправить это, установите magic-bin отсюда
Я бы посоветовал mp3-теггер . Лучшее в этом то, что он распространяется под лицензией 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.
Это может зависеть от того, что вы хотите делать помимо чтения метаданных. Если вам нужен просто битрейт / имя и т.д., и ничего больше, вероятно, лучше всего подойдет что-нибудь легкое.
Если вы манипулируете прошлым mp3, вам может подойти PyMedia.
Их довольно много, что бы вы ни получили, убедитесь и проверьте это на большом количестве образцов носителей. В частности, существует несколько различных версий тегов ID3, поэтому убедитесь, что они не слишком устарели.
Лично я успешно использовал этот небольшой класс MP3Info. Хотя он довольно старый.
После некоторых первоначальных исследований я подумал, что сведения о песнях могут соответствовать моему варианту использования, но он не обрабатывает файлы .m4b. Мутаген делает. Обратите внимание, что хотя некоторые (разумно) столкнулись с проблемой появления Mutagen собственных ключей формата, которые различаются от формата к формату (TIT2 для mp3, title для ogg, \ xa9nam для mp4, Title для WMA и т. Д.), Mutagen.File ( ) имеет (новый?) параметр easy = True, который предоставляет теги EasyMP3 / EasyID3, которые имеют согласованный, хотя и ограниченный, набор ключей. Я провел только ограниченное тестирование, но общие ключи, такие как альбом, исполнитель, исполнитель альбома, жанр, номер трека, номер диска и т. Д., Все присутствуют и идентичны для файлов .mb4 и .mp3 при использовании easy = True, что делает его очень удобно для моих целей.
используя https://github.com/nicfit/eyeD3
import eyed3
import os
for root, dirs, files in os.walk(folderp):
for file in files:
try:
if file.find(".mp3") < 0:
continue
path = os.path.abspath(os.path.join(root , file))
t = eyed3.load(path)
print(t.tag.title , t.tag.artist)
#print(t.getArtist())
except Exception as e:
print(e)
continue
Я использовал tinytag 1.3.1, потому что
1.3.0 (2020-03-09):
added option to ignore encoding errors ignore_errors #73
Improved text decoding for many malformed files
MP3 (ID3 v1, v1.1, v2.2, v2.3+)
Wave/RIFF
OGG
OPUS
FLAC
WMA
MP4/M4A/M4B
from tinytag import TinyTag
fileNameL ='''0bd1ab5f-e42c-4e48-a9e6-b485664594c1.mp3
0ea292c0-2c4b-42d4-a059-98192ac8f55c.mp3
1c49f6b7-6f94-47e1-a0ea-dd0265eb516c.mp3
5c706f3c-eea4-4882-887a-4ff71326d284.mp3
'''.split()
for fn in fileNameL:
fpath = './data/'+fn
tag = TinyTag.get(fpath)
print()
print('"artist": "%s",' % tag.artist)
print('"album": "%s",' % tag.album)
print('"title": "%s",' % tag.title)
print('"duration(secs)": "%s",' % tag.duration)
JoeTagPj>python joeTagTest.py
"artist": "Conan O’Brien Needs A Friend",
"album": "Conan O’Brien Needs A Friend",
"title": "17. Thomas Middleditch and Ben Schwartz",
"duration(secs)": "3565.1829583532785",
"artist": "Conan O’Brien Needs A Friend",
"album": "Conan O’Brien Needs A Friend",
"title": "Are you ready to make friends?",
"duration(secs)": "417.71840447045264",
"artist": "Conan O’Brien Needs A Friend",
"album": "Conan O’Brien Needs A Friend",
"title": "Introducing Conan’s new podcast",
"duration(secs)": "327.22187551899646",
"artist": "Conan O’Brien Needs A Friend",
"album": "Conan O’Brien Needs A Friend",
"title": "19. Ray Romano",
"duration(secs)": "3484.1986772305863",
C:\1d\PodcastPjs\JoeTagPj>