如何用Python读取电影的exif数据?

mig*_*rin 9 python video exif date

我使用exifread(安装python3 -m pip install exifread)从照片中读取 EXIF 标签。同一个相机拍摄带有扩展名.MOVCreate DateEXIF 字段的视频,我可以使用它来查看exiftool(安装brew install exiftool):

$ exiftool DSC_0002.MOV | grep 日期
文件修改日期/时间:2020:02:20 18:13:14+00:00
文件访问日期/时间:2020:03:07 08:11:57+00:00
文件索引节点更改日期/时间:2020:03:04 11:24:51+00:00
修改日期 : 2020:02:20 18:13:21
曲目创建日期 : 2020:02:20 18:13:21
曲目修改日期 : 2020:02:20 18:13:21
媒体创建日期 : 2020:02:20 18:13:21
媒体修改日期 : 2020:02:20 18:13:21
创建日期 : 2020:02:20 18:13:15
原始日期/时间 : 2020:02:20 18:13:15
日期显示格式:年/月/日

我想exifread是为照片而构建的,因为下面的代码显示了该视频的空标签列表:

$ exiftool DSC_0002.MOV | grep Date
File Modification Date/Time     : 2020:02:20 18:13:14+00:00
File Access Date/Time           : 2020:03:07 08:11:57+00:00
File Inode Change Date/Time     : 2020:03:04 11:24:51+00:00
Modify Date                     : 2020:02:20 18:13:21
Track Create Date               : 2020:02:20 18:13:21
Track Modify Date               : 2020:02:20 18:13:21
Media Create Date               : 2020:02:20 18:13:21
Media Modify Date               : 2020:02:20 18:13:21
Create Date                     : 2020:02:20 18:13:15
Date/Time Original              : 2020:02:20 18:13:15
Date Display Format             : Y/M/D

一种解决方案是进行子进程调用exiftool并解析结果:

import exifread

f = open("/path/to/file", "rb")
tags = exifread.process_file(f)
print(tags)
Run Code Online (Sandbox Code Playgroud)

如何在不调用子进程的情况下访问 EXIF 标签列表?

VdG*_*dGR 0

我稍微编辑了你自己的答案。

def get_exif_creation_dates_video(path):
    EXIFTOOL_DATE_TAG_VIDEOS = "Create Date"
    EXIF_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
    absolute_path = os.path.join( os.getcwd(), path )

    process = subprocess.Popen(["exiftool", absolute_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = process.communicate()
    lines = out.decode("utf-8").split("\n")
    for l in lines:
        if EXIFTOOL_DATE_TAG_VIDEOS in str(l):
                datetime_str = str(l.split(" : ")[1].strip())
                dt = datetime.strptime(datetime_str, EXIF_DATE_FORMAT)
                print(dt) #you will get 3 dates: Create Date, Track Create Date and Media Create Date 
Run Code Online (Sandbox Code Playgroud)

这适用于 Python 3.9.7