Python 使用诱变剂为MP4文件设置自定义标记时出现问题

Python 使用诱变剂为MP4文件设置自定义标记时出现问题,python,python-3.x,mutagen,Python,Python 3.x,Mutagen,我正在尝试使用Python和诱变剂在MP4文件上设置自定义ID3标记。到目前为止,我已经能够创建自定义标记的MP3文件没有任何问题,但MP4似乎是另一个问题 我收到的最初错误消息是一个TypeError,指出“无法将str转换为字节”。因此,我没有向程序输入字符串,而是将其编码为UTF-8字节数组,但它给出了以下错误消息: TypeError: object of type 'int' has no len() 这种错误实际上发生在诱变剂本身 代码如下: from mutagen.id3 im

我正在尝试使用Python和诱变剂在MP4文件上设置自定义ID3标记。到目前为止,我已经能够创建自定义标记的MP3文件没有任何问题,但MP4似乎是另一个问题

我收到的最初错误消息是一个TypeError,指出“无法将str转换为字节”。因此,我没有向程序输入字符串,而是将其编码为UTF-8字节数组,但它给出了以下错误消息:

TypeError: object of type 'int' has no len()
这种错误实际上发生在诱变剂本身

代码如下:

from mutagen.id3 import ID3
from mutagen.mp4 import MP4

def set_isbn(filename, isbn):
    if(filename.lower().endswith(".mp3")):
        tags = ID3(filename)
        tags.add(TXXX(encoding=3, desc=u'ISBN', text=str(isbn)))
        tags.save(filename)
    else:
        tags = MP4(filename)
        tags["----:TXXX:ISBN"] = bytearray(isbn, 'UTF-8')
        tags.save(filename)

诱变剂文档大部分都很好,但是当涉及到定制MP4标签时,它所说的是mean:name:key的一般设置。是否有其他人能够成功地为MP4文件实现自定义标记?

重要的事情首先:代码中唯一的问题是从
string
转换为
bytearray
。查看
诱变剂
的源代码,在专门涉及
mp4
文件类型的部分中,有一行如下所示:

    ...
    if isinstance(x, bytes):
        x = [x]
        ...
其中,
x
是您提供的值。当满足上述条件时,您给出的值将插入到具有“dunder len”方法的
列表中,因此可以是
len
函数的参数,当用作参数时,该函数将不会引发
TypeError

您只应通过将到
字节的转换替换为到
字节的转换来编辑代码,如下所示:

from mutagen.id3 import ID3
from mutagen.mp4 import MP4

def set_isbn(filename, isbn):
    if(filename.lower().endswith(".mp3")):
        tags = ID3(filename)
        tags.add(TXXX(encoding=3, desc=u'ISBN', text=str(isbn)))
        tags.save(filename)
    else:
        tags = MP4(filename)
        tags["----:TXXX:ISBN"] = bytes(isbn, 'UTF-8')
        tags.save(filename)

然后您将避免上述
类型错误
异常。

您在哪一行收到异常?这并不明显。