Python を使用して MP3 ID3 メタデータを取得および設定するために使用できる保守パッケージはありますか?
16 に答える
先日、 eyeD3を使って大成功でした。私が見た他のモジュールではできなかったID3タグにアートワークを追加できることがわかりました。pipを使用してインストールするか、tarをダウンロードしてpython setup.py install
、ソースフォルダーから実行する必要があります。
ウェブサイトからの関連する例を以下に示します。
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()
以前、メディア ファイルのタグを編集するためにミュータジェンを使用したことがあります。変異原の良いところは、mp4、FLAC などの他の形式を処理できることです。私はこの API を使用して多くの成功を収めたいくつかのスクリプトを作成しました。
の問題は、一般的な MP3 ファイルに対してeyed3
スローされることです。NotImplementedError("Unable to write ID3 v2.2")
私の経験では、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()
他のすべてのタグは、この方法でアクセスして保存することができ、ほとんどの目的に役立ちます。詳細については、Mutagen チュートリアルを参照してください。
あなたが求めているのはID3モジュールです。それは非常にシンプルで、必要なものを正確に提供します。ID3.py ファイルを site-packages ディレクトリにコピーするだけで、次のようなことができるようになります。
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 スタッフとメタデータ エディタ」セクションを見てください。
上記の回答を調べたところ、GPL のライセンスの問題により、私のプロジェクトには適していないことがわかりました。
そして、私はこれを見つけました:PyID3Lib、その特定のpythonバインディングのリリース日は古いですが、それ自体が最新のID3Libを使用しています。
特筆すべきは、どちらもLGPLであり、すぐに使用できることです。
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>
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 の場合は title、mp4 の場合は \xa9nam、WMA の場合は Title など)、mutagen.File( ) には (新しい?) easy=True パラメータがあり、EasyMP3/EasyID3 タグを提供します。これらのタグには、限定されているものの一貫したキー セットがあります。これまでのところ、限られたテストしか行っていませんが、アルバム、アーティスト、アルバムアーティスト、ジャンル、トラック番号、ディスク番号などの共通キーはすべて存在し、easy=True を使用すると .mb4 ファイルと .mp3 ファイルで同一です。私の目的には非常に便利です。