Python实现视频分解成图片+图片合成视频
作者:用余生去守护 发布时间:2022-12-14 05:26:12
标签:Python,视频,图片
一、python视频拆分+图片合成(源码一)
1.python视频拆分
import cv2
def video2frame(videos_path,frames_save_path,time_interval):
'''
:param videos_path: 视频的存放路径
:param frames_save_path: 视频切分成帧之后图片的保存路径
:param time_interval: 保存间隔
:return:
'''
vidcap = cv2.VideoCapture(videos_path)
success, image = vidcap.read()
count = 0
while success:
success, image = vidcap.read()
count += 1
if count % time_interval == 0:
cv2.imencode('.jpg', image)[1].tofile(frames_save_path + "/frame%d.jpg" % count)
# if count == 20:
# break
print(count)
if __name__ == '__main__':
videos_path = r'E:\py\python3.7\test\test98youhuashiping\shipingchaifen\1.mp4'
frames_save_path = r'E:\py\python3.7\test\test98youhuashiping\shipingchaifen'
time_interval = 2#隔一帧保存一次
video2frame(videos_path, frames_save_path, time_interval)
2.python图片合成
import cv2
import os
import numpy as np
from PIL import Image
def frame2video(im_dir,video_dir,fps):
im_list = os.listdir(im_dir)
im_list.sort(key=lambda x: int(x.replace("frame","").split('.')[0])) #最好再看看图片顺序对不
img = Image.open(os.path.join(im_dir,im_list[0]))
img_size = img.size #获得图片分辨率,im_dir文件夹下的图片分辨率需要一致
# fourcc = cv2.cv.CV_FOURCC('M','J','P','G') #opencv版本是2
fourcc = cv2.VideoWriter_fourcc(*'XVID') #opencv版本是3
videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)
# count = 1
for i in im_list:
im_name = os.path.join(im_dir+i)
frame = cv2.imdecode(np.fromfile(im_name, dtype=np.uint8), -1)
videoWriter.write(frame)
# count+=1
# if (count == 200):
# print(im_name)
# break
videoWriter.release()
print('finish')
if __name__ == '__main__':
im_dir = r'E:\py\python3.7\test\test98youhuashiping\shipingchaifen\pho/'#帧存放路径
video_dir = r'E:\py\python3.7\test\test98youhuashiping\shipingchaifen/test.mp4' #合成视频存放的路径
fps = 30 #帧率,每秒钟帧数越多,所显示的动作就会越流畅
frame2video(im_dir, video_dir, fps)
提示:路径中不要出现中文和特殊字符,且书写要规范!!
二、python视频拆分+图片合成(源码二)
import cv2
import numpy as np
import os
os.chdir(r'E:\py\python3.7\test\test98youhuashiping\chaifen')
##读取视频,并逐帧分解成图片
cap = cv2.VideoCapture('1.mp4') #打开一个视频
isOpened = cap.isOpened() #判断是否打开
print(isOpened)
#获取视频的相关信息,视频的每一帧图片的宽度都是一致的
fps = cap.get(cv2.CAP_PROP_FPS) #帧率,即每秒钟由多少张图片组成
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #获取宽度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #获取高度
print(fps,width,height) #输出相关信息
i = 0
while (isOpened):
#读取视频的前两秒的图像,共计2*int(fps)张
if i ==int(fps)*2 :
break
else:
i = i+1
(flag,frame) = cap.read() #读取每一张 flag frame
filename = 'image'+str(i)+'.jpg'
#将读取的图片写入文件中,
if flag == True:
cv2.imwrite(filename,frame,[cv2.IMWRITE_JPEG_QUALITY,100]) #确定图片质量,100算是高的
print('end!')
##读取零散图片(上面分解的图片),并将其合成视频
img = cv2.imread('image1.jpg')
imginfo = img.shape
size = (imginfo[1],imginfo[0]) #与默认不同,opencv使用 height在前,width在后,所有需要自己重新排序
print(size)
#创建写入对象,包括 新建视频名称,每秒钟多少帧图片(10张) ,size大小
#一般人眼最低分辨率为19帧/秒
videoWrite = cv2.VideoWriter('2.mp4',-1,10,size)
for i in range(1,40):
filename = 'image'+str(i)+'.jpg'
img = cv2.imread(filename,1) #1 表示彩图,0表示灰度图
#直接写入图片对应的数据
videoWrite.write(img)
videoWrite.release() #关闭写入对象
print('end')
三、python视频拆分(源码三)
import cv2 #导入opencv模块
import os
import time
def video_split(video_path,save_path):
'''
对视频文件切割成帧
'''
'''
@param video_path:视频路径
@param save_path:保存切分后帧的路径
'''
vc=cv2.VideoCapture(video_path)
#一帧一帧的分割 需要几帧写几
c=0
if vc.isOpened():
rval,frame=vc.read()
else:
rval=False
while rval:
rval,frame=vc.read()
# 每秒提取2帧图片
if c % 2 == 0:
cv2.imwrite(save_path + "/" + str('%06d'%c)+'.jpg',frame)
cv2.waitKey(1)
c=c+1
DATA_DIR = r"E:\py\python3.7\test\test98youhuashiping\ceshi\mp4" #视频数据主目录
SAVE_DIR = r"E:\py\python3.7\test\test98youhuashiping\ceshi\pho2" #帧文件保存目录
start_time = time.time()
for parents,dirs,filenames in os.walk(DATA_DIR):
#if parents == DATA_DIR:
# continue
print("正在处理文件夹",parents)
path = parents.replace("\\","//")
f = parents.split("\\")[1]
save_path = SAVE_DIR + "//" + f
# 对每视频数据进行遍历
for file in filenames:
file_name = file.split(".")[0]
save_path_ = save_path + "/" + file_name
if not os.path.isdir(save_path_):
os.makedirs(save_path_)
video_path = path + "/" + file
video_split(video_path,save_path_)
end_time = time.time()
print("Cost time",start_time - end_time)
来源:https://blog.csdn.net/qq_45365214/article/details/123873991


