如何使用Python 3.7提取视频文件的元数据?

时间:2018-07-14 18:44:35

标签: python python-3.x video metadata

我正在寻找一个与Python 3.7兼容的简单库,该库可以提取视频文件的元数据,尤其是捕获/记录日期时间;拍摄视频的日期和时间。我主要希望在.mov文件上执行此操作。据我所知,hachoir-metadata没有Python库; enzyme仅适用于.mkv文件,尽管在说明中没有明确说明。我想以字符串形式检索记录/捕获数据时间的原因是我想将其放入文件名中。

在将此问题标记为重复之前:类似的问题未回答或已过时。坦白地说,为什么在Python脚本中没有正确的方法来检索视频元数据,我感到困惑。

2 个答案:

答案 0 :(得分:3)

FFMPEG是适合此的库。

安装:pip3安装ffmpeg-python

使用方法:

import ffmpeg
vid = ffmpeg.probe(your_video_address)
print(vid['streams'])

答案 1 :(得分:0)

我还没有找到一个不错的Python库,但是将hachoirsubprocess一起使用是一种肮脏的解决方法。您可以从pip上获取库本身,有关Python 3的说明在这里:https://hachoir.readthedocs.io/en/latest/install.html

def get_media_properties(filename):

    result = subprocess.Popen(['hachoir-metadata', filename, '--raw', '--level=3'],
        stdout = subprocess.PIPE, stderr = subprocess.STDOUT)

    results = result.stdout.read().decode('utf-8').split('\r\n')

    properties = {}

    for item in results:

        if item.startswith('- duration: '):
            duration = item.lstrip('- duration: ')
            if '.' in duration:
                t = datetime.datetime.strptime(item.lstrip('- duration: '), '%H:%M:%S.%f')
            else:
                t = datetime.datetime.strptime(item.lstrip('- duration: '), '%H:%M:%S')
            seconds = (t.microsecond / 1e6) + t.second + (t.minute * 60) + (t.hour * 3600)
            properties['duration'] = round(seconds)

        if item.startswith('- width: '):
            properties['width'] = int(item.lstrip('- width: '))

        if item.startswith('- height: '):
            properties['height'] = int(item.lstrip('- height: '))

    return properties

hachoir也支持其他属性,但我只在寻找这三个属性。对于我测试过的mov文件,它似乎还会打印出创建日期和修改日期。我使用的优先级为3,因此您可以尝试使用它来查看更多内容。