使用Python3和Mutagen的iTunes MP4标签/元数据

时间:2015-03-30 07:21:33

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

我目前正在使用Mutagen模块为Python准备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"与Mutagen合作的电视节目10?

3 个答案:

答案 0 :(得分:3)

我知道我参加派对有点晚了,但我有一份礼物:

<div class="container">
    <div class="row">
        <div class="col-md-3">
            <div class="panel panel-danger">
                <div class="panel-body">
                    <ul class="nav nav-pills nav-stacked">
                        <li role="presentation" class="active"><a href="<?php echo base_url(); ?>admin/insertMerk">Insert Merk</a></li>
                    </ul>
                </div>
            </div>
        </div>

        <div class="col-md-9">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <strong>Merk</strong>
                </div>
                <div class="panel-body">
                    <div class="row" id="tabelBarang">
                        <div class="col-md-1 colBarang">
                            <strong>No</strong>
                        </div>
                        <div class="col-md-7 colBarang">
                            <strong>Merk</strong>
                        </div>
                        <div class="col-md-4 colBarang">
                            <strong>Action</strong>
                        </div>
                    </div>

                    <?php 
                        $angka = 0;
                        foreach ($results as $row){
                            $id = $row->id;
                            $merk = $row->merk;
                    ?>


                    <div class="row" id="tabelBarang">
                        <div class="col-md-1 colBarang">
                            <?php echo ++$angka; ?>
                        </div>
                        <div class="col-md-7 colBarang">
                            <?php echo $merk; ?>
                        </div>
                        <div class="col-md-2 colBarang">
                            <button type="button" class="btn btn-info btn-xs" aria-label="Left Align">
                                <a href="<?php echo base_url(); ?>admin/editMerk/<?php echo $id; ?>">Edit</a>                         
                            </button>
                        </div>
                        <div class="col-md-2 colBarang">
                            <button type="button" class="btn btn-danger btn-xs" aria-label="Left Align">
                                <a href="<?php echo base_url(); ?>admin/deleteMerk/<?php echo $id; ?>">Delete</a>                         
                            </button>
                        </div>
                    </div>

                    <?php 
                        }
                    ?>
                    <?php echo $links; ?>
                </div>


            </div>
        </div>
    </div>
</div>

我没有尝试过,但我认为您也可以使用mp4_tags['stik'] = str(unichr(10)) 以及换行符由二进制数字10表示。

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

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

答案 1 :(得分:0)

如果它不能是一个整数你试过&#39; 10&#39;用引号?

如果这不起作用,值得注意的是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

答案 2 :(得分:0)

我一直在python3中玩过这个游戏,其中建议的答案似乎不起作用。但是,可以做到以下几点:

mp4_tags["stik"] = [10]

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