opencv 视频自动截图-小工具

2023-05-16

采用:python多进程
实测:
cpu:i7-9700

92秒 13456张,

平均约每秒146张

import multiprocessing as mp
import os
import cv2
import sys
import time


# 截图保存
def git_img(path: str, n: int, len_n: int,
            name: str, suffix: str, save_path: str,
            frames: str) -> None:
    """
    :param path:完整视频文件路径
    :param n: 起始帧数
    :param len_n: 终止帧数
    :param name: 保存图像文件名
    :param suffix: 保存文件名后缀
    :param save_path: 保存图像文件路径
    :param frames: 隔几帧 保存
    :return: None
    """

    # 读取视频
    cap = cv2.VideoCapture(path)
    cap.set(cv2.CAP_PROP_POS_FRAMES, n)
    l = n
    l1 = 0
    while len_n > l:

        l += 1
        # 设置要获取的帧号
        ret, frame = cap.read()

        if l1 == frames:
            print(len_n, l, "计数")
            l1 = 0
            cv2.imwrite(save_path + name + str(l) + suffix, frame)

        l1 += 1
    cv2.destroyAllWindows()


# 读取视频
path = "./01.mp4"
# 保存图片路径
save_path = "./images/"
# 间隔多少帧
frames = 1
# 文件后缀
suffix = '.jpg'
# 文件名前面加什么区分
name = '2022_'

cap = cv2.VideoCapture(path)
# 获取视频总帧数
cap_len = cap.get(7)
cv2.destroyAllWindows()

# if cap == 0:
#     print("视频未读取到, 请检查文件是否存在")
#     sys.exit()

# 读取电脑有几核
cpu_len = os.cpu_count()
# cpu_len = 6
# print(cap_len)
# print(cpu_len)

# 将视频分为多份 几份根据电脑核数来定
# 每个进程分配多少帧
Average = int(cap_len / cpu_len)

# print(Average)

# 进程 调用git_img函数
list_process = []

for i in range(cpu_len):
    list_process.append(git_img)

# print(list_process)
# print(list_process_name)
if __name__ == '__main__':

    t1 = time.time()

    jobs = []
    start, Termination = 0, Average
    for i in list_process:
        pw = mp.Process(target=i, args=(path, start, Termination, name, suffix, save_path, frames))
        start += Average
        Termination += Average

        # 启动子进程pw,写入:
        pw.start()
        jobs.append(pw)

    # pr.start()

    for i1 in jobs:
        i1.join()

    print("所有进程结束")

    # 需要测试的代码
    t2 = time.time()
    print("以上代码运行时长:", t2 - t1)

在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opencv 视频自动截图-小工具 的相关文章

  • SVM连续值预测

    SVM连续值预测 分类问题回归问题一 导入库和数据二 数据预处理三 模型训练和评估 使用svm既可以实现分类问题 xff0c 即输出是标签的种类 xff0c 例如手写数字识别 Iris鸢尾花分类 xff0c 同时也能实现连续值的预测 xff
  • 最新解决git拉取远程仓库失败问题:Failed to connect to github.com port 443: Timed out.

    最新解决git拉取远程仓库失败问题 xff1a Failed to connect to github com port 443 Timed out 本地git拉取 pull 或抓取 fetch 远程github仓库出现 Failed to
  • 回溯算法及剪枝

    回溯算法及剪枝 理论基础模板框架实例思路 剪枝 回溯算法的本质是暴力穷举 xff0c 即使用递归控制for循环嵌套的数量 xff0c 本身不是一个高效的算法 尽管可以使用剪枝来提高效率 xff0c 但是还是改不了穷举的本质 回溯法 xff0
  • MySQL索引的底层实现原理

    索引的底层实现原理 数据库索引是存储在磁盘上的 xff0c 当数据量大时 xff0c 就不能把整个索引全部加载到内存了 xff0c 只能逐一加载每一个磁盘块 xff08 对应索引树的节点 xff09 xff0c 索引树越低 xff0c 越
  • MySQL事务

    事务概念 一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元 xff0c 只有当事务中的所有操作都正常执行完啦 xff0c 整个事务才会被提交给数据库 xff1b 如果有部分事务处理失败 xff0c 那么事务就要回退
  • MySQL行锁、表锁&间隙锁

    事务隔离级别的实现原理 xff1a 锁 表级锁 amp 行级锁 表级锁 xff1a 对整张表加锁 开销小 xff0c 加锁快 xff0c 不会出现死锁 xff1b 锁粒度大 xff0c 发生锁冲突的概率高 xff0c 并发度低 行级锁 xf
  • sql模糊查询多个条件写法

    单个模糊查询一般使用like xff0c 如果多个可以使用 OR 进行连接 xff0c 不过写样子写法很冗余 xff0c 而且如果多个条件是从表中 select出来的时候这种方法就不可行了 针对这种问题 xff0c 一般都提供了正则表达式的
  • Python datetime.fromtimestamp 遇到的一些坑

    背景 xff1a 调用腾讯某个接口返回的是时间戳的形式 xff0c 本地解析的时间跟腾讯端的时间不一致 xff0c 经过排查发现是本地没有转化为北京时间 xff0c 而腾讯端是默认转换为北京时间的 但是却有一个疑惑 x1f914 xff0c
  • 【ClickHouse】批量写入ClickHouse 的几种方式

    ClickHouse没有官方的Python接口 xff0c 有个第三方的库 xff0c 叫clickhouse driver xff0c 笔者所知道的将数据批量写入的方式不是很多 xff0c 这里列举最常见的3种方式 第一种方式 CSV文件
  • 【redis】redis简单操作(待更新。。)

    span class token keyword import span redis span class token comment 导入redis 模块 span pool span class token operator 61 sp
  • js--客户端存储问题

    1 sessionstorage 2 localstorage 3 例子 xff1a 存储名字 lt body gt lt input type 61 34 text 34 id 61 34 name 34 gt lt input type
  • 【Python】python操作mongo的简单示例(待更新。。)

    span class token comment usr bin python3 span span class token keyword import span pymongo myclient span class token ope
  • 【Linux】清理升级缓存以及无用包

    span class token function sudo span span class token function apt get span autoclean span class token function sudo span
  • jsp 与 servlet 之间传值

    jsp gt servlet 1 input jsp 定义name lt input type 61 34 text 34 name 61 34 cardnum 34 id 61 34 cardnum 34 gt servlet 通过获取
  • 关于oracle表空间不足原因及处理方法

    oracle表空间不足错误代码 xff1a ORA 01688 unable to extend table 等 xff1b 查看剩余表空间的大小 xff1a SELECT UPPER F TABLESPACE NAME 34 表空间名 3
  • 剪枝操作——回溯法的限界思想及其应用:圆排列问题

    我相信人都有自尊 xff0c 而尊重别人的自尊是一种及其高尚的精神 社会中有很多想不到的惨绝人寰的事情 xff0c 有时候发生到了自己身上 有时候发生在自己最亲密的人身上 有时候发生在自己周围人的身上等 这些无不露出一些类似于心理变态vs心
  • Archlinux安装(BIOS)教程

    Archlinux安装 xff08 BIOS xff09 记录一下 建议参考 xff1a ArchWiki 官方安装指导 下载镜像 官网 制作U盘启动盘 rufus 插入U盘 进入BIOS启动U盘 xff0c 选择第一个 连接wifi sp
  • 深度优先 求 图中强连通子图的个数

    说明 输入矩阵形式的图 xff0c matrix i j 值为 1 说明边 i 与边 j 相连 定义一个 visited 的 Boolean 数组 xff0c 为 true 表示此边已经访问过 算法时间复杂度 xff1a n的平方 可以优化
  • 解决办法:Ubuntu 16.04 【缺少依赖】导致出现该错误——ERROR: the following packages/stacks could not have their

    解决办法 xff1a Ubuntu 16 04 缺少依赖 导致出现该错误 ERROR the following packages stacks could not have their rosdep keys resolved to sy
  • Caused by: java.lang.NumberFormatException: For input string: “undefined“

    做的项目是前后端分离的 xff0c 刚完成一个列表功能 xff0c 写好了前端代码 xff0c 启动后端后 xff0c 前端没有报错 xff0c 但是在浏览器中控制台不印不出来 xff0c 显示如图 请求失败 xff01 xff01 xff

随机推荐