Yanıtlar:
Ben kullanılan eyeD3 başarı bir sürü gün. Baktığım diğer modüllerin yapamadığı ID3 etiketine sanat ekleyebileceğini buldum. Pip kullanarak yüklemeniz veya tar dosyasını indirmeniz ve python setup.py install
kaynak klasörden çalıştırmanız gerekir .
Web sitesinden ilgili örnekler aşağıdadır.
V1 veya v2 etiket bilgilerini içeren bir mp3 dosyasının içeriğini okuma:
import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
print tag.getAlbum()
print tag.getTitle()
Bir mp3 dosyasını okuyun (parça uzunluğu, bit hızı vb.) Ve etiketine erişin:
if eyeD3.isMp3File(f):
audioFile = eyeD3.Mp3AudioFile(f)
tag = audioFile.getTag()
Belirli etiket sürümleri seçilebilir:
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.
Veya ham kareler üzerinde yineleme yapabilirsiniz:
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
for frame in tag.frames:
print frame
Bir etiket bir dosyaya bağlandığında değiştirilebilir ve kaydedilebilir:
tag.setArtist(u"Cro-Mags")
tag.setAlbum(u"Age of Quarrel")
tag.update()
Bağlantı verilen etiket v2 ise ve bunu v1 olarak kaydetmek istiyorsanız:
tag.update(eyeD3.ID3_V1_1)
Bir etiketi okuyun ve dosyadan kaldırın:
tag.link("/some/file.mp3")
tag.remove()
tag.update()
Yeni bir etiket ekleyin:
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
(küçük d) kullanın .
Daha önce medya dosyalarındaki etiketleri düzenlemek için mutajen kullandım . Mutagen ile ilgili güzel olan şey, mp4, FLAC vb. Gibi diğer formatları işleyebilmesidir. Bu API'yi kullanarak çok başarılı birkaç komut dosyası yazdım.
TIT2
mp3 için, title
ogg \xa9nam
için, mp4 Title
için, WMA için vs. - bu berbat.
İlgili bir sorun eyed3
o atmak olacaktır NotImplementedError("Unable to write ID3 v2.2")
ortak MP3 dosyaları için.
Tecrübelerime göre mutagen
sınıf EasyID3
daha güvenilir çalışıyor. Misal:
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()
Diğer tüm etiketlere bu şekilde erişilebilir ve çoğu amaca hizmet edecek şekilde kaydedilebilir. Daha fazla bilgi şurada bulunabilir:Mutajen Eğitimi'nde .
Peşinde olduğun şey ID3 modülü. Çok basit ve size tam olarak ihtiyacınız olanı verecek. ID3.py dosyasını site paketleri dizininize kopyalamanız yeterlidir ve aşağıdaki gibi bir şey yapabilirsiniz:
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
şuna bir bak:
https://github.com/Ciantic/songdetails
Kullanım örneği:
>>> import songdetails
>>> song = songdetails.scan("data/song.mp3")
>>> print song.duration
0:03:12
Değişiklikleri kaydediyor:
>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
Size sadece ek bilgiler:
PythonInMusic sayfasındaki "MP3 öğeleri ve Meta veri düzenleyicileri" bölümüne bir göz atın .
Dive Into Python kitabından basit bir örnek benim için iyi çalışıyor, bu indirme bağlantısı, örnek ise fileinfo.py. En iyisi mi bilmiyorum ama temel işi yapabilir.
Kitabın tamamı burada çevrimiçi olarak mevcuttur .
Yukarıdaki cevaplara baktım ve GPL ile ilgili lisans sorunları nedeniyle projem için iyi olmadıklarını öğrendim.
Ve şunu öğrendim: PyID3Lib , bu belirli python bağlama çıkış tarihi eski olmasına rağmen , kendisi güncel olan ID3Lib'i kullanıyor .
Her ikisinin de LGPL olduğu ve gitmesi iyi olduğu söylenebilir.
en kolay yöntem şarkı ayrıntılarıdır ..
verileri okumak için
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
print song.artist
benzer şekilde düzenleme için
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
song.artist = u"The Great Blah"
song.save()
Çince öğrenene kadar isimden önce u eklemeyi unutmayın .
python glob modülünü kullanarak toplu olarak okuyabilir ve düzenleyebilirsiniz
ex.
import glob
songs = glob.glob('*') // script should be in directory of songs.
for song in songs:
// do the above work.
pip install
Burada önerilen eyeD3, pytaglib ve ID3 modülleri için basit yolu denedikten sonra , bu dördüncü seçeneğin işe yarayan tek seçenek olduğunu buldum. Geri kalanında, C ++ 'da eksik bağımlılıklarla ilgili içe aktarma hataları veya sihirli bir şey veya pip
kaçırılan başka bir kitaplık vardı . Öyleyse, ID3 etiketlerinin (tüm sürümler) temel okuması için bununla devam edin:
https://pypi.python.org/pypi/tinytag/0.18.0
from tinytag import TinyTag
tag = TinyTag.get('/some/music.mp3')
TinyTag ile alabileceğiniz olası özelliklerin listesi:
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
Söylendiği gibi küçük ve bağımsızdı.
Eyed3 kullanan ilk cevap güncel değil, bu yüzden işte güncellenmiş bir versiyonu.
Bir mp3 dosyasından etiket okuma:
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)
Etiketleri değiştirmek için web sitesinden bir örnek:
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'ü ilk kez kullanmaya çalışırken karşılaştığım bir sorun, yüklü olmasına rağmen libmagic'in içe aktarma hatasıyla ilgiliydi. Bunu düzeltmek için sihirli kutusu buradan takın
Mp3-tagger öneririm . Bununla ilgili en iyi şey, MIT Lisansı altında dağıtılması ve gerekli tüm özellikleri desteklemesidir.
- artist;
- album;
- song;
- track;
- comment;
- year;
- genre;
- band;
- composer;
- copyright;
- url;
- publisher.
Misal:
from mp3_tagger import MP3File
# Create MP3File instance.
mp3 = MP3File('File_Name.mp3')
# Get all tags.
tags = mp3.get_tags()
print(tags)
Mp3 dosyalarının özelliklerini ayarlama, alma, güncelleme ve silme işlemlerini destekler.
Meta verileri okumaya ek olarak tam olarak ne yapmak istediğinize bağlı olabilir. Sadece ihtiyacınız olan bit hızı / ad vb. İse ve başka bir şey değilse, hafif bir şey muhtemelen en iyisidir.
MP3'ü geçmişte manipüle ediyorsanız, PyMedia uygun olabilir.
Ne alırsanız alın, emin olun ve bol miktarda örnek ortam üzerinde test edin. Özellikle ID3 etiketlerinin birkaç farklı sürümü vardır, bu yüzden çok eski olmadığından emin olun.
Şahsen ben bu küçük MP3Info sınıfını şansla kullandım. Yine de oldukça eski.
İlk araştırmalardan sonra şarkı ayrıntılarının benim kullanım durumuma uyabileceğini düşündüm, ancak .m4b dosyalarını işlemiyor. Mutagen yapar. Bazılarının (makul olarak) Mutagen'in format-yerel anahtarları ortaya çıkarmasıyla ilgili sorun yaşadığını unutmayın; bu, formattan formata (mp3 için TIT2, ogg için başlık, mp4 için \ xa9nam, WMA için Başlık vb.), Mutajen. ) (yeni?) easy = True parametresi vardır ve EasyMP3 / EasyID3 etiketlerini sağlar, ancak sınırlı da olsa tutarlı bir anahtar setine sahiptir. Şimdiye kadar yalnızca sınırlı testler yaptım, ancak albüm, sanatçı, albüm sanatçısı, tür, parça numarası, disk numarası vb. Gibi ortak anahtarlar easy = True kullanılırken .mb4 ve .mp3 dosyaları için mevcut ve aynı. amaçlarım için çok uygun.
https://github.com/nicfit/eyeD3 kullanarak
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 kullandım çünkü
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>