首页 > 其他分享 >opencv读取视频文件夹内视频的名字_时长_帧率_分辨率写入excel-cnblog

opencv读取视频文件夹内视频的名字_时长_帧率_分辨率写入excel-cnblog

时间:2024-07-09 21:29:30浏览次数:19  
标签:视频 写入 cap excel 列表 opencv SPWZ 时长

看视频的时候有的视频文件名贼长。想要翻看,在文件夹里根本显示不出来,缩短又会丢失一些信息,所以我写了一份Python代码,直接获取视频的名字,时长,帧率,还有分辨率写到excel里。

实际效果如下图。

image-20240709212219287

可以看到需要的大致信息都被提取出来了

接下来直接上代码

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)

介绍一下这套代码的使用流程

image-20240709212322255

运行之后它会提示要加载的视频位置在哪里,输入之后回车生成的Excel文件会以那个文件夹命名

注意这需要open CV库的支持,要学会如何安装Python的库。

标签:视频,写入,cap,excel,列表,opencv,SPWZ,时长
From: https://blog.csdn.net/qq_62943420/article/details/140307166

相关文章

  • 普通人的短视频带货课 传统商家打造iP人设直播带货
    亲爱的朋友们,今天我要带大家深入了解抖音短视频带货的奥秘。这不仅仅是一门课程,这是一次开启财富之门的旅程。让我们一起探索8种常用变现方式与直播带货技巧,让你在这个充满机遇的平台上大放异彩。这门课程是你在抖音短视频带货领域的指南针。让我们一起学习、成长,最终在这个......
  • 探索AI艺术:制作怪兽美食短视频的无限可能
    亲爱的朋友们,欢迎来到我们的博客小站!今天,我要带大家探索一个令人兴奋的新领域——利用AI技术将各地特色美食转化为形象生动、创意满满的怪兽的短视频制作。想象一下,那些色香味俱全的地方小吃,摇身一变,成为一个个栩栩如生的小怪兽,这不仅能在各大短视频平台上吸引无数眼球,还能让......
  • Unity实现安卓App预览图片、Pdf文件和视频的一种解决方案
    一、问题背景最近在开发app项目,其中有个需求就是需要在app软件内显示图片、pdf和视频,一开始想的解决方案是分开实现,也就是用Image组件显示图片,找一个加载pdf的插件和播放视频的插件,转念一想觉得太麻烦了,于是就想着看能不能想电脑浏览器打开图片、pdf和视频一样直接加载显示......
  • 安防视频监控/云存储/视频汇聚EasyCVR平台播放设备录像不稳定,是什么原因?
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供7*24小时实时高清视频监控、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能AI......
  • excel实现对同一个工作簿下不同工作表分别加密,这种能实现吗?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python自动化办公的问题,问题如下:大佬们请问下这种能实现吗?excel实现对同一个工作簿下不同工作表分别加密。二、实现过程这里【瑜亮老师】给了一个思路:是加密,还是保护?【哎呦喂 ......
  • 最快视频转绘-AnimateDiff-Lightning
    最快视频转绘-AnimateDiff-LightningVideo-to-VideoGenerationAnimateDiff-Lightning非常适合视频到视频的生成。使用ControlNet提供最简单的comfyui工作流程。「ComfyUI-aki-v1.3.7z」链接:https://pan.quark.cn/s/199a753292d8下载导入工作流animatediff_lightning......
  • excel下载功能
    excel下载功能:(就是一个超链接href属性,路径:保存xlsx文件的路径)<ahref="${pageContext.request.contextPath}/file/导入代码模板.xlsx">下载导入模板</a>在webapp下,创建一个file文件夹,把要下载的资源丢进file文件夹中   声明:此博客为个人学习之用,如与其他作品雷同......
  • 下载数据库数据生成excel文件
    下载数据库数据生成excel文件:packagecom.wisdragon.controller.dataQuality;importcom.google.gson.JsonArray;importcom.google.gson.JsonElement;importcom.google.gson.JsonObject;importcom.google.gson.JsonParser;importcom.wisdragon.comm.constant.Constant......
  • 上传excel到数据库
    上传excel到数据库:packagecom.wisdragon.controller.dataQuality;importcom.wisdragon.comm.constant.Constant;importcom.wisdragon.controller.common.BaseController;importcom.wisdragon.model.dataQuality.RuleBase;importcom.wisdragon.model.dataQuality.RuleV......
  • Excel表格如何免费转成PDF的3种方法
    很多时候我们会将各种各样的文档转换成pdf的格式,然后发送给别人,因为pdf格式在阅读上既能保持很好的效果,又不会编辑到里面的内容,那么要怎么excel表格转换成pdf呢?方法一:使用Excel软件自带的“另存为”功能大多数版本的MicrosoftExcel都提供了将文档另存为PDF的功能,这是最简单直接......