群晖nas系统搭建好了之后,如何简单和快速地导入照片和视频到指定的目录是个问题,我在整理这些照片时发现:

1.备份目录下有多个嵌套目录,照片和视频是混在一起的;

2. 照片和视频文件的名字比较乱,都拷贝到一起无法通过文件名来时间排序;

3. 有一部分照片和视频文件的修改时间和拍摄的时间不一致,所以也无法通过修改时间来排序;

所以我想到自己写一个python脚本来解决自己碰到的问题,该脚本实现了如下功能:

1. 自动将嵌套目录下的照片和视频分别存放到两个指定目录;

2. 按照照片和视频的创建时间(或修改时间)自动批量命名文件,时间相同的文件名末尾加“_1”等后缀区分;

3. 脚本可以在window映射目录下执行,也可以在nas系统下执行,但是建议在windows下执行,可以获取照片和视频的创建时间,nas系统下只能获取到修改时间;

4. 可以通过打印信息跟踪执行的情况;

以下是python脚本源码,希望能够帮助到大家,有问题请指正!

#!/usr/bin/python
# -*- coding:UTF-8 -*-
import os
import sys
import time
import datetime
import platform
import ctypes
import shutil
import io
import exifreadif platform.system().lower() == 'windows':import pytzfrom win32com.propsys import propsys, psconSTD_OUTPUT_HANDLE = -11std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)FOREGROUND_BLUE = 0x09 # blue.FOREGROUND_GREEN = 0x0a # green.FOREGROUND_RED = 0x0c # red.FOREGROUND_YELLOW = 0x0e # yellow.photo_dest = "Y:/temp"video_dest = "X:/temp"
else: #linuxphoto_dest = "/volume1/photo/temp"video_dest = "/volume1/video/temp"photo_types = ['.jpeg','.jpg','.png','.bmp']
video_types = ['.mp4','.avi','.wmv','.mkv','.flv','.3gp']
exclude_dirs = ['@eaDir']def print_red(info):if platform.system().lower() == 'windows':ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, FOREGROUND_RED)sys.stdout.write(info + '\n')ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)else: #linuxprint("\033[1;31m%s\033[0m" % info)def print_yellow(info):if platform.system().lower() == 'windows':ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, FOREGROUND_YELLOW)sys.stdout.write(info + '\n')ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)else: #linuxprint("\033[1;32m%s\033[0m" % info)def check_photo_type(filename):array = map(filename.lower().endswith,photo_types)if True in array:return Trueelse:return Falsedef check_video_type(filename):array = map(filename.lower().endswith,video_types)if True in array:return Trueelse:return Falsedef auto_rename_and_copy_existed_file(srcpath, dstpath):i = 1;name_list = os.path.splitext(dstpath)while os.path.exists(name_list[0]+'_'+str(i)+name_list[-1]):i += 1print_yellow("rename copy existed %s to %s" % (srcpath, name_list[0]+'_'+str(i)+name_list[-1]))shutil.copy2(srcpath, name_list[0]+'_'+str(i)+name_list[-1]) def get_photo_capture_time(filepath):f = open(filepath, "rb")tags = exifread.process_file(f)f.close()if 'EXIF DateTimeOriginal' in tags:capture_time = "PID-" + str(tags['EXIF DateTimeOriginal']).replace(":","").replace(" ","-")else:capture_time = ""return capture_timedef get_video_create_time(filepath):if platform.system().lower() == 'windows':properties = propsys.SHGetPropertyStoreFromParsingName(filepath)create_time = properties.GetValue(pscon.PKEY_Media_DateEncoded).GetValue()#python3 must return a datetime subobject, if not we think that can't get create time dataif not isinstance(create_time, datetime.datetime):#create_time = datetime.datetime.fromtimestamp(int(create_time)) #for python2create_time = ""return create_timereturn create_time.strftime("VID-%Y%m%d-%H%M%S")else:create_time = ""return create_timedef rename_photos(filepath, filename):photo_name_list = os.path.splitext(filename)photo_src_path = os.path.join(filepath, filename)photo_time = get_photo_capture_time(photo_src_path)if photo_time == "":photo_time = datetime.datetime.fromtimestamp(os.path.getmtime(photo_src_path)).strftime("PID-%Y%m%d-%H%M%S")photo_dst_path = os.path.join(photo_dest, photo_time+photo_name_list[-1])if os.path.exists(photo_dst_path):#print_red("Can't copy to %s, existed!" % photo_dst_path)auto_rename_and_copy_existed_file(photo_src_path, photo_dst_path)else:print("copy %s to %s" % (photo_src_path, photo_dst_path))shutil.copy2(photo_src_path, photo_dst_path)def rename_videos(filepath, filename):video_name_list = os.path.splitext(filename)video_src_path = os.path.join(filepath, filename)video_time = get_video_create_time(video_src_path)if video_time == "":video_time = datetime.datetime.fromtimestamp(os.path.getmtime(video_src_path)).strftime("VID-%Y%m%d-%H%M%S")video_dst_path = os.path.join(video_dest, video_time+video_name_list[-1])if os.path.exists(video_dst_path):#print_red("Can't copy to %s, existed!" % video_dst_path)auto_rename_and_copy_existed_file(video_src_path, video_dst_path)else:print("copy %s to %s" % (video_src_path, video_dst_path))shutil.copy2(video_src_path, video_dst_path)       def do_rename_and_classify(path):for dir_path,dir_names,file_names in os.walk(path):array = map(lambda dir:dir_path.count(dir)>0, exclude_dirs)if True in array:continueprint(dir_path)for name in file_names:if check_photo_type(name):rename_photos(dir_path, name)else:if check_video_type(name):rename_videos(dir_path, name)else:print_yellow("find another type file: %s" % os.path.join(dir_path, name))if __name__ == "__main__":# 当前路径中执行脚本, 不要重复执行#file_path = sys.path[0]file_path = os.getcwd()sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码do_rename_and_classify(file_path)

