【问题标题】:iTunes MP4 Tags / Metadata with Python3 and Mutagen带有 Python3 和 Mutagen 的 iTunes MP4 标签/元数据
【发布时间】:2015-03-30 07:21:33
【问题描述】:

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

【问题讨论】:

    标签: python python-3.x itunes mp4 mutagen


    【解决方案1】:

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

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

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

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

    似乎是库中的错误。

    【讨论】:

    • 谢谢,我可以确认它与您的解决方案完美搭配。
    【解决方案2】:

    如果它不能是整数,您是否尝试过带引号的“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
    

    【讨论】:

    • 我已经按照您的建议尝试过,但它会引发与之前相同的错误: Traceback (last recent call last): File "/Library/Frameworks/Python.framework/Versions/3.4/lib /python3.4/site-packages/mutagen/mp4/__init__.py”,第 359 行,保存 values.append(render_func(self, key, value)) 文件“/Library/Frameworks/Python.framework/Versions/3.4 /lib/python3.4/site-packages/mutagen/mp4/__init__.py",第 725 行,在 __render_text for v in value: TypeError: 'int' object is not iterable
    【解决方案3】:

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

    mp4_tags["stik"] = [10]

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 2014-01-13
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      相关资源
      最近更新 更多