python将视频分解为图片+将图片合成为视频

news/2025/3/5 5:09:31/

系列文章目录

文章目录

  • 系列文章目录
  • 前言
  • 一、python视频拆分+图片合成(源码一)
    • 1.python视频拆分
    • 1.python图片合成
  • 二、python视频拆分+图片合成(源码二)
  • 三、python视频拆分(源码三)
  • 总结


前言

一、python视频拆分+图片合成(源码一)

1.python视频拆分

在这里插入图片描述

import cv2def 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 = 0while success:success, image = vidcap.read()count += 1if count % time_interval == 0:cv2.imencode('.jpg', image)[1].tofile(frames_save_path + "/frame%d.jpg" % count)# if count == 20:#   breakprint(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)

1.python图片合成

import cv2
import os
import numpy as np
from PIL import Imagedef 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版本是2fourcc = cv2.VideoWriter_fourcc(*'XVID') #opencv版本是3videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)# count = 1for 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)#     breakvideoWriter.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 :  breakelse:i = i+1(flag,frame) = cap.read() #读取每一张 flag framefilename = '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 timedef video_split(video_path,save_path):'''对视频文件切割成帧''''''@param video_path:视频路径@param save_path:保存切分后帧的路径'''vc=cv2.VideoCapture(video_path)#一帧一帧的分割 需要几帧写几c=0if vc.isOpened():rval,frame=vc.read()else:rval=Falsewhile rval:rval,frame=vc.read()# 每秒提取2帧图片if c % 2 == 0:cv2.imwrite(save_path + "/" + str('%06d'%c)+'.jpg',frame)cv2.waitKey(1)c=c+1DATA_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:#	continueprint("正在处理文件夹",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_nameif not os.path.isdir(save_path_):os.makedirs(save_path_)video_path = path + "/" + filevideo_split(video_path,save_path_)end_time = time.time()
print("Cost time",start_time - end_time)

总结

分享:
一个有能力的人,就是逢山开路,遇水架桥,实在过不去就绕个弯,也要前进,这就是能力。决心就是力量,坦诚就是效率。平坦不是最佳道路,起伏才有丰富人生。一个人可以不成功,但不可以不成长,成长比成功更重要。凡事找方法去解决者,一定是成功者,凡事找借口推脱者,必定失败。


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

相关文章

Linux向日葵同步剪贴板,Windows远程桌面可双向复制粘贴图片了,向日葵客户端9.0.3更新...

无人值守远程桌面调取文档时,有时可能只是一段文字,我们都需要通过邮箱或两端都登录社交应用来传输,然而首先你得有两个社交账户,或者另一端得有人接收文件。懒癌症晚期者和高效人士要问了,有没有更方便的办法&#xf…

Linux向日葵同步剪贴板,远程桌面可双向复制粘贴图片 向日葵客户端9.0.3更新

即使是通过ctrlc、ctrlv的快捷方式亦可将被控电脑中的文本复制粘贴到本地。向日葵是一款阳光的控制手机或电脑的远程软件,主要功能是远程桌面、远程文件、远程摄像头、远程开机等。支持Windows、Mac、Linux、Android、iOS等主流系统相互穿越控制。 (手机通过向日葵控…

微服务架构介绍及SpringCloudAlibaba组件介绍

单体架构vs微服务架构 单机架构 什么是单体架构 一个归档包(例如war格式)包含了应用所有功能的应用程序,我们通常称之为单体应用。架构单体应用的方法论,我们称之为单体应用架构。(就是一个war包打天下)…

北京邦银汇通征信牌照为何先挂牌后又注销哪

2023年6月27日,中国人民银行营业管理部发布《关于注销北京邦银汇通征信有限公司企业征信业务经营备案的公告》,显示北京邦银汇通征信有限公司因业务调整,申请注销企业征信业务经营备案,并由营管部于日前注销。 笔者转发了该注销信…

使用python 定时发送微信信息给喜欢的人

原创 使用python 定时发送微信信息给喜欢的人 2019-11-08 16:34:18 冒牌技术小哥 阅读数 171 文章标签: python 更多 分类专栏: python 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处…

个人微信号发送zabbix告警信息

之前使用邮件和短信发送zabbix告警信息,但告警信息无法实时查看或者无法发送,故障无法及时通知运维人员。 后来使用第三方微信接口发送信息,愉快地用了一年多,突然收费了。 zabbix告警一直是我的痛点,近期发现一个基…

1 行代码,实现微信消息发送

还是接食行生鲜签到的问题,之前我们讲到,将签到结果通过短信发送到手机,但是我发现 twilio 有些不稳定,为了防止漏签,我在服务器上设置了两次定时任务,通常情况下第一个收不到短信,第二个才会收…

通过GitHub Actions给微信公众测试号和钉钉群定时推送消息(Python)

通过GitHub Actions给微信公众测试号和钉钉群定时推送消息(Python) https://github.com/QInzhengk/Math-Model-and-Machine-Learning简介GitHub Actions 术语workflow 文件1.name2.on3.jobs 几个完整的 workflow 文件的范例一二 实例1、通过GitHub Actio…