2015-03-30 2 views
2

Я в настоящее время использую модуль Mutagen для Python для подготовки тегов MP4 видеофайла для iTunes. Он отлично работает, но я пропускаю один действительно важный тег, он называется «stik» и обозначает тип медиа iTunes.iTunes MP4 Теги/Метаданные с Python3 и Mutagen

Это мой текущий код:

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 [„стик“] = 10», так как значение этого тега не может быть целым числом , Но в соответствии с этим перечнем: https://code.google.com/p/mp4v2/wiki/iTunesMetadata#Media_Type_%28stik%29

оно должно быть целым числом, равным 10 для ТВ-шоу.

Я заметил, что Mutagen не показывает «стик» тег в их список тегов/документы, может быть, это не поддерживается по умолчанию: https://mutagen.readthedocs.org/en/latest/api/mp4.html

Может кто-нибудь объяснить мне, как я могу установить MP4 Tag «стик «до 10 для ТВ-шоу с Мутагеном?

ответ

3

Я знаю, что я немного опоздал на вечеринку, но у меня есть дар:

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

Я не пробовал, но думаю, вы также можете использовать mp4_tags['stik'] = '\n', а символ новой строки представлен двоичным номером 10.

T проблема заключается в том, что iTunes считывает поле как двоичное число, вы можете сохранить больше или меньше всего, что захотите. например, я попытался установить mp4_tags['tvsn'] = '2', и я загрузил файл в iTunes, он был показан как сезон 50, который, если вы посмотрите на таблицу ASCII, представляет собой представление символа 2.

Кажется, это ошибка в библиотеке.

+0

Спасибо, я могу подтвердить, что он отлично работает с вашим решением. –

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 
+0

Я пробовал это с вашим предложением, но он бросает ту же ошибку, что и раньше: Traceback (последний последний звонок): Файл «/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4 /site-packages/mutagen/mp4/__init__.py ", строка 359, в save 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 для v в значении: ТипError: объект 'int' не повторяется –