猜你喜欢
- 0.环境说明win10 64bit,电脑也是64bit的处理器,电脑装有vs2010 64bit,但是为了保险起见,只试验了32位的安装,等
- 很早以前就说过,IE8的标准模式已经不再支持滤镜了,不过IE仍然留了一条后路,你可以在CSS中这样写滤镜:-ms-filter
- element upload上传带参数<el-button style="margin-left: 10px;"
- 提到数组,大家都不陌生,什么是数组行列转置呢?其实也很简单,如下图所示,行列转置就是将数组元素的存放方式进行转换,原来保存在第一列的数据,将
- 今天登录社区的时候看到有之前的文章有个留言的评论,说如何统计typecho所有文章的字数,这里分享一下代码。在当前主题的functions.
- 一、概念梳理链表是计算机科学里面应用应用最广泛的数据结构之一。它是最简单的数据结构之一,同时也是比较高阶的数据结构(例如棧、环形缓冲和队列)
- 1.Order By原理MySQL的Order By操作用于排序,并且会有多种不同的排序算法,他们的性能都是不一样的。假设有一个表,建表的s
- 一、字典、元组的多重嵌套例 1:记录全班学生的成绩。分析:定义一个 SimpleGradebook类,学生名是字典self._grades的
- 可以使用 Application 对象在给定的应用程序的所有用户之间共享信息。基于 ASP 的应用程序同所有的 .asp 文件一样在一个虚拟
- 本文实例讲述了Python udp网络程序实现发送、接收数据功能。分享给大家供大家参考,具体如下:1. udp网络程序-发送数据创建一个基于
- 本文实例讲述了微信小程序picker组件简单用法。分享给大家供大家参考,具体如下:picker滚动选择器,现支持三种选择器,通过mode来区
- 本文实例讲述了python判断给定的字符串是否是有效日期的方法。分享给大家供大家参考。具体分析如下:这里python判断给定的字符串是否是一
- “博客就像一本书”这话其实几个月前深圳FB时就有扯到,这也不是什么新概念,也许本身就应该是这样。打个比方,当你拿到一本未看过的书时,理论上你
- 前言突然想起来之前讲SQL注入时忘记讲一下这个宽字节注入了,因为这个知识点还是挺重要的,所以本文就带大家了解一下宽字节注入的原理以及应用方法
- 当需要从 JavaScript 中的数组中获取最后一个元素时,有多种选择,本文将提供 3 种可用方法。1. 数组 length 属性??le
- 使用递归查找父元素,知道查到想要的元素,然后return getParentTag(startTag) { var self
- 首先声明,没有什么不良动机,因为经常会用 translate.google.cn,就想着用 Python 模拟网页提交实现文档的批量翻译。据
- 二分类或分类问题,网络输出为二维矩阵:批次x几分类,最大的为当前分类,标签为one-hot型的二维矩阵:批次x几分类计算百分比有numpy和
- 今天我们将利用python+OpenCV实现对视频中物体数量的监控,达到视频监控的效果,比如洗煤厂的监控水龙头的水柱颜色,当水柱为黑色的超过
- mysql分组统计并求出百分比1、mysql 分组统计并列出百分比SELECT point_id,&nb