Câu trả lời:
Tôi đã sử dụng eyeD3 vào một ngày khác với rất nhiều thành công. Tôi thấy rằng nó có thể thêm tác phẩm nghệ thuật vào thẻ ID3 mà các mô-đun khác mà tôi đã xem không thể. Bạn sẽ phải cài đặt bằng pip hoặc tải tar và thực thi python setup.py install
từ thư mục nguồn.
Các ví dụ liên quan từ trang web dưới đây.
Đọc nội dung của tệp mp3 chứa thông tin thẻ v1 hoặc v2:
import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
print tag.getAlbum()
print tag.getTitle()
Đọc tệp mp3 (độ dài bản nhạc, bitrate, v.v.) và truy cập thẻ của nó:
if eyeD3.isMp3File(f):
audioFile = eyeD3.Mp3AudioFile(f)
tag = audioFile.getTag()
Phiên bản thẻ cụ thể có thể được chọn:
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.
Hoặc bạn có thể lặp lại qua các khung thô:
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
for frame in tag.frames:
print frame
Khi một thẻ được liên kết đến một tệp, nó có thể được sửa đổi và lưu lại:
tag.setArtist(u"Cro-Mags")
tag.setAlbum(u"Age of Quarrel")
tag.update()
Nếu thẻ được liên kết trong là v2 và bạn muốn lưu nó dưới dạng v1:
tag.update(eyeD3.ID3_V1_1)
Đọc trong thẻ và xóa nó khỏi tệp:
tag.link("/some/file.mp3")
tag.remove()
tag.update()
Thêm một thẻ mới:
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
(chữ thường d).
Tôi đã sử dụng mutagen để chỉnh sửa thẻ trong các tập tin phương tiện trước đây. Điều thú vị về mutagen là nó có thể xử lý các định dạng khác, chẳng hạn như mp4, FLAC, v.v. Tôi đã viết một số tập lệnh với rất nhiều thành công khi sử dụng API này.
TIT2
cho mp3, title
cho ogg, \xa9nam
cho mp4, Title
cho WMA, v.v. - thật tệ.
Một vấn đề với eyed3
là nó sẽ némNotImplementedError("Unable to write ID3 v2.2")
cho các tệp MP3 phổ biến.
Theo kinh nghiệm của tôi, mutagen
lớp học EasyID3
hoạt động đáng tin cậy hơn. Thí dụ:
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()
Tất cả các thẻ khác có thể được truy cập theo cách này và được lưu, sẽ phục vụ hầu hết các mục đích. Thông tin thêm có thể được tìm thấy trong Hướng dẫn Mutagen .
Những gì bạn đang theo là mô-đun ID3 . Nó rất đơn giản và sẽ cung cấp cho bạn chính xác những gì bạn cần. Chỉ cần sao chép tệp ID3.py vào thư mục gói trang web của bạn và bạn sẽ có thể làm một cái gì đó như sau:
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
kiểm tra cái này
https://github.com/Ciantic/songdetails
Ví dụ sử dụng:
>>> import songdetails
>>> song = songdetails.scan("data/song.mp3")
>>> print song.duration
0:03:12
Lưu thay đổi:
>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
Chỉ cần thêm thông tin cho các bạn:
hãy xem phần "Công cụ MP3 và trình chỉnh sửa siêu dữ liệu" trong trang PythonInMusic .
Một ví dụ đơn giản từ cuốn sách Lặn vào Python hoạt động tốt với tôi, điều này là liên kết tải xuống, ví dụ là fileinfo.py. Không biết nếu nó là tốt nhất, nhưng nó có thể làm công việc cơ bản.
Toàn bộ cuốn sách có sẵn trực tuyến ở đây .
Tôi đã xem các câu trả lời ở trên và phát hiện ra rằng chúng không tốt cho dự án của tôi vì vấn đề cấp phép với GPL.
Và tôi phát hiện ra điều này: PyID3Lib , trong khi ngày phát hành ràng buộc trăn cụ thể đó đã cũ, nó sử dụng ID3Lib , bản thân nó đã được cập nhật.
Đáng chú ý phải kể đến là cả hai đều là LGPL , và đều tốt.
Phương pháp đơn giản nhất là songdetails ..
để đọc dữ liệu
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
print song.artist
tương tự để chỉnh sửa
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
song.artist = u"The Great Blah"
song.save()
Đừng quên thêm u trước tên cho đến khi bạn biết tiếng Trung Quốc.
bạn có thể đọc và chỉnh sửa hàng loạt bằng mô-đun python global
Ví dụ.
import glob
songs = glob.glob('*') // script should be in directory of songs.
for song in songs:
// do the above work.
Sau khi thử pip install
tuyến đường đơn giản cho các mô-đun eyeD3, pytaglib và ID3 được đề xuất ở đây, tôi thấy tùy chọn thứ tư này là lựa chọn duy nhất để hoạt động. Phần còn lại có lỗi nhập với các phụ thuộc bị thiếu trong C ++ hoặc ma thuật hoặc một số thư viện khác pip
bị bỏ lỡ. Vì vậy, hãy đi với cái này để đọc các thẻ ID3 cơ bản (tất cả các phiên bản):
https://pypi.python.org/pypi/tinytag/0.18.0
from tinytag import TinyTag
tag = TinyTag.get('/some/music.mp3')
Danh sách các thuộc tính có thể bạn có thể nhận được với 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
Nó nhỏ xíu và khép kín, như quảng cáo.
Câu trả lời đầu tiên sử dụng eyed3 đã lỗi thời vì vậy đây là phiên bản cập nhật của nó.
Đọc thẻ từ tệp 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)
Một ví dụ từ trang web để sửa đổi thẻ:
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
Một vấn đề tôi gặp phải khi cố gắng sử dụng eyed3 lần đầu tiên là do lỗi nhập libmagic mặc dù đã được cài đặt. Để sửa lỗi này, hãy cài đặt Magic-bin whl từ đây
Tôi muốn đề nghị mp3-tagger . Điều tốt nhất về điều này là nó được phân phối theo Giấy phép MIT và hỗ trợ tất cả các thuộc tính bắt buộc.
- artist;
- album;
- song;
- track;
- comment;
- year;
- genre;
- band;
- composer;
- copyright;
- url;
- publisher.
Thí dụ:
from mp3_tagger import MP3File
# Create MP3File instance.
mp3 = MP3File('File_Name.mp3')
# Get all tags.
tags = mp3.get_tags()
print(tags)
Nó hỗ trợ thiết lập, nhận, cập nhật và xóa các thuộc tính của tệp mp3.
Nó có thể phụ thuộc vào chính xác những gì bạn muốn làm ngoài việc đọc siêu dữ liệu. Nếu nó chỉ đơn giản là bitrate / tên, vv mà bạn cần, và không có gì khác, một cái gì đó nhẹ có lẽ là tốt nhất.
Nếu bạn đang thao tác với mp3 quá khứ thì PyMedia có thể phù hợp.
Có khá nhiều, bất cứ điều gì bạn nhận được, hãy chắc chắn và kiểm tra nó trên nhiều phương tiện mẫu. Cụ thể có một vài phiên bản khác nhau của thẻ ID3, vì vậy hãy đảm bảo rằng nó không quá lỗi thời.
Cá nhân tôi đã sử dụng lớp MP3Info nhỏ này một cách may mắn. Nó khá cũ mặc dù.
Sau một số nghiên cứu ban đầu, tôi nghĩ rằng các bài hát có thể phù hợp với trường hợp sử dụng của tôi, nhưng nó không xử lý các tệp .m4b. Mutagen nào. Lưu ý rằng mặc dù một số (có lý do) đã gặp sự cố với các khóa gốc định dạng của Mutagen, thay đổi từ định dạng sang định dạng (TIT2 cho mp3, tiêu đề cho ogg, \ xa9nam cho mp4, Tiêu đề cho WMA, v.v.), mutagen.File ( ) có một tham số (mới?) easy = True cung cấp các thẻ EasyMP3 / EasyID3, có một bộ khóa nhất quán, mặc dù có giới hạn. Cho đến nay tôi chỉ thực hiện thử nghiệm giới hạn, nhưng các khóa phổ biến, như album, nghệ sĩ, albumartist, thể loại, tracknumber, Discnumber, v.v ... đều có mặt và giống hệt nhau cho các tệp .mb4 và .mp3 khi sử dụng easy = True, làm cho nó rất thuận tiện cho mục đích của tôi
sử dụng 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
Tôi đã sử dụng tinytag 1.3.1 vì
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>