我正在用Python编写一个Windows应用程序,它必须从一个视频文件中读取元数据。
我开始用Python 3编写应用程序,但找不到合适的模块来读取视频文件中的元数据。那时候我用3to2把整个项目移到Python 2,这样我就可以安装Hachoir-Metadata,这在网络上广受好评,使用pip install hachoir-core
、pip install hachoir-parser
和pip install hachoir-metadata
我使用了以下代码:
from hachoir_core.error import HachoirError
from hachoir_core.cmd_line import unicodeFilename
from hachoir_parser import createParser
from hachoir_core.tools import makePrintable
from hachoir_metadata import extractMetadata
from hachoir_core.i18n import getTerminalCharset
# Get metadata for video file
def metadata_for(filename):
filename, realname = unicodeFilename(filename), filename
parser = createParser(filename, realname)
if not parser:
print "Unable to parse file"
exit(1)
try:
metadata = extractMetadata(parser)
except HachoirError, err:
print "Metadata extraction error: %s" % unicode(err)
metadata = None
if not metadata:
print "Unable to extract metadata"
exit(1)
text = metadata.exportPlaintext()
charset = getTerminalCharset()
for line in text:
print makePrintable(line, charset)
return metadata
pathname = c:/video.mp4
meta = metadata_for(pathname)
print meta
这将返回以下元数据:
这很好,除了我还需要知道每秒帧数(FPS)。。对于.AVI文件,Hachoir元数据确实会显示FPS,您可以从该测试输出中看到:
是的,FPS标记设置在.MP4文件(100fps)上。
是否有方法从.MP4文件中提取FPS?最好包括宽度(px)、高度(px)、持续时间和创建时间。
提前感谢您的帮助!
好吧,我设法提取了我需要的所有数据和更多!This answer on Stack Overflow让我想到尝试MediaInfo来提取元数据。
为此,我再次切换回Python 3。我还必须将
MediaInfoDLL3.py
中的第22行改为MediaInfoDLL_Handler = WinDLL("C:\Program Files (x86)\MediaInfo\MediaInfo_i386.dll")
这是我使用的代码:
结果是:
希望这能帮助别人!
这与你处理问题的方式完全不同。我只想得到一个mp4视频的fps,我是通过openCV得到的。这不是一个答案,但我认为这对某人是有用的。
您也可以用同样的方法获取其他元数据。例如
此网站将帮助您使用关键字:http://docs.opencv.org/3.1.0/dd/de7/group__videoio.html
相关问题 更多 >
编程相关推荐