回答:
先日eyeD3を使って大成功しました。私が見た他のモジュールではできなかったアートワークをID3タグに追加できることがわかりました。pipを使用してインストールするか、tarをダウンロードしてpython setup.py install
、ソースフォルダーから実行する必要があります。
Webサイトからの関連する例を以下に示します。
v1またはv2のいずれかのタグ情報を含むmp3ファイルの内容を読み取る:
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()
import eyed3
(小文字のd)を使用します。
以前にメディアファイルのタグを編集するためにmutagenを使用しました。mutagenの良いところは、mp4、FLACなどの他の形式を処理できることです。このAPIを使用して、多くの成功を収めたスクリプトをいくつか作成しました。
TIT2
mp3 title
用、ogg \xa9nam
用、mp4 Title
用、WMA用など。
の問題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()
他のすべてのタグは、この方法でアクセスして保存でき、ほとんどの目的に役立ちます。詳細については、変異原チュートリアルをご覧ください。
あなたが後にしていることである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
これをチェックしてください:
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()
皆さんへの追加情報:
PythonInMusicのページの「MP3スタッフとメタデータエディター」のセクションをご覧ください。
『Dive Into Python』という本の簡単な例は問題なく動作します。これはダウンロードリンクです。例はfileinfo.pyです。それが最高かどうかはわかりませんが、基本的な仕事はできます。
上記の回答を調べたところ、GPLのライセンス問題のため、これらの回答は私のプロジェクトには適していません。
そして、私が見つけたこの:PyID3Libは、その特定ながら、pythonのバインディングの発売日が古い、それが使用するID3Lib自体が最新の状態です。
注目に値するのは、どちらもLGPLであり、問題なく進むことです。
最も簡単な方法は、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()
中国語がわかるまで、名前の前にuを追加することを忘れないでください。
uはpython globモジュールを使用して一括で読み取りおよび編集できます
例。
import glob
songs = glob.glob('*') // script should be in directory of songs.
for song in songs:
// do the above work.
pip install
ここで推奨されているeyeD3、pytaglib、およびID3モジュールの単純なルートを試した後、この4番目のオプションしか機能しないことがわかりました。残りの部分には、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を使用する最初の回答は古くなっているので、こちらが更新版です。
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)
タグを変更するWebサイトの例:
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のインポートエラーに関係していました。これを修正するには、ここからmagic-bin whlをインストールします
mp3-taggerをお勧めします。これについての最もよい事はそれがMITライセンスの下で配布されて、すべての必要な属性をサポートすることです。
- 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)
MP3ファイルの属性の設定、取得、更新、削除をサポートしています。
メタデータの読み取りに加えて、何をしたいかに正確に依存する可能性があります。それが単に必要なビットレート/名前などであり、他に何もない場合は、軽量のものがおそらく最良です。
あなたが過去のmp3を操作しているなら、そのPyMediaは適切かもしれません。
入手するものが何であれ、かなりの数のサンプルメディアで確認してテストしてください。特にID3タグにはいくつかの異なるバージョンがあるため、古すぎないことを確認してください。
個人的に私はこの小さなMP3Infoクラスを運で使用しました。それはかなり古いです。
最初の調査の後、songdetailsは私のユースケースに合うかもしれないと思いましたが、それは.m4bファイルを処理しません。変異原はそうです。Mutagenのフォーマットネイティブキーの表示に(合理的に)問題を抱えている人もいますが、フォーマットごとに異なります(mp3の場合はTIT2、oggの場合はタイトル、mp4の場合は\ xa9nam、WMAの場合はタイトル)、mutagen.File( )EasyMP3 / EasyID3タグを提供する(新しい?)easy = Trueパラメーターがあり、これには一貫性のある、ただし限定されたキーのセットがあります。私はこれまで限られたテストしか行っていませんが、アルバム、アーティスト、アルバムアーティスト、ジャンル、トラック番号、ディスク番号などの一般的なキーはすべて存在し、easy = Trueを使用する場合、.mb4ファイルと.mp3ファイルで同じです。私の目的のために非常に便利です。
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
私はtinytag 1.3.1を使用しました。
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>