Другая ситуация, в которой эта ошибка может возникнуть, находится в SQL Server Management Studio. Если в вашей таблице есть поля «text» или «ntext», независимо от того, какое поле вы обновляете (например, бит или целое число). Похоже, что Studio не загружает все поля «ntext», а также обновляет ВСЕ поля вместо измененного. Чтобы решить проблему, исключите поля «текст» или «текст» из запроса в Management Studio
Самый простой способ - 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()
Don Не забудьте добавить u до имени, пока не узнаете китайский язык.
u может читать и редактировать в массовом порядке с помощью модуля python glob
ex.
import glob
songs = glob.glob('*') // script should be in directory of songs.
for song in songs:
// do the above work.
Я бы предложил mp3-tagger .
- 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)
Он поддерживает атрибуты set, get, update и delete, а также поддерживает все необходимые атрибуты. mp3-файлов.
Проблема с 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 .
Я просмотрел приведенные выше ответы и выяснил, что они не подходят для моего проекта из-за проблем с лицензированием с GPL.
И я узнал об этом: PyID3Lib , тогда как особенно дата релиза python устарела, она использует ID3Lib , которая сама по себе актуальна.
Примечательно, что оба являются LGPL, и хорошо идти.
Если вы можете использовать IronPython, есть TagLibSharp. Он может использоваться с любого языка .NET .
проверьте это:
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()
Первый ответ, который использует 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, даже если она была установлена. Чтобы исправить эту установку, выберите здесь [bg] []
Что вам нужно, это модуль 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
После некоторых начальных исследований я думал, что songdetails может соответствовать моему варианту использования, но он не обрабатывает файлы .m4b. Мутаген. Обратите внимание, что, хотя некоторые из них имеют (разумно) проблему с наложением Mutagen на встроенные в формат ключи, которые варьируются от формата к формату (TIT2 для mp3, название для ogg, \ xa9nam для mp4, Title for WMA и т. Д.), Mutagen.File ( ) имеет (новый?) параметр easy = True, который обеспечивает теги EasyMP3 / EasyID3, которые имеют последовательный, хотя и ограниченный набор ключей. Пока что я провел ограниченное тестирование, но общие ключи, такие как альбом, исполнитель, альбом, жанр, дорожка, диск и т. Д., Все присутствуют и идентичны для файлов .mb4 и .mp3 при использовании easy = True, что делает его очень удобен для моих целей.
Попробовав простой 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 с большим успехом. Я обнаружил, что он может добавлять иллюстрации к тегу 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()
Простой пример из книги Dive Into Python работает нормально для меня, это является ссылкой для загрузки, примером является fileinfo.py. Не знаю, является ли это лучшим, но он может выполнять основную работу.
Вся книга доступна в Интернете здесь .
Это может зависеть именно от того, что вы хотите сделать в дополнение к чтению метаданных. Если это просто битбит / имя и т. Д., Что вам нужно, и ничего больше, возможно, что-то облегченное.
Если вы манипулируете mp3, который может быть подходящим PyMedia.
Есть немало, независимо от того, что вы делаете, убедитесь в этом и протестируйте его на множестве пробных носителей. В частности, есть несколько различных версий тегов ID3, поэтому убедитесь, что они не слишком устарели.
Лично я использовал этот небольшой класс MP3Info с удачей. Однако он довольно старый.
Только дополнительная информация для вас, ребята:
взгляните на раздел «MP3-файлы и редакторы метаданных» на странице PythonInMusic .
Я использовал mutagen для редактирования тегов в медиафайлах раньше. Хорошая вещь о мутагене заключается в том, что он может обрабатывать другие форматы, такие как mp4, FLAC и т. Д. Я написал несколько сценариев с большим успехом, используя этот API.
Этот инструментарий может делать то, что вам нужно. Я не могу сказать, является ли это «лучшим», но на самом деле, если он делает то, что вам нужно, это все, что имеет значение, верно?
HTH