2

我目前正在使用 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

谁能解释我如何将带有 Mutagen 的电视节目的 MP4 标签“stik”设置为 10?

4

3 回答 3

3

我知道我参加聚会有点晚了,但我有一个礼物:

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

我还没有尝试过,但我认为您也可以使用mp4_tags['stik'] = '\n'换行符,并且换行符由二进制数 10 表示。

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

似乎是图书馆的一个错误。

于 2015-05-09T15:24:20.253 回答
0

如果它不能是整数,您是否尝试过带引号的“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
于 2015-03-30T07:24:53.243 回答
0

我在 python3 中对此很感兴趣,建议的答案似乎不起作用。但是,以下内容会:

mp4_tags["stik"] = [10]

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

于 2018-09-19T20:44:07.750 回答