用python根据视频名修改视频创建时间

问题

用mylio整理照片,发现它会按照照片的拍照时间自动对照片归类。但是,有的视频的时间明显不对,一番折腾后发现问题所在


image.png

很明显,照片的创建时间和修改时间不对,对比下文件名就知道了,而mylio是按照创建时间来归类的

要是一个文件也就罢了,但是这些年实在攒了太多视频了,例如2017年视频被放到2018年的文件

image.png

还是写个脚本批量修改吧

解决过程

搜了很久,网上主要是修改访问时间atime修改时间mtime,通过os.utime(filename,(atime,mtime))方法来做,但是,没有简单的修改创建时间ctime的方法

发现了这个
https://github.com/Delgan/win32-setctime

使用pip安装后,可以使用

from win32_setctime import setctime
setctime("my_file.txt", 1561675987.509)

那串数字是epoch time,所以,需要将时间转换为epoch time,使用time.strptime()time.mktime()即可

测试下

>>> import time
>>> filename='VID_20170919_223923.mp4'
>>> pattern='VID_%Y%m%d_%H%M%S.mp4'
>>> newtime=time.strptime(filename,pattern)
>>> newtime
Out[7]: time.struct_time(tm_year=2017, tm_mon=9, tm_mday=19, tm_hour=22, tm_min=39, tm_sec=23, tm_wday=1, tm_yday=262, tm_isdst=-1)
>>> newtime_stamp=time.mktime(newtime)
>>> from win32_setctime import setctime
>>> setctime(filename, newtime_stamp)
>>> import os
>>> os.utime(filename,(newtime_stamp,newtime_stamp))

成功!

最终方案

from win32_setctime import setctime
import time
import os
filenames=os.listdir()
for filename in filenames:
    # check whether it has the form VID_....mp4
    filename=filename.strip()
    if filename.startswith('VID') and filename.endswith('.mp4'):
       print(filename)
       pattern='VID_%Y%m%d_%H%M%S.mp4'
       newtime=time.strptime(filename,pattern)
       newtime_stamp=time.mktime(newtime)
       setctime(filename,newtime_stamp)
       os.utime(filename,(newtime_stamp,newtime_stamp))
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容