这次的教程也有MD(docsify)版本:
https://www.imtrq.com/docs/#/用Python批量获取视频长度、分辨率、创建时间
用到的库
- easygui:选择文件夹;
- os:获取创建时间、修改时间、文件名、遍历文件夹;
- cv2(opencv-python):获取视频长度、分辨率;
- pandas:导出Excel;
- datetime:格式化时间戳。
代码
大部分是网上抄的,我也找不到最初的来源了:
import os import cv2 import pandas as pd from easygui import diropenbox as set_dir from datetime import datetime def get_video_duration(filename): try: cap = cv2.VideoCapture(filename) except: return 0,0,0 if cap.isOpened(): rate = cap.get(5) frame_num =cap.get(7) duration = frame_num/rate width = cap.get(3) height = cap.get(4) return duration, width, height return 0,0,0 def get_time(timestamp): return datetime.strftime(datetime.fromtimestamp(timestamp), '%Y-%m-%d %H:%M:%S') path = set_dir() file_li = [] for r,ds,fs in os.walk(path): for f in fs: filename=os.path.join(r,f) size = os.path.getsize(filename) create_time = get_time(os.path.getctime(filename)) access_time = get_time(os.path.getatime(filename)) modified_time = get_time(os.path.getmtime(filename)) duration, width, height = get_video_duration(filename) file_li.append([filename, size, duration, width, height, create_time, access_time, modified_time]) df = pd.DataFrame(file_li) df.columns = ['文件路径', '大小', '时长', '宽度', '高度', '创建日期', '访问日期', '修改日期'] df.to_excel(os.path.join(os.path.dirname(__file__), 'files.xlsx'), index=None)
附录
OpenCV VideoCapture.get()参数详解 原文地址
param | define |
---|---|
cv2.VideoCapture.get(0) | 视频文件的当前位置(播放)以毫秒为单位 |
cv2.VideoCapture.get(1) | 基于以0开始的被捕获或解码的帧索引 |
cv2.VideoCapture.get(2) | 视频文件的相对位置(播放):0=电影开始,1=影片的结尾。 |
cv2.VideoCapture.get(3) | 在视频流的帧的宽度 |
cv2.VideoCapture.get(4) | 在视频流的帧的高度 |
cv2.VideoCapture.get(5) | 帧速率 |
cv2.VideoCapture.get(6) | 编解码的4字-字符代码 |
cv2.VideoCapture.get(7) | 视频文件中的帧数 |
cv2.VideoCapture.get(8) | 返回对象的格式 |
cv2.VideoCapture.get(9) | 返回后端特定的值,该值指示当前捕获模式 |
cv2.VideoCapture.get(10) | 图像的亮度(仅适用于照相机) |
cv2.VideoCapture.get(11) | 图像的对比度(仅适用于照相机) |
cv2.VideoCapture.get(12) | 图像的饱和度(仅适用于照相机) |
cv2.VideoCapture.get(13) | 色调图像(仅适用于照相机) |
cv2.VideoCapture.get(14) | 图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升) |
cv2.VideoCapture.get(15) | 曝光(仅适用于照相机) |
cv2.VideoCapture.get(16) | 指示是否应将图像转换为RGB布尔标志 |
cv2.VideoCapture.get(17) | × 暂时不支持 |
cv2.VideoCapture.get(18) | 立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能) |
Comments | NOTHING