带有 Python3 和 Mutagen 的 iTunes MP4 标签/元数据

iTunes MP4 Tags / Metadata with Python3 and Mutagen

我目前正在使用 Python 的 Mutagen 模块来为 iTunes 准备视频文件的 MP4 标签。它工作正常,但我错过了一个非常重要的标签,它叫做 "stik",代表 iTunes 媒体类型。

这是我当前的代码:

mp4_video_tags = MP4(mp4_file)

mp4_video_tags['\xa9nam'] = 'Video Name'
mp4_video_tags['\xa9alb'] = 'DVD-Name'
mp4_video_tags['\xa9gen'] = 'Video-Training'
mp4_video_tags['\xa9day'] = '2015'
mp4_video_tags['\xa9ART'] = 'Company'
mp4_video_tags['aART'] = 'Company'
mp4_video_tags['\xa9wrt'] = 'Company'
mp4_video_tags['cprt'] = 'Copyright (c) Company'
mp4_video_tags['desc'] = 'description'
mp4_video_tags['tvsh'] = 'DVD-Name'
mp4_video_tags['trkn'] = [(1, 18)]
mp4_video_tags['disk'] = [(1, 1)]
mp4_video_tags['stik'] = 10

mp4_video_tags.save()

该代码运行良好,但在 "mp4_video_tags['stik'] = 10" 处崩溃,因为该标记的值不能是整数。但是根据这个列表:https://code.google.com/p/mp4v2/wiki/iTunesMetadata#Media_Type_%28stik%29

对于电视节目,它必须是值为 10 的整数。

我注意到 Mutagen 在他们的标签列表/文档中没有显示 "stik" 标签,可能默认不支持它:https://mutagen.readthedocs.org/en/latest/api/mp4.html

任何人都可以向我解释如何将 MP4 标签 "stik" 设置为 10 以用于带有 Mutagen 的电视节目吗?

如果不能是整数,你试过带引号的'10'吗?

如果这不起作用,值得注意的是 python 的整数对象绝对是疯子,永远不会翻滚...它不是您的 运行 的 8 位整数.

您可以使用 ctypes 转换为 8 位整数,如此处所示 Convert a string to an 8-bit signed integer in python

from ctypes import cast, pointer, POINTER, c_char, c_int
def convert(c):
    return cast(pointer(c_char(c)), POINTER(c_int)).contents.value

我知道我来晚了一点,但我有一份礼物:

mp4_tags['stik'] = str(unichr(10))

我没试过,不过我想你也可以用mp4_tags['stik'] = '\n',换行符用二进制数10表示。

问题是 iTunes 将该字段读取为二进制数,您可以或多或少地保存任何您想要的内容。例如,我尝试设置 mp4_tags['tvsn'] = '2' 并将文件加载到 iTunes 中,它显示为第 50 季,如果您查看 ASCII table 字符 2 的表示方式。

似乎是库中的错误。

我在 python3 中玩得很开心,建议的答案似乎不起作用。但是,以下内容:

mp4_tags["stik"] = [10]

我在使用 exiftool 进行设置后进行了检查,它似乎将媒体类型元数据读取为预期类型。