#!/usr/bin/env python3 # @author 轩辕龙儿 # @date 2023/10/23 # @file renamePhotoBatch.py import os import os.path import time import exifread from moviepy.editor import VideoFileClip # 获取照片的拍摄时间 def get_photo_taken_time(image_path): with open(image_path, 'rb') as f: tags = exifread.process_file(f) if 'EXIF DateTimeOriginal' in tags: taken_time = tags['EXIF DateTimeOriginal'] return taken_time else: return None def get_photo_update_time(image_path): with open(image_path, 'rb') as f: timestamp = time.strptime(time.ctime(os.stat(image_path).st_mtime),'%a %b %d %H:%M:%S %Y') return f"{timestamp.tm_year}{timestamp.tm_mon}{timestamp.tm_mday}_{timestamp.tm_hour}{timestamp.tm_min}{timestamp.tm_sec}" def get_video_creation_time(video_path): try: # 使用 moviepy 读取视频文件 clip = VideoFileClip(video_path) # 获取视频文件的元数据 metadata = clip.reader.infos # 获取创建时间 creation_time = metadata.get('creation_time', 'Unknown') return creation_time except Exception as e: print(f"Error: {e}") return None def solution(): # 获取当前时间并格式化为年月日时分秒毫秒 # 设置照片所在的文件夹路径 folder_path = "C:\\Users\\hyy\\Pictures\\图片" # folder_path = "C:\\Users\\hyy\\Pictures\\轩辕龙儿的文件收集20240803" # 获取文件夹中的所有照片文件 # photo_files = glob.glob(os.path.join(folder_path, "*")) photo_files = os.listdir(folder_path) # 遍历照片文件并重命名 for photo in photo_files: name = photo if name.endswith('.jpeg'): continue photo = folder_path+"\\"+photo if name.endswith('.MOV'): creation_time_stamp = get_photo_update_time(photo) formatted_time = "VIDEO_" + creation_time_stamp else: creation_time_stamp = get_photo_taken_time(photo) formatted_time = "IMG_" + creation_time_stamp.values.replace(':', '').replace(' ', '_') if creation_time_stamp is None: continue # if name.startswith('IMG'): # file_name, file_ext = os.path.splitext(photo) # if file_name.find('-'): # file_name = file_name[:-2] # os.rename(photo, f"{file_name}{file_ext}") # continue file_name, file_ext = os.path.splitext(photo) if file_name.startswith('.'): file_name, file_ext = os.path.splitext(file_name) new_file_name = f"{formatted_time}{file_ext}" new_file_path = os.path.join(folder_path, new_file_name) index = 1 while os.path.exists(new_file_path): new_file_name = f"{formatted_time}-{index}{file_ext}" new_file_path = os.path.join(folder_path, new_file_name) index = index+1 os.rename(photo, new_file_path) print("照片重命名完成!") if __name__ == "__main__": solution()