如何获取 .avi 文件长度 [英] How to get .avi files length

查看:57
本文介绍了如何获取 .avi 文件长度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图遍历一个子文件夹目录,其中每个文件夹都包含一个 .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'))

它使用纯Python RIFF解析器avi 文件.

示例:

$ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