Python提取视频帧图片实例代码

作者:乐观的lishan 时间:2023-02-11 18:15:21 

为了从视频中提取每一帧图片,编写Python脚本实现该功能

video_path为指定的视频路径

interval为指定分割视频是是否跳帧,默认不跳帧,即全部分割

width, height 为指定对分割帧图片调整大小,默认不调整

该脚本自动对帧图片编号,设置为7位编码,最多可分割9999999帧图片,即92小时的30FPS视频


# !/usr/bin/env python
# -*- coding: utf-8 -*-
# ============================================================
# @Date    : 2021/12/08 14:40:31
# @Author  : LiShan
# @Email   : lishan@st.xatu.edu.com
# @File    : extract.py
# @IDE     : PyCharm
# @Func    : Extract video image
# ============================================================
import os.path
import time
import cv2

video_path = "./assets/intersection.mp4"
idx1 = video_path.rfind('/')
idx2 = video_path.rfind('.')
save_path = "./assets/" + video_path[idx1+1:idx2]
if os.path.exists(save_path):
   pass
else:
   os.mkdir(save_path)

cap = cv2.VideoCapture(video_path)
fps = int(cap.get(cv2.CAP_PROP_FPS))
print('FPS:{:.2f}'.format(fps))
rate = cap.get(5)
frame_num = cap.get(7)
duration = frame_num/rate
print('video total time:{:.2f}s'.format(duration))

# width, height = 1920, 1080
cnt = 0
num = 0
# interval = int(fps) * 4
interval = 1
process_num = frame_num // interval
print('process frame:{:.0f}'.format(process_num))

t0 = time.time()
while cap.isOpened():
   ret, frame = cap.read()
   if ret:
       cnt += 1
       if cnt % interval == 0:
           num += 1
           # frame = cv.resize(frame, (width, height))
           cv2.imwrite(save_path + "/%07d.jpg" % num, frame)
           remain_frame = process_num - num
           t1 = time.time() - t0
           t0 = time.time()
           print("Processing %07d.jpg, remain frame: %d, remain time: %.2fs" % (num, remain_frame, remain_frame * t1))
   else:
       break
   if cv2.waitKey(1) & 0xff == 27:
       break

cap.release()
cv2.destroyAllWindows()
print("done")

Python提取视频帧图片实例代码

来源:https://blog.csdn.net/lishan132/article/details/122201250

标签:Python,提取,图片
0
投稿

猜你喜欢

  • 教你一招完美解决vscode安装go插件失败问题

    2024-05-09 09:47:20
  • Python figure参数及subplot子图绘制代码

    2023-09-14 17:13:00
  • pandas中的series数据类型详解

    2023-11-30 20:30:30
  • Go+Kafka实现延迟消息的实现示例

    2024-05-22 10:14:29
  • Vue.js中的图片引用路径的方式

    2024-05-09 15:28:10
  • Window 64位下python3.6.2环境搭建图文教程

    2023-07-26 02:22:45
  • vue-seamless-scroll无缝滚动组件使用方法详解

    2024-04-29 13:07:51
  • Go中如何使用set的方法示例

    2024-04-28 10:47:19
  • JS学习笔记之数组去重实现方法小结

    2024-04-18 10:57:00
  • 仅用500行Python代码实现一个英文解析器的教程

    2022-06-15 02:15:25
  • 编写数据库asp程序需注意的问题

    2007-12-29 12:57:00
  • Python如何重新加载模块

    2022-09-08 21:31:56
  • Python3自动生成MySQL数据字典的markdown文本的实现

    2021-04-29 15:21:18
  • Python基于callable函数检测对象是否可被调用

    2022-01-07 20:12:38
  • js 目录列举函数

    2024-06-05 09:12:50
  • 基于go+vue实现的golang每日新闻数据浏览与检索平台(推荐)

    2023-06-16 12:11:26
  • JavaScript实现字符串与日期的互相转换及日期的格式化

    2024-06-05 09:13:33
  • Pytorch 如何实现LSTM时间序列预测

    2023-06-26 01:04:24
  • Python进阶学习修改闭包内使用的外部变量

    2023-04-09 01:23:04
  • python 数据挖掘算法的过程详解

    2022-11-17 09:09:19
  • asp之家 网络编程 m.aspxhome.com