Python爬取视频时长场景实践示例
作者:三爷 发布时间:2021-08-14 01:32:56
标签:Python,爬取,视频时长
简介:
在视频相关测试场景下,例如:有时需要知道全部视频的汇总时长,显然一个个打开并且手工计算耗时耗力,我们可以通过编写脚本进行快速汇总。
获取视频时长的方式
1、通过subprocess进行获取。
2、通过moviepy库中VideoFileClip获取。
3、通过cv2库获取。
安装
1、subprocess:无需安装,Python内置。
2、moviepy:pip install moviepy。
3、cv2:pip install opencv-python
准备工序:
1、当前项目新增videos目录。
2、you-get 下载几个视频。python:超实用下载工具you-get
如:下载了两个短视频
获取视频时长的3种方式对比
import cv2
import time
import subprocess
from moviepy.editor import VideoFileClip
def video_duration_1(filename):
start = time.time()
result = subprocess.run(["ffprobe", "-v", "error", "-show_entries",
"format=duration", "-of",
"default=noprint_wrappers=1:nokey=1", filename],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
end = time.time()
spend = end - start
print("获取视频时长方法1耗时:", spend)
return float(result.stdout)
def video_duration_2(filename):
start = time.time()
clip = VideoFileClip(filename)
end = time.time()
spend = end - start
print("获取视频时长方法2耗时:", spend)
return float(clip.duration)
def video_duration_3(filename):
start = time.time()
cap = cv2.VideoCapture(filename)
if cap.isOpened():
rate = cap.get(5)
frame_num = cap.get(7)
duration = frame_num / rate
end = time.time()
spend = end - start
print("获取视频时长方法3耗时:", spend)
return duration
return -1
if __name__ == '__main__':
file = r".\videos\mda-mkbhvebqej3cw9yh.mp4"
video_time_1 = video_duration_1(file)
print(video_time_1)
print("*" * 100)
video_time_2 = video_duration_2(file)
print(video_time_2)
print("*" * 100)
video_time_3 = video_duration_3(file)
print(video_time_3)
执行源码:
结论:
1、三种方式均可以正常获取视频时长,并且准确。
2、推荐使用cv2获取视频时长,耗时最短。
实践案例:获取文件夹内全部视频总时长
import cv2
import os
def video_duration(dir_name):
sum_duration = 0
for root, dirs, files in os.walk(dir_name, topdown=False):
for filename in files:
cap = cv2.VideoCapture(dir_name + "\\" + filename)
if cap.isOpened():
rate = cap.get(5)
frame_num = cap.get(7)
duration = frame_num / rate
sum_duration += duration
return sum_duration
if __name__ == '__main__':
file = r".\videos"
total_video_time = video_duration(file)
print(f"{file} 目录下全部视频总时长为:{total_video_time}秒")
来源:http://167t.cn/86uD
0
投稿
猜你喜欢
- 演示:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//
- 网站上的Banner条,是网站用来作为盈利或者是发布一些重要的信息的工具。但是它又不能作为网页的主要内容,因为它的主要目的是吸引人的注意力,
- 1. 返回列表和标量(Scalar)前面我们注意到Query对象可以返回可迭代的值(iterator value),然后我们可以通过for
- 本文研究的主要是Python subprocess模块的相关内容,具体如下。在学习这个模块前,我们先用Python的help()函数查看一下
- 对所有数据进行整合与管理当你使用SQL Server 2008企业级的数据仓库平台时,你可以高效的操纵所有数据,并对其进行统一管理存储。◆合
- 作为一位不懂代码的业余网页制 * 好者,常常羡慕专业程序人员在浏览器中编制出的效果超酷的一些多媒体作品。唉,无奈程序那东东,酶涩南学,非一日之
- <% dim total(7,2) total(1,1)=200 total(2,1)=800
- User Centered Design 以用户为中心的设计,一说到这个很多人马上想到互联网和软件的设计,因为在IT、互联网行业提得最多。其
- php redis断线重连,pconnect连接失败问题介绍在swoole ,workerman等cli长连接模式下,遇到Redis异常断开
- 图像(包括动图)是传递信息的一种高效方式,往往能增强表象、记忆与思维等方面的反应强度。所谓一图胜千言,说的就是这个道理。今天为大家整理了十张
- 一、怎么样取得最新版本的MySQL?要安装MySQL,首先要当然要取得它的最新版本,虽然大家都知道在FreeBSD的Packages中可以找
- 在安排Web页面的布局时,最常用的方法之一是用HTML表格界定页面的结构。例如,假设Web页面由顶端的
- 在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这是个最简单的办法,但是后果会有些不是你想要的
- 在我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,尤其是在进行数据检验、净化和转换时,将会面临很大
- 概述从今天开始, 小白我将带领大家一起来补充一下 数据库的知识.数据控制语言数据控制语言 (Data Control Language) 是
- 一、 简单查询简单的Transact-SQL查询只包括选择列表、FROM子句和Where子句。它们分别说明所查询列、查询的表或视图、以及搜索
- 今天冒出来一个想法,在仅知道数据库名的情况下,用asp得到数据库中的所有表名、所有表的字段名、以及所有字段中的内容。经过一段时间查询资料和修
- 完成了UI,我们就需要对数据进行处理了。在开始“数据”的本地存储之前,我们先来了解一下client-side database storag
- 运行以下代码: Dim com As ADODB.Command Dim rst
- python 与 C++ dlib人脸检测结果对比,供大家参考,具体内容如下说明:由于项目需求发现Linux下c++使用dlib进行人脸检测