python – Hachoir – 从组中检索数据
作者:互联网
尝试使用Hachoir从视频文件中检索元数据.工作得相当好,除非使用’get’或类似的方法来返回宽度和高度值.
我以为它会是:
metadata.get('width')
但是这会抛出一个错误(对象没有’width’属性).
当我运行以下内容时:
for data in sorted(metadata):
if len(data.values ) > 0:
print data.key, data.values[0].value
返回的所有内容都是来自“Common”组的信息.
当我使用:
metadata.exportPlaintext
…返回来自“公共”,“视频流”和“音频流”的信息.我可以简单地解析生成的“文本”项并去掉高度和宽度值,但我宁愿尝试使用metadata.get(‘width’)或类似方法正确地执行它.
看一下源代码,我想我可以使用以下代码:
for key, metadata in metadata.__groups.iteritems():
迭代元数据中的._groups,但它抛出一个“’AsfMetadata’对象没有属性’_groups’ – 我敢肯定不应该这样,因为我认为’AsfMetadata’是MultipleMetadata的子类( )确实有这样一个变量.
可能缺少一些非常明显的东西.
解决方法:
对于WMV文件来说,这似乎不那么简单.我已将此类视频的元数据转换为defaultdict,现在获取图像宽度更为简单:
from collections import defaultdict
from pprint import pprint
from hachoir_metadata import metadata
from hachoir_core.cmd_line import unicodeFilename
from hachoir_parser import createParser
# using this example http://archive.org/details/WorkToFishtestwmv
filename = './test_wmv.wmv'
filename, realname = unicodeFilename(filename), filename
parser = createParser(filename)
# See what keys you can extract
for k,v in metadata.extractMetadata(parser)._Metadata__data.iteritems():
if v.values:
print v.key, v.values[0].value
# Turn the tags into a defaultdict
metalist = metadata.extractMetadata(parser).exportPlaintext()
meta = defaultdict(defaultdict)
for item in metalist:
if item.endswith(':'):
k = item[:-1]
else:
tag, value = item.split(': ')
tag = tag[2:]
meta[k][tag] = value
print meta['Video stream #1']['Image width'] # 320 pixels
标签:python,metadata,video-processing,hachoir-parser 来源: https://codeday.me/bug/20190613/1230367.html