看视频的时候有的视频文件名贼长。想要翻看,在文件夹里根本显示不出来,缩短又会丢失一些信息,所以我写了一份Python代码,直接获取视频的名字,时长,帧率,还有分辨率写到excel里。
实际效果如下图。
可以看到需要的大致信息都被提取出来了
接下来直接上代码
c++
import os
import xlsxwriter as xw
import cv2
# 从文件中获取视频名称列表和视频网址列表
def getUrlName(filename):
_urlList = [] # 视频网址列表
_fileList = [] # 视频名称列表
# 读取文件内容,并分离视频名称和网址
with open(filename, 'r', encoding='utf-8') as f:
data = f.readlines()
for i in range(len(data)):
if i % 2 == 0: # 偶数行为视频名称
_fileList.append(data[i].strip('\n'))
else: # 奇数行为视频网址
_urlList.append(data[i].strip('\n'))
return _urlList, _fileList
# 获取单个视频文件的时长
def getFileDuration(filename):
file_time = 0 # 初始化视频时长
cap = cv2.VideoCapture(filename) # 打开视频文件
if cap.isOpened(): # 如果视频成功打开
rate = cap.get(cv2.CAP_PROP_FPS) # 获取视频帧率
# 视频的宽高(分辨率)
video_width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
video_height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
frame_num = cap.get(cv2.CAP_PROP_FRAME_COUNT) # 获取视频总帧数
duration = int(frame_num / rate) # 计算视频时长(秒)
minutes = duration // 60 # 计算分钟数
sec = duration % 60 # 计算剩余秒数
res = "{:02d}:{:02d}".format(minutes, sec) # 格式化时长为分钟:秒
cap.release() # 释放视频文件
return res, rate,video_width,video_height # 返回视频时长
else:
return file_time, file_time,file_time,file_time # 如果视频打开失败,返回0
# 获取指定文件夹内的所有文件名
def getAllFiles(_dirName):
# print(os.listdir(_dirName))
return os.listdir(_dirName) # 返回文件夹内的文件列表
# 使用xlsxwriter库将视频名称和时长列表写入Excel文件
def xw_toExcel(_fileList, _durationList,rates,w,h, fileName):
workbook = xw.Workbook(fileName) # 创建一个新的Excel工作簿
worksheet1 = workbook.add_worksheet("sheet1") # 在工作簿中添加一个名为"sheet1"的工作表
worksheet1.activate() # 激活工作表,准备写入数据
title = ['序号', '视频名', '视频时长', '帧率',"分辨率"] # 定义表头标题
worksheet1.write_row('A1', title) # 从A1单元格开始写入表头标题
i = 2 # 设置数据写入的起始行号为2(即Excel中的第三行)
for j in range(len(_fileList)):
insertData = [j + 1, _fileList[j], _durationList[j],rates[j],"{}x{}".format(w[j],h[j])] # 准备要写入的数据:序号、视频名、视频时长
row = 'A' + str(i) # 构建写入数据的行地址,例如'A2'、'A3'等
worksheet1.write_row(row, insertData) # 将数据写入到指定行
i += 1 # 行号递增,准备写入下一行数据
workbook.close() # 完成数据写入后关闭工作簿
# 程序的主函数
def main(SPWZ, folder_name):
fileName = getAllFiles(SPWZ) # 获取指定文件夹内的所有文件名
print(fileName)
duration = [] # 初始化视频时长列表
rates = [] # 初始化帧率
w = []
h = []
for item in fileName: # 遍历每个文件
a, b,c,d = getFileDuration(SPWZ + "/" + item) # 获取每个视频文件的时长
duration.append(a) # 将时长添加到时长列表中
rates.append(b) # 将帧率添加到时长列表中
w.append(c)
h.append(d)
# 将视频名称和时长写入Excel文件
xw_toExcel(fileName, duration, rates, w,h,folder_name + '.xlsx') # 调用xw_toExcel函数,写入数据到'test.xlsx'文件中
if __name__ == '__main__':
SPWZ = input("请输入要加载的视频位置:")
SPWZ = SPWZ.replace('\\', '/')
print(SPWZ)
folder_name = os.path.basename(SPWZ)
main(SPWZ, folder_name)
介绍一下这套代码的使用流程
运行之后它会提示要加载的视频位置在哪里,输入之后回车生成的Excel文件会以那个文件夹命名
注意这需要open CV库的支持,要学会如何安装Python的库。
解决不了的加