我正在用Python编写一个 Windows 应用程序,它必须从.MP4视频文件中读取元数据。
我开始用 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
这返回了以下元数据:
- 持续时间:37 秒 940 毫秒
- 图像宽度:1280 像素
- 图像高度:960 像素
- 创建日期:2014-12-13 19:27:36
- 最后修改:2014-12-13 19:27:36
- 评论:播放速度:100.0%
- 评论:用户量:100.0%
- MIME 类型:视频/快速时间
- 字节序:大字节序
这很好,除了我真的需要知道每秒帧数 (FPS)。对于 .AVI 文件,Hachoir-Metadata 确实显示了 FPS,正如您从这个测试输出中看到的那样:
- 持续时间:6 秒 66 毫秒
- 图像宽度:256 像素
- 图像高度:240 像素
- 帧率:30.0 fps
- 比特率:884.4 Kbit/sec
- 评论:有音频/视频索引(2920 字节)
- MIME 类型:视频/x-msvideo
- 字节序:小字节序
是的,FPS 标签设置在 .MP4 文件 (100fps) 上。
有没有办法从 .MP4 文件中提取 FPS?最好还包括宽度(px)、高度(px)、持续时间和创建时间。
提前感谢您的帮助!