Как мне назвать метаданные для mp3 с python?
У меня есть несколько папок с файлами MP3, которые не содержат метаданных, но содержат некоторые данные в самом имени файла.
Я хочу скопировать данные из заголовка в файл как метаданные.
Что у меня уже есть:
import eyed3.mp3
import os
local = os.getcwd()+"\\"
for file in os.listdir(local):
while os.path.basename(file)[-4:len(os.path.basename(file))] == ".mp3":
original = os.path.basename(file)
print(original)
original2 = original[0:-4]
print(original2)
list = original2.split(" - ")
print(list)
f = eyed3.load(file)
class Mp3AudioFile(f):
f.initTag(Artist=(list[0]))
f.initTag(Album=(list[1]+list[2]))
f.initTag(TrackNumber=(list[3]))
f.initTag(Title=(list[4]))
break
Что это печатает:
John Williams - S.W. Ep. IV - CD 1 - 01 - 20th Century Fox Fanfare.mp3
John Williams - S.W. Ep. IV - CD 1 - 01 - 20th Century Fox Fanfare
['John Williams', 'S.W. Ep. IV', ' CD 1', '01', '20th Century Fox Fanfare']
Это дает эту ошибку:
TypeError: initTag() got an unexpected keyword argument 'Artist'
Как мне получить данные из заголовка, которые я проанализировал в списке, как метаданные файла.
Я также хотел иметь возможность просто скопировать и вставить файл.py, выполнить его в любой из имеющихся у меня папок.
1 ответ
Решение
Если вы посмотрите на документацию, единственными kwargs для initTag является tag_version. Поэтому с помощью этой функции нельзя установить исполнителя, название, номер дорожки или альбом.
Вы можете установить значения следующим образом:
f = eyed3.load(file)
f.tag.artist = unicode(list[0])
f.tag.album = unicode(' '.join(list[1]+list[2]))
f.tag.track_num = int(list[3])
f.tag.title = unicode(list[4])
f.tag.save()
Надеюсь это поможет!