如何获取 .avi 文件长度 [英] How to get .avi files length
问题描述
我试图遍历一个子文件夹目录,其中每个文件夹都包含一个 .avi 文件,我想以秒为单位检索其长度.
I am trying to loop over a directory of sub folders where every folder contains one .avi file that i want to retrieve its length in seconds.
我找到了 PyMedia http://pymedia.org/
并且我知道它可以帮助我实现这一目标,但我在文档中找不到任何关于 avi 持续时间/长度的信息.
I've found PyMedia http://pymedia.org/
and i understand it could possibly help me achieve this but i cannot find anything about avi duration / length in the documentation.
我怎么能做到这一点?另外,如果有某种不同的图书馆,我也想知道.
How would i be able to do that? also, if there is a different library of some sort i'd like to know aswel.
添加了我的最终解决方案,感谢 J.F. Sebastian
Added my final solution that works thanks to J.F. Sebastian
import sys
import glob
import os
from hachoir_core.cmd_line import unicodeFilename
from hachoir_core.i18n import getTerminalCharset
from hachoir_metadata import extractMetadata
from hachoir_parser import createParser
path = "z:\*"
for fpath in glob.glob(os.path.join(path, '*avi')):
filename = fpath
filename, real_filename = unicodeFilename(filename), filename
parser = createParser(filename, real_filename=real_filename)
metadata = extractMetadata(parser)
print fpath
print("Duration (hh:mm:ss.f): %s" % metadata.get('duration'))
print '\n'
推荐答案
您可以使用 hachoir-metadata
从文件中提取 avi 持续时间:
You could use hachoir-metadata
to extract avi duration from a file:
#!/usr/bin/env python
import sys
# $ pip install hachoir-{core,parser,metadata}
from hachoir_core.cmd_line import unicodeFilename
from hachoir_core.i18n import getTerminalCharset
from hachoir_metadata import extractMetadata
from hachoir_parser import createParser
filename = sys.argv[1]
charset = getTerminalCharset()
filename, real_filename = unicodeFilename(filename, charset), filename
parser = createParser(filename, real_filename=real_filename)
metadata = extractMetadata(parser)
print("Duration (hh:mm:ss.f): %s" % metadata.get('duration'))
示例:
$ get-avi-duration.py test.avi
Duration (hh:mm:ss.f): 0:47:03.360000
这里是 ffmpeg 的比较输出:
Here's ffmpeg's output for comparison:
$ ffmpeg -i test.avi |& grep -i duration
Duration: 00:47:03.36, start: 0.000000, bitrate: 1038 kb/s
打印目录树中所有 avi 文件的信息:
To print info about all avi files in a directory tree:
#!/usr/bin/env python
import os
import sys
from hachoir_metadata import extractMetadata
from hachoir_parser import createParser
def getinfo(rootdir, extensions=(".avi", ".mp4")):
if not isinstance(rootdir, unicode):
rootdir = rootdir.decode(sys.getfilesystemencoding())
for dirpath, dirs, files in os.walk(rootdir):
dirs.sort() # traverse directories in sorted order
files.sort()
for filename in files:
if filename.endswith(extensions):
path = os.path.join(dirpath, filename)
yield path, extractMetadata(createParser(path))
for path, metadata in getinfo(u"z:\\"):
if metadata.has('duration'):
print(path)
print(" Duration (hh:mm:ss.f): %s" % metadata.get('duration'))
这篇关于如何获取 .avi 文件长度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!