3

他の 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日間、何が間違っているのかを理解しようとしています。誰かが私が問題を見つけるのを手伝ってくれるなら、私はあなたの借金になります.

ありがとう!

4

1 に答える 1