他の StackOverflow の質問とミュータジェンのドキュメントからの複数の提案に従って、MP3 ファイルと MP4 ファイルの両方ですべての ID3 タグを取得および設定するコードを思いつくことができました。私が抱えている問題は、M4B ファイルのカバー アートを設定することです。
この回答でレイアウトされているのとまったく同じようにコードを再現しました。
Mutagen を使用して MP4 ファイルにアルバム カバーを埋め込む
しかし、コードを実行しようとすると、まだエラーが発生します。「albumart」値だけでコードを実行すると、次のエラーが表示されます。
MP4file.tags['covr'] = albumart
例外が発生しました: TypeError は int をバイトに連結できません
ただし、前述の StackOverflow の質問に示されているように、albummart 変数を角かっこで囲むと、次の出力が得られます。
MP4file.tags['covr'] = [albumart]
例外が発生しました: struct.error 必要な引数は整数ではありません
これが関数の全体です。MP3 セクションは問題なく動作します。
from mutagen.mp3 import MP3
from mutagen.mp4 import MP4, MP4Cover
def set_cover(filename, cover):
r = requests.get(cover)
with open('C:/temp/cover.jpg', 'wb') as q:
q.write(r.content)
if(filename.endswith(".mp3")):
MP3file = MP3(filename, ID3=ID3)
if cover.endswith('.jpg') or cover.endswith('.jpeg'):
mime = 'image/jpg'
else:
mime = 'image/png'
with open('C:/temp/cover.jpg', 'rb') as albumart:
MP3file.tags.add(APIC(encoding=3, mime=mime, type=3, desc=u'Cover', data=albumart.read()))
MP3file.save(filename)
else:
MP4file = MP4(filename)
if cover.endswith('.jpg') or cover.endswith('.jpeg'):
cover_format = 'MP4Cover.FORMAT_JPEG'
else:
cover_format = 'MP4Cover.FORMAT_PNG'
with open('C:/temp/cover.jpg', 'rb') as f:
albumart = MP4Cover(f.read(), imageformat=cover_format)
MP4file.tags['covr'] = [albumart]
私は今、2日間、何が間違っているのかを理解しようとしています。誰かが私が問題を見つけるのを手伝ってくれるなら、私はあなたの借金になります.
ありがとう!