从视频截取每一帧作为图像
查看视频有多少帧
import cv2def count_frames_per_second(video_path):cap = cv2.VideoCapture(video_path)if not cap.isOpened():print("Error: Could not open video")return None# Get frames per secondfps = cap.get(cv2.CAP_PROP_FPS)# Get total number of framestotal_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))# Calculate total time in secondstotal_time_seconds = total_frames / fps if fps > 0 else 0# Convert total time to minutes and seconds for better readabilitytotal_minutes = total_time_seconds // 60total_seconds = total_time_seconds % 60print(f"Frames per second: {fps}")print(f"Total frames in the video: {total_frames}")print(f"Total time of the video: {int(total_minutes)} minutes and {total_seconds:.2f} seconds")cap.release()return fps, total_frames, total_time_seconds# Example usage
video_path = "D:\\WorkSpace\\pitaya_video\\video\\VID_20241015_082527.mp4" # Change this to your video file path
count_frames_per_second(video_path)
单个视频
import cv2
import osdef capture_frames(video_path,save_frame_path):# Get the video name without extensionvideo_name,suffix_mp4 = os.path.splitext(os.path.basename(video_path)) # Create a directory to save framesframes_dir = os.path.join(save_frame_path, video_name)os.makedirs(frames_dir, exist_ok=True)# Open the video filecap = cv2.VideoCapture(video_path)if not cap.isOpened():print(f"Error: Could not open video file {video_path}")returnframe_count = 0while True:# Read a frame from the videoret, frame = cap.read()# Break the loop if there are no more framesif not ret:break# Save the frame as an image fileframe_filename = os.path.join(frames_dir, f"{video_name}_frame_{frame_count:04d}.jpg")cv2.imwrite(frame_filename, frame)print(f"Saved {frame_filename}")frame_count += 1# Release the video capture objectcap.release()print(f"Total frames saved: {frame_count}")# Example usage
video_file_path = "D:\\WorkSpace\\pitaya_video\\video" # Replace with your video file path
video_file_path = os.path.join(video_file_path,"VID_20241015_082527.mp4")
save_frame_path = "D:\\WorkSpace\\pitaya_video\\all_image"
capture_frames(video_file_path,save_frame_path)
多个视频
import cv2
import osdef capture_frames_from_videos(video_directory,save_frame_path):# List all video files in the specified directoryvideo_files = [f for f in os.listdir(video_directory) if f.endswith('.mp4')]for video_file in video_files:video_path = os.path.join(video_directory, video_file)print(f"Processing video: {video_path}")# Get the video name without extensionvideo_name, suffix_mp4= os.path.splitext(video_file)# Create a directory to save framesframes_dir = os.path.join(save_frame_path, video_name)os.makedirs(frames_dir, exist_ok=True)# Open the video filecap = cv2.VideoCapture(video_path)if not cap.isOpened():print(f"Error: Could not open video file {video_path}")continueframe_count = 0while True:# Read a frame from the videoret, frame = cap.read()# Break the loop if there are no more framesif not ret:break# Save the frame as an image fileframe_filename = os.path.join(frames_dir, f"{video_name}_frame_{frame_count:04d}.jpg")cv2.imwrite(frame_filename, frame)print(f"Saved {frame_filename}")frame_count += 1# Release the video capture objectcap.release()print(f"Total frames saved for {video_file}: {frame_count}")# Example usage
video_directory = "D:\\WorkSpace\\pitaya_video\\video" # Replace with your video directory path
save_frame_path = "D:\\WorkSpace\\pitaya_video\\all_image"
capture_frames_from_videos(video_directory,save_frame_path)
一秒截取3帧
import cv2
import osdef capture_frames_from_videos(video_directory, save_frame_path):# List all video files in the specified directoryvideo_files = [f for f in os.listdir(video_directory) if f.endswith('.mp4')]for video_file in video_files:video_path = os.path.join(video_directory, video_file)print(f"Processing video: {video_path}")# Get the video name without extensionvideo_name, _ = os.path.splitext(video_file)# Create a directory to save framesframes_dir = os.path.join(save_frame_path, video_name)os.makedirs(frames_dir, exist_ok=True)# Open the video filecap = cv2.VideoCapture(video_path)if not cap.isOpened():print(f"Error: Could not open video file {video_path}")continue# Get the frames per second (fps) of the videofps = cap.get(cv2.CAP_PROP_FPS)print(f"Frames per second: {fps}")# Calculate the interval to capture 3 frames per secondframe_interval = max(int(fps / 3), 1) # Ensure at least one frame intervalframe_count = 0saved_frame_count = 0while True:# Read a frame from the videoret, frame = cap.read()# Break the loop if there are no more framesif not ret:break# Save the frame at specific intervalsif frame_count % frame_interval == 0:frame_filename = os.path.join(frames_dir, f"{video_name}_frame_{saved_frame_count:04d}.jpg")cv2.imwrite(frame_filename, frame)print(f"Saved {frame_filename}")saved_frame_count += 1frame_count += 1# Release the video capture objectcap.release()print(f"Total frames saved for {video_file}: {saved_frame_count}")# Example usage
video_directory = "D:\\WorkSpace\\pitaya_video\\video" # Replace with your video directory path
save_frame_path = "D:\\WorkSpace\\pitaya_video\\all_image" # Replace with your desired output path
capture_frames_from_videos(video_directory, save_frame_path)
相关文章:
从视频截取每一帧作为图像
查看视频有多少帧 import cv2def count_frames_per_second(video_path):cap cv2.VideoCapture(video_path)if not cap.isOpened():print("Error: Could not open video")return None# Get frames per secondfps cap.get(cv2.CAP_PROP_FPS)# Get total number of f…...
终端 数据表格
// // Created by HongDaYu on 17 十月 2024. //#ifndef HDYSDK_UTIL_H #define HDYSDK_UTIL_H#include <cstdint> #include <string> #include <list> #include <iomanip> #include <memory>class dataGrid { private:std::list<const char*…...
2.4.ReactOS系统运行级别降低IRQL级别KfLowerIrql 函数
2.4.ReactOS系统运行级别降低IRQL级别KfLowerIrql 函数 2.4.ReactOS系统运行级别降低IRQL级别KfLowerIrql 函数 文章目录 2.4.ReactOS系统运行级别降低IRQL级别KfLowerIrql 函数KfLowerIrql 函数 KfLowerIrql 函数 /*******************************************************…...
数字后端实现静态时序分析STA Timing Signoff之min period violation
今天给大家分享一个在高性能数字IC后端实现timing signoff阶段经常遇到的min period violation。大部分时候出现memory min period问题基本上都是需要返工重新生成memory的。这是非常致命的错误,希望大家在做静态时序分析时一定要查看min period violation。 什么是…...
phpstorm+phpstudy 配置xdebug(无需开启浏览器扩展)
今天又被xdebug折磨了,忘记了以前咋配置了现在百度发现好多都是各种浏览器扩展而且也没有真正的用到项目上的都是测试的地址怎么样的 我就简单写一下自己实战吧 不支持workerman swoole hyperf等这种服务框架 如果你会请教教我 工具版本phpstudy8.1.xphpstorm2021.x…...
AI赋能安全运营 | 赛宁网安深度参与四川省网络安全沙龙
为促进四川省、市网络安全公共服务领域的经验交流与深入探讨,打通网络安全供需上下游,加速汇聚省、市优质网络安全设备和服务资源,提升巴中市乃至四川省网络安全防护水平,共同推动四川省网络安全事业的蓬勃发展。 2024年10月15日…...
R语言中,.RData 和 .rds 的区别
.RData 和 .rds 是 R 语言中两种不同的数据保存格式,二者有一些关键的区别: 1. 存储内容的类型: .RData 文件:可以同时保存多个对象(如数据框、向量、列表等),当你加载 .RData 文件时…...
python实现录屏功能
python实现录屏功能 将生成的avi文件转为mp4格式后删掉avi文件 参考感谢:https://www.cnblogs.com/peachh/p/16549254.html import os import cv2 import time import threading import numpy as np from PIL import ImageGrab from pynput import keyboard from da…...
酷克数据出席2024金融业数据库技术大会
10月16日,由中国金融电子化集团指导,北京金融信息化研究所主办的“2024金融业数据库技术大会”在京顺利召开。本次大会以“大模型时代下的数据库创新发展”为主题,汇聚了来自管理部门、金融机构、科技企业以及学术研究机构的众多专家学者&…...
find_library、pkg_check_modules、pkg_search_module的区别
在CMake中,find_library、pkg_check_modules和pkg_search_module是用于查找和使用库的三种不同命令。以下是具体介绍: find_library 功能:find_library用于查找指定的库文件(动态库或静态库),不依赖于库提供…...
多jdk版本环境下,jenkins系统设置需指定JAVA_HOME环境变量
一、背景 由于不同项目对jdk版本的要求不同,有些是要求jdk11,有些只需要jdk8即可。 而linux机器上安装jdk的方式又多种多样,最后导致jenkins打包到底使用的是哪个jdk,比较混乱。 1、java在哪 > whereis java java: /usr/bin/…...
Java mybatis day1015
ok了家人们,今天学习了mybatis这个框架,我们一起去看看吧 一.Mybatis简介 1.1 Mybatis概述 MyBatis 最初是 Apache 的一个开源项目 iBatis, 2010 年 6 月 这个项目由 Apache Software Foundation 迁移到了 Google Code 。随着开发团队转投 Google Cod…...
音乐播放器项目专栏介绍
1.简介 本专栏使用Qt QWidget作为显示界面,你将会学习到以下内容: 1.大量ui美化的实例。 2.各种复杂ui布局。 3.常见显示效果实现。 4.大量QSS实例。 5.Qt音频播放,音乐歌词文件加载,展示。 6.播放器界面换肤。 相信学习了本专栏…...
如何修改SpringBoot内置容器默认上下文
引言 默认情况下,Spring boot 应用程序通过上下文路径“/”访问,这是嵌入式服务器的默认设置,即我们可以直接通过http://localhost:8080/访问该应用程序。 但是在生产环境中部署 Spring Boot 应用程序时,指定上下文路径是一个常…...
R语言详解predict函数
R语言中predict函数在建立模型,研究关系时常用。但是不同type得到的结果常常被混为一谈,接下来,探讨predict得到的不同结果。 #数据 set.seed(123) n<-1000 age<-rnorm(n,mean50,sd10) gender<-rbinom(n,1,0.5) disease<-rbinom…...
QT 实现随机码验证
1.界面实现效果 以下是具体的项目需要用到的效果展示,用于验证字母。 2.简介 自定义CaptchaMovableLabel,继承自QLabel类: 中间的4个字母,就是CaptchaMovableLabel类来实例化的对象。 主要功能如下: 1.显示字母&am…...
集合框架12:Set集合概述、Set接口使用
视频链接:13.24 Set接口使用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p24 1、Set集合概述 特点:无序、无下标,元素不可…...
如何打开荣耀手机的调试模式?
问题描述: 最近用荣耀手机进行测试,打开开发者选项,打开USB调试,在选择USB配置时,发现仅有选择USB以太网才可以连接Android Studio,也就是打开ADB调试模式。 但是,打开USB以太网后,…...
Meta新模型Dualformer:融合快慢思维,推理能力媲美人脑
Meta 的 FAIR 团队最近推出了一款名为 Dualformer 的全新 Transformer 模型,该模型模仿人类的双重认知系统,能够无缝整合快速和慢速推理模式,在推理能力和计算效率上取得了显著突破。 人类的思维过程通常被认为是由两种系统控制的:系统1快速…...
CDGA|数据治理:如何让传统行业实现数据智能
在当今这个数字化时代,数据已成为推动各行各业转型升级的关键力量。对于传统行业而言,如何从海量、复杂的数据中挖掘价值,实现“数据智能”,成为了提升竞争力、优化运营效率、创新业务模式的重要途径。本文将探讨数据治理如何助力…...
3个鲜为人知的smcFanControl使用技巧:让你的Mac冷静运行的开源方案
3个鲜为人知的smcFanControl使用技巧:让你的Mac冷静运行的开源方案 【免费下载链接】smcFanControl Control the fans of every Intel Mac to make it run cooler 项目地址: https://gitcode.com/gh_mirrors/smc/smcFanControl 当你在夏天使用MacBook处理大型…...
告别混乱!SpringBoot3 + Knife4j 4.4.0接口文档管理:从基础配置到高级分组与权限控制
SpringBoot3与Knife4j 4.4.0实战:企业级API文档架构设计与安全管控 当微服务架构中的API数量突破三位数时,开发团队往往会陷入接口管理的泥潭。某电商平台的后台系统曾因文档混乱导致新成员需要两周才能熟悉支付模块的接口调用规范,而错误调…...
革新性语音合成与转换工具:零基础掌握AI语音克隆技术
革新性语音合成与转换工具:零基础掌握AI语音克隆技术 【免费下载链接】GPT-SoVITS 1 min voice data can also be used to train a good TTS model! (few shot voice cloning) 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS 在数字内容创作爆…...
5个实用技巧让华硕笔记本性能提升30%:GHelper全功能解析
5个实用技巧让华硕笔记本性能提升30%:GHelper全功能解析 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...
C语言多线程同步实战:从竞态到协同的四种武器
1. 多线程售票问题:竞态条件的典型场景 想象一下春运期间的火车站售票窗口,4个售票员同时售卖20张车票。如果缺乏有效的管理机制,很可能出现同一张票被重复售卖,或者票数统计出错的情况。这个场景完美模拟了多线程编程中最经典的…...
AliceSoft游戏文件处理终极指南:从入门到精通的完整解决方案
AliceSoft游戏文件处理终极指南:从入门到精通的完整解决方案 【免费下载链接】alice-tools Tools for extracting/editing files from AliceSoft games. 项目地址: https://gitcode.com/gh_mirrors/al/alice-tools AliceSoft游戏文件处理工具Alice-Tools是一…...
安装paperclip
介绍: # aperclip - 一人工公司的开源编排工具 ## 项目概述 Paperclip 是一个基于 Node.js 的服务器和 React UI,用于编排 AI 代理团队来运营业务。它允许用户导入自定义代理、分配目标,并通过一个仪表板跟踪代理的工作和成本。 核心价值主…...
完整指南:如何高效使用SecHex-Spoofy进行Windows系统伪装与安全测试
完整指南:如何高效使用SecHex-Spoofy进行Windows系统伪装与安全测试 【免费下载链接】SecHex-Spoofy C# HWID Changer 🔑︎ Disk, Guid, Mac, Gpu, Pc-Name, Win-ID, EFI, SMBIOS Spoofing [Usermode] 项目地址: https://gitcode.com/gh_mirrors/se/Se…...
Bidili Generator企业应用:广告公司客户提案阶段快速生成视觉概念稿
Bidili Generator企业应用:广告公司客户提案阶段快速生成视觉概念稿 1. 引言:提案阶段的视觉痛点与解决方案 在广告公司的日常工作中,客户提案阶段往往是最紧张、最考验创意执行效率的环节。传统的视觉概念稿制作流程通常是这样的ÿ…...
双模型协作方案:OpenClaw同时调用Qwen3-14B与CodeLlama
双模型协作方案:OpenClaw同时调用Qwen3-14B与CodeLlama 1. 为什么需要双模型协作 去年我在处理一个技术文档自动生成项目时,发现单一模型很难同时满足文本润色和代码示例生成的需求。Qwen3-14B在自然语言处理上表现优异,但生成的代码片段常…...
