这次的教程也有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