关于使用ExifTool解析iPhone 15拍摄视频的QuickTime/TrackCreateDate时区及文件命名的技术咨询
嘿,我来帮你捋清楚这个问题——核心就是搞懂iPhone拍摄视频的QuickTime时间戳时区逻辑,还有怎么用ExifTool给跨设备的媒体文件做统一命名对吧?
先拆解下你遇到的情况:你在日本用iPhone 15拍的视频,Mac的GetInfo显示当地时间是2024年3月5日18:42,这个应该是准确的拍摄时间(JST,UTC+9)。但用ExifTool加了-api quicktimeutc参数后,拿到的FileModifyDate是2024:03:05 18:42:57-05:00,这个-05:00明显是你当前所在的时区(比如美国东部时间),而且这个字段是文件系统的修改时间,不是视频真正的拍摄时间,完全不能用来做命名依据,这点得先明确。
关键知识点:iPhone视频的时间戳存储
iPhone拍摄的QuickTime视频里,真正的拍摄时间存在MediaCreateDate和TrackCreateDate这两个元数据字段里,而且默认是拍摄时的当地时区时间(也就是你当时的JST时间)。但ExifTool有个坑:默认情况下,它会把QuickTime的时间字段当作UTC时间来解析,而你加的-api quicktimeutc参数是强制让ExifTool把这些时间当成UTC,这就会导致时区转换混乱,完全不是你要的结果。
正确获取拍摄时间的步骤
先验证原始拍摄时间:
运行这条命令,直接提取核心的拍摄时间字段,别加-api quicktimeutc:exiftool -MediaCreateDate -TrackCreateDate '/pathToFile.mov'正常情况下,输出应该是JST的
2024:03:05 18:42:xx,和Mac GetInfo显示的一致。用ExifTool批量重命名文件:
既然你有不同设备的媒体(iPhone、360相机、无人机),最好统一命名格式,比如包含UTC时间+设备型号,这样跨时区跨设备的文件排序完全不会乱。给你两个实用命令:如果想保留拍摄当地时间(比如JST),同时标注设备:
exiftool '-FileName<${MediaCreateDate}_${Model}.%e' -d '%Y%m%d-%H%M%S-JST' '/pathToYourFiles/*.mov'解释:
${MediaCreateDate}提取拍摄时间,${Model}会自动填充设备型号(比如iPhone 15),-d指定日期格式,最终文件名会是类似20240305-184200-iPhone_15.mov的格式。如果想统一用UTC时间(更适合跨时区的媒体集合):
因为JST是UTC+9,所以把拍摄时间减9小时转成UTC,命令如下:exiftool '-FileName<${MediaCreateDate#;ShiftTime("-9:00")}_${Model}.%e' -d '%Y%m%d-%H%M%S-UTC' '/pathToYourFiles/*.mov'这样不管是日本拍的iPhone视频,还是其他时区拍的无人机/360相机素材,都能按UTC时间统一排序,逻辑清晰。
额外提醒
从Photos导出文件时,一定要勾选保留原始元数据,不然Photos可能会修改时间戳或者丢失部分字段,导致ExifTool提取的信息不准。如果可以,直接从iPhone导出原始视频文件会更稳妥。
备注:内容来源于stack exchange,提问作者Dennis