用python脚本分类和改名照片和视频相关推荐

  1. 利用Python脚本实现批量格式转换(视频转音频)

    利用Python脚本实现批量格式转换(视频转音频) 利用ffmpeg工具和Python,实现批量视频/音频格式转换.本例只给出视频转音频(.wav)方法,更多格式转换可百度ffmpeg用法,修改代码中 ...

  2. python实时脚本_web 监控 python 脚本

    Redis监控工具,命令和调优 Redis监控工具,命令和调优1.图形化监控 因为要对Redis做性能测试,发现了GitHub上有个python写的RedisLive监控工具评价不错.结果鼓捣了半天, ...

  3. python视频人脸检测_OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  4. Python脚本下载今日头条视频(附加Android版本辅助下载器)

    一.前言 今日头条有毒,这句话不是虚的,现在资讯类app中也就大黄易和今日头条可以博取用户一点喜好了,我所说的喜好不是指内容精彩,而是评论,玩过这两个app的人都知道,看的不是新闻本生内容,而是他逗逼 ...

  5. arcmap中添加python脚本_基于Python脚本的ArcMap字段计算器分类赋值

    因为出差等等缘由,又没能很好的坚持记录博客,今天回来了,继续记录所学吧.python ArcMap中提供了"字段计算器工具",实际上就是对Sql语句进行了可视化封装,造成了一个具备 ...

  6. 通过单反wifi同步照片到Android手机——使用Airnef Python脚本

    前言 本人使用的是尼康D750,自带wifi功能,奈何配套的Android App太难用了,至于怎么难用,我这里就不细说了,用过的都懂.总不能白瞎了wifi功能吧.找了一阵子发现了两个第三方通过逆向工 ...

  7. python批量改名微信视频软件,python利用文件时间批量重命名照片和视频

    本文实例为大家分享了python利用文件时间批量重命名照片和视频的具体代码,供大家参考,具体内容如下 问题描述 承接上节的问题,在安卓和苹果间互导照片和视频还容易出现文件名混乱的问题,如下图所示. 代 ...

  8. 通过python获取苹果手机备份文件中的照片,视频等信息采集

    前言: 苹果手机用户通常会将手机备份到电脑上,而备份文件通常不会自动删除.在我们电脑取证,或者***到一台电脑后可以通过python脚本获取到备份文件中的一些隐私信息,比如照片.视频.相关软件中的一些 ...

  9. iphone看python文件_通过python获取苹果手机备份文件中的照片,视频等信息采集

    前言: 苹果手机用户通常会将手机备份到电脑上,而备份文件通常不会自动删除.在我们电脑取证,或者***到一台电脑后可以通过python脚本获取到备份文件中的一些隐私信息,比如照片.视频.相关软件中的一些 ...

最新文章

  1. yolov4源码_YOLOv4特征提取网络——CSPDarkNet结构解析及PyTorch实现
  2. 你们还留恋windows什么呢?
  3. MySQL和Mariadb都启动不了了_linux centos7mariadb安装成功启动不了 解决思路
  4. thinkphp Hook行为的使用案例
  5. 【英语学习】【WOTD】liaison 释义/词源/示例
  6. IT餐馆—第三回 模式
  7. vue router 懒加载实现
  8. 百万级MySQL的数据量,该如何快速的完成数据迁移?
  9. raid卡缓存对硬盘性能_机械硬盘寿命探究(续)
  10. bluetoothctl No default controller available
  11. 无人机倾斜摄影技术在三维实景GIS的应用
  12. 计算机应用能力考试湖南成绩查询,湖南计算机等级考试成绩查询入口
  13. 画图取色小工具markman
  14. 解压war包和重新压缩war包
  15. 正则表达式之数字验证
  16. 【NLP】ESPNet语音识别——原理、实现过程
  17. Windows 取证之$MFT
  18. 信息安全知识竞赛试题
  19. ROS TF2 中的 四元数 基础部分
  20. Android包体积优化(常规、进阶、极致)

热门文章

  1. 浅谈ForkJoin
  2. ES5与ES6中如何实现继承
  3. map的insert和emplace比较
  4. C++ 赋值重载运算符(overloaded operator)operator关键字
  5. Win10自带的Xbox Game Bar录屏
  6. Java网络爬虫-总结
  7. 门诊患者正在流失?如何打造差异化服务,成功破局,留住患者?
  8. python将图片转动漫_python实现图片转换成素描和漫画格式
  9. python 畅玩os模块 顺便批量修改个图片尺寸
  10. Spark学习-事件日志EventLog