利用Python轻松从视频中抽取帧

news/2025/1/14 23:57:20/

利用Python轻松从视频中抽取帧

      • 安装依赖
      • 示例代码
      • 参数说明
      • 使用示例

在做CV项目的时候,有时候可能需要从视频中抽取一些有价值的图片,可以使用 Python 的 opencv 库来从视频中抽取帧。以下是一个示例程序,展示了如何从视频中抽取帧,你可以指定每秒抽取的帧数或者指定间隔多少帧抽取一帧。

安装依赖

首先,确保你已经安装了 opencv-python 库。如果没有安装,可以使用以下命令进行安装:

pip install opencv-python

示例代码

以下是一个 Python 程序,展示了如何从视频中抽取帧:

python">import cv2
import osdef extract_frames(video_path, output_folder, mode, value):# 打开视频文件cap = cv2.VideoCapture(video_path)# 获取视频的帧率fps = cap.get(cv2.CAP_PROP_FPS)# 确保输出文件夹存在if not os.path.exists(output_folder):os.makedirs(output_folder)frame_count = 0saved_count = 0while cap.isOpened():ret, frame = cap.read()if not ret:breakif mode == 'seconds':interval = int(fps / value)  # 每秒抽取几帧elif mode == 'frames':interval = value  # 间隔多少帧抽取一帧else:raise ValueError("Mode should be 'seconds' or 'frames'")if frame_count % interval == 0:frame_filename = os.path.join(output_folder, f"frame_{saved_count:04d}.jpg")cv2.imwrite(frame_filename, frame)saved_count += 1frame_count += 1cap.release()print(f"Total saved frames: {saved_count}")# 参数设置
video_path = 'path/to/your/video.mp4'  # 替换为你的视频文件路径
output_folder = 'extracted_frames'  # 替换为你想要保存帧的文件夹
mode = 'seconds'  # 可以是 'seconds' 或 'frames'
value = 2  # 如果 mode 是 'seconds',表示每秒抽取几帧;如果 mode 是 'frames',表示间隔多少帧抽取一帧# 抽取帧
extract_frames(video_path, output_folder, mode, value)

参数说明

  • video_path:视频文件的路径。
  • output_folder:保存抽取帧的文件夹路径。
  • mode:抽取帧的模式,可以是 'seconds''frames'
    • 'seconds':每秒抽取指定数量的帧。
    • 'frames':间隔指定数量的帧抽取一帧。
  • value:根据 mode 的不同,表示每秒抽取的帧数或间隔多少帧抽取一帧。

使用示例

假设你有一个视频文件 video.mp4,你希望每秒抽取 2 帧,并将这些帧保存到 extracted_frames 文件夹中,可以执行以下代码:

python">video_path = 'video.mp4'
output_folder = 'extracted_frames'
mode = 'seconds'
value = 2extract_frames(video_path, output_folder, mode, value)

如果你希望间隔 30 帧抽取一帧,可以执行以下代码:

python">mode = 'frames'
value = 30extract_frames(video_path, output_folder, mode, value)

http://www.ppmy.cn/news/1508975.html

相关文章

ubuntu22.04 安装clamav并使用定时任务扫描

文章目录 前言一、安装服务二、配置定时任务 前言 记录一下ubuntu22.04安装clamav。 操作系统版本:Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-118-generic x86_64) clamav版本:0.103.11dfsg-0ubuntu0.20.04.1 一、安装服务 sudo apt install clamav clama…

Unity数据持久化 之 LitJson序列化与反序列化

语法规则可以看这篇文章:Unity数据持久化 之 Json 语法速通-CSDN博客 1.LitJson是什么 LitJSON - Home,Release LitJSON 0.19.0 LitJSON/litjson GitHub LitJSON是一个net库,用于处理与JSON (JavaScript Object Notation)字符串之间的转换…

政务网站(.gov)专用SSL/HTTPS证书

政府网站在选择SSL证书时不仅需要遵循网络安全法规以及密评整改,更要提升公众信任度。国产服务商提供的专业版SSL证书,全方位符合政务部门对SSL证书的要求 1 算法要求 政务服务网站需要落实等保制度、密评制度,在密码应用上可选择国密算法S…

进程的执行和进程的结束

exec函数族: 作用:可以在一个程序中启动另外一个功能,用新的进程段替换当前进程的段. exec函数族用于替换当前进程的映像,允许程序在运行时加载并执行新的程序代码。 execl: l:list path:要执行的文件的路径 arg:要执行的文件的参数&a…

2022年第一至第四批专精特新“小巨人”企业数据,企业名称、经营范围、公示批次等字段可查询

基本信息. 数据名称: 第一至第四批专精特新“小巨人”企业数据 数据格式: Shpxlsx 数据时间: 2022年 数据几何类型: 点 数据坐标系: WGS84坐标系 数据来源:《中国城市统计年鉴》中统计的工业企业数相关数据,对象为地级及以上的城市,统计…

vue RSA加密解密(解决加密过长,解密过长返回为null的问题)

1安装 npm i jsencrypt2.rsa.js /* 产引入jsencrypt实现数据RSA加密 */ import JSEncrypt from jsencrypt // 处理长文本数据时报错 jsencrypt.js Message too long for RSA /* 产引入encryptlong实现数据RSA加密 */ import Encrypt from encryptlong // encryptlong是基于js…

浅谈Sql Server 视图

一、视图简介 SQL 视图(Views)是一种虚拟表,是基于 SQL 查询结果生成的。这些虚拟表可以包含来自一个或多个表的数据,并且可以像表一样查询;视图是一个表中的数据经过某种筛选后的显示方式,或者多个表中的数…

Python | Leetcode Python题解之第335题路径交叉

题目&#xff1a; 题解&#xff1a; class Solution:def isSelfCrossing(self, distance: List[int]) -> bool:n len(distance)# 处理第 1 种情况i 0while i < n and (i < 2 or distance[i] > distance[i - 2]):i 1if i n:return False# 处理第 j 次移动的情况…