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

news2024/9/21 4:36:10

看视频的时候有的视频文件名贼长。想要翻看,在文件夹里根本显示不出来,缩短又会丢失一些信息,所以我写了一份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的库。
解决不了的加

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1911584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cesium自定义着色器构件三角面片【闪烁】问题,但是一移动视角就闪烁

问题:已知各个顶点的坐标信息、颜色和索引信息,并自定义绘制三角面片。 但是绘制的三角面片随着视角稍微改动就会出现闪烁现象!!!why? Cesium数据类型的精度问题,例如下面为了获取能接收到高精度坐标信息…

linux磁盘分区管理

首先关机状态下,先配置硬盘 硬盘分区管理 识别硬盘 》分区规划 》 格式化 》 挂载使用 [rootlocalhost ~]# lsblk 查看硬盘 分区划分(m帮助, p 查看分区, n 创建分区, d 删除分区, q 退出, w 保存, g gpt分区) [roo…

华为云发起,openGemini正式成为CNCF官方项目!

openGemini 正式成为 CNCF 官方项目 北京时间2024年7月9日,云原生计算基金会(CNCF)正式接纳云原生高性能时序数据库项目 openGemini。openGemini的加入,极大地丰富了云原生数据库技术的探索、创新和发展。 openGemini是华为云数据…

打开excel时弹出stdole32.tlb

问题描述 打开excel时弹出stdole32.tlb 如下图: 解决方法 打开 Microsoft Excel 并收到关于 stdole32.tlb 的错误提示时,通常意味着与 Excel 相关的某个组件或类型库可能已损坏或不兼容。 stdole32.tlb 是一个用于存储自动化对象定义的类型库&#x…

BN的 作用

1、背景: 卷积神经网络的出现,网络参数量大大减低,使得几十层的深层网络成为可能。然而,在残差网络出现之前,网络的加深使得网络训练变得非常不稳定,甚至出现网络长时间不更新或者不收敛的情形,…

利用 Selenium 和 Python 实现网页新闻链接抓取

在网络数据分析和信息检索中,爬虫是一项非常重要的技术。爬虫可以自动化地从网页中提取信息,极大地提升数据收集的效率。本文将以一个具体的代码实例,讲解如何使用 Selenium 库进行网页新闻链接的抓取。 前期准备 在开始之前,需…

3-7 使用深度学习解决温度即示数问题

3-7 使用深度学习解决温度即示数问题 直接上代码 %matplotlib inline import matplotlib.pyplot as plt import numpy as np import torch torch.set_printoptions(edgeitems2, linewidth75)设置Jupyter Notebook在单元格中内嵌显示图像,导入所需库并设置PyTorch的…

实时温湿度监测系统:Micropython编码ESP32与DHT22模块的无线数据传输与PC端接收项目

实时温湿度监测系统 前言项目目的项目材料项目步骤模拟ESP32接线连接测试搭建PC端ESP32拷录环境对ESP32进行拷录PC端搭建桌面组件本地数据接收桌面小组件部分 实验总结 前言 人生苦短,我用Python。 由于我在日常工作中经常使用Python,因此在进行该项目…

物流工业三防平板实时跟踪货物位置和状态

在当今全球化和高度数字化的商业环境中,物流行业的高效运作对于企业的成功和经济的繁荣至关重要。货物的准确、实时跟踪不仅能提高物流效率,还能增强客户满意度,降低运营成本。物流工业三防平板的出现,为实现货物位置和状态的实时…

使用redis进行短信登录验证(验证码打印在控制台)

使用redis进行短信登录验证 一、流程1. 总体流程图2. 流程文字讲解:3.代码3.1 UserServiceImpl:(难点)3.2 拦截器LoginInterceptor:3.3 拦截器配置类: 4 功能实现,成功存入redis (黑…

2017年,我成为了技术博主

2017年9月,我已经大三了。 >>上一篇(爪哇,我初窥门径) 我大二学了很多java技术,看似我一会就把javaweb/ssh/ssm这些技术栈给学了。 这些技术确实不难,即便是我,我都能学会,…

深入理解 LXC (Linux Containers)

目录 引言LXC 的定义LXC 的架构LXC 的工作原理LXC 的应用场景LXC 在 CentOS 上的常见命令实验场景模拟总结 1. 引言 在现代 IT 基础设施中,容器技术已经成为一种重要的应用和部署方式。与虚拟机相比,容器具有更高的效率、更轻量的特性和更快的启动速度…

MySQL GROUP_CONCAT 函数详解与实战应用

提示:在需要将多个值组合成一个列表时,GROUP_CONCAT() 函数为 MySQL 提供了一种强大的方式来处理数据 文章目录 前言什么是 GROUP_CONCAT()基本语法 示例使用 GROUP_CONCAT()去除重复值排序结果 前言 提示:这里可以添加本文要记录的大概内容…

第一次作业--数据库-搭建MySQL环境

一、下载 二、进入安装向导 1.选择Custom ,然后点击next 2.选择安装地址 点击第一个MySQL Servers然后依次点击打开到MySQL Server 8.0.37-X64 点击向右的绿色箭头 点击MySQL Server 8.0.37-X64 然后看到下面的蓝色Advanced Options 更改安装路径 然后点击next …

刷题(day02)

1、leetcode136.删除链表的结点 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 示例 1: 输入: head [4,5,1,9], val 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数…

说说iOS苹果的“开发者模式”什么时候需要打开 需不需要提前打开

在 iOS 开发过程中,开发者模式(Developer Mode)是一个非常重要的功能,它允许开发者在设备上运行和调试自己的应用程序。 经常有人私信或在群里问到,“我没有开发者模式,怎么办”,“开发者模式是…

优秀策划人必逛的地方,你不会还不知道吧?

道叔今天依然记得当初刚入行的时候,每天为完成策划任务,焦虑的整晚睡不着觉的痛苦。 但其实……很多时候,选择比努力更重要 优秀的策划和文案,也从来不是天生,你要走的路,前人都已经走过,你要做的仅仅是整…

windows JDK11 与JDK1.8自动切换,以及切换后失效的问题

1.windows安装不同环境的jdk 2.切换jdk 3.切换失败 原因:这是因为当我们安装并配置好JDK11之后它会自动生成一个环境变量(此变量我们看不到),此环境变量优先级较高,导致我们在切换回JDK8后系统会先读取到JDK11生成的…

Windows11配置WSL2支持代理上网

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、安装WSL2分发版二、配置步骤三、测试总结 前言 说起来本来这个功能我也不需要的,只是最近突然有个需求就顺便研究了下,WSL2默认的网…

【漏洞复现】29网课交单平台 SQL注入

声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。 一、漏洞描述 29网课交单平台是一个在线学习平台,用于帮助学生完成网络课程的学习任务。这个平台提供了包括…