这次的教程也有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()参数详解 原文地址

paramdefine
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后端支持这个功能)