Jawaban:
Saya menggunakan eyeD3 beberapa hari yang lalu dengan banyak kesuksesan. Saya menemukan bahwa itu bisa menambahkan karya seni ke tag ID3 yang modul lain yang saya lihat tidak bisa. Anda harus menginstal menggunakan pip atau mengunduh tar dan mengeksekusi python setup.py install
dari folder sumber.
Contoh yang relevan dari situs web ada di bawah ini.
Membaca konten file mp3 yang berisi info tag v1 atau v2:
import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
print tag.getAlbum()
print tag.getTitle()
Baca file mp3 (panjang trek, kecepatan bit, dll.) Dan akses tagnya:
if eyeD3.isMp3File(f):
audioFile = eyeD3.Mp3AudioFile(f)
tag = audioFile.getTag()
Versi tag tertentu dapat dipilih:
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.
Atau Anda dapat melakukan iterasi pada frame mentah:
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
for frame in tag.frames:
print frame
Setelah tag ditautkan ke file, tag dapat dimodifikasi dan disimpan:
tag.setArtist(u"Cro-Mags")
tag.setAlbum(u"Age of Quarrel")
tag.update()
Jika tag yang ditautkan adalah v2 dan Anda ingin menyimpannya sebagai v1:
tag.update(eyeD3.ID3_V1_1)
Baca di tag dan hapus dari file:
tag.link("/some/file.mp3")
tag.remove()
tag.update()
Tambahkan tag baru:
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
(huruf kecil d).
Saya telah menggunakan mutagen untuk mengedit tag di file media sebelumnya. Hal yang baik tentang mutagen adalah dapat menangani format lain, seperti mp4, FLAC dll. Saya telah menulis beberapa skrip dengan banyak keberhasilan menggunakan API ini.
TIT2
untuk mp3, title
untuk ogg, \xa9nam
untuk mp4, Title
untuk WMA dll - itu menyebalkan.
Masalahnya eyed3
adalah ia akan membuang NotImplementedError("Unable to write ID3 v2.2")
file MP3 umum.
Menurut pengalaman saya, mutagen
kelas EasyID3
bekerja dengan lebih andal. Contoh:
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()
Semua tag lainnya dapat diakses dengan cara ini dan disimpan, yang akan melayani sebagian besar tujuan. Informasi lebih lanjut dapat ditemukan di Tutorial Mutagen .
Apa yang Anda kejar adalah modul ID3 . Ini sangat sederhana dan akan memberikan apa yang Anda butuhkan. Cukup salin file ID3.py ke direktori paket situs Anda dan Anda akan dapat melakukan sesuatu seperti berikut:
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
lihat yang ini:
https://github.com/Ciantic/songdetails
Contoh penggunaan:
>>> import songdetails
>>> song = songdetails.scan("data/song.mp3")
>>> print song.duration
0:03:12
Menyimpan perubahan:
>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
Sekadar informasi tambahan untuk kalian:
lihat bagian "MP3 dan editor Metadata" di halaman PythonInMusic .
Contoh sederhana dari buku Dive Into Python berfungsi baik bagi saya, ini adalah tautan unduhan, contohnya fileinfo.py. Tidak tahu apakah itu yang terbaik, tetapi dapat melakukan pekerjaan dasar.
Seluruh buku tersedia online di sini .
Saya melihat jawaban di atas dan menemukan bahwa itu tidak baik untuk proyek saya karena masalah lisensi dengan GPL.
Dan saya menemukan ini: PyID3Lib , sementara tanggal rilis pengikatan python tertentu itu sudah tua, ia menggunakan ID3Lib , yang dengan sendirinya sudah diperbarui.
Yang perlu diperhatikan adalah keduanya LGPL , dan bagus untuk digunakan.
metode termudah adalah detail lagu ..
untuk membaca data
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
print song.artist
demikian pula untuk edit
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
song.artist = u"The Great Blah"
song.save()
Jangan lupa untuk menambahkan u sebelum nama sampai Anda tahu bahasa cina.
u dapat membaca dan mengedit secara massal menggunakan modul python glob
ex.
import glob
songs = glob.glob('*') // script should be in directory of songs.
for song in songs:
// do the above work.
Setelah mencoba pip install
rute sederhana untuk modul eyeD3, pytaglib, dan ID3 yang direkomendasikan di sini, saya menemukan opsi keempat ini adalah satu-satunya yang berfungsi. Sisanya memiliki kesalahan impor dengan dependensi yang hilang di C ++ atau sesuatu yang ajaib atau pustaka lain yang pip
tidak terjawab. Jadi gunakan yang ini untuk membaca dasar tag ID3 (semua versi):
https://pypi.python.org/pypi/tinytag/0.18.0
from tinytag import TinyTag
tag = TinyTag.get('/some/music.mp3')
Daftar atribut yang mungkin Anda dapatkan dengan 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
Itu kecil dan mandiri, seperti yang diiklankan.
Jawaban pertama yang menggunakan eyed3 sudah usang, jadi berikut adalah versi terbarunya.
Membaca tag dari file 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)
Contoh dari situs web untuk mengubah tag:
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
Masalah yang saya temui saat mencoba menggunakan eyed3 untuk pertama kalinya berkaitan dengan kesalahan impor libmagic meskipun telah diinstal. Untuk mengatasinya, instal magic-bin whl dari sini
Saya akan menyarankan mp3-tagger . Hal terbaik tentang ini adalah didistribusikan di bawah Lisensi MIT dan mendukung semua atribut yang diperlukan.
- artist;
- album;
- song;
- track;
- comment;
- year;
- genre;
- band;
- composer;
- copyright;
- url;
- publisher.
Contoh:
from mp3_tagger import MP3File
# Create MP3File instance.
mp3 = MP3File('File_Name.mp3')
# Get all tags.
tags = mp3.get_tags()
print(tags)
Ini mendukung set, dapatkan, perbarui dan hapus atribut file mp3.
Ini dapat bergantung pada apa yang ingin Anda lakukan selain membaca metadata. Jika hanya bitrate / nama dll yang Anda butuhkan, dan tidak ada yang lain, sesuatu yang ringan mungkin yang terbaik.
Jika Anda memanipulasi mp3 sebelumnya, PyMedia mungkin cocok.
Ada cukup banyak, apapun yang Anda dapatkan, pastikan dan ujilah di banyak contoh media. Ada beberapa versi khusus dari tag ID3, jadi pastikan itu tidak terlalu ketinggalan zaman.
Secara pribadi saya telah menggunakan kelas MP3Info kecil ini dengan keberuntungan. Ini sudah cukup tua.
Setelah beberapa penelitian awal, saya pikir detail lagu mungkin sesuai dengan kasus penggunaan saya, tetapi tidak menangani file .m4b. Mutagen melakukannya. Perhatikan bahwa sementara beberapa (cukup) mengambil masalah dengan kemunculan Mutagen dari kunci format-asli, yang bervariasi dari format ke format (TIT2 untuk mp3, judul untuk ogg, \ xa9nam untuk mp4, Judul untuk WMA dll.), Mutagen.File ( ) memiliki parameter (baru?) easy = True yang menyediakan tag EasyMP3 / EasyID3, yang memiliki sekumpulan kunci yang konsisten, meskipun terbatas. Sejauh ini saya hanya melakukan pengujian terbatas, tetapi kunci umum, seperti album, artis, albumartist, genre, tracknumber, discnumber, dll. Semuanya ada dan identik untuk file .mb4 dan .mp3 saat menggunakan easy = True, membuatnya sangat nyaman untuk tujuan saya.
menggunakan 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
Saya menggunakan tinytag 1.3.1 karena
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>