mig*_*rin 9 python video exif date
我使用exifread(安装python3 -m pip install exifread)从照片中读取 EXIF 标签。同一个相机拍摄带有扩展名.MOV和Create 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 标签列表?
我稍微编辑了你自己的答案。
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