Python怎么实现视频分解成图片及图片合成视频

Python怎么实现视频分解成图片及图片合成视频

这篇文章主要介绍了Python怎么实现视频分解成图片及图片合成视频的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python怎么实现视频分解成图片及图片合成视频文章都会有所收获,下面我们一起来看看吧。

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

    1.python视频拆分

    importcv2defvideo2frame(videos_path,frames_save_path,time_interval):''':paramvideos_path:视频的存放路径:paramframes_save_path:视频切分成帧之后图片的保存路径:paramtime_interval:保存间隔:return:'''vidcap=cv2.VideoCapture(videos_path)success,image=vidcap.read()count=0whilesuccess:success,image=vidcap.read()count+=1ifcount%time_interval==0:cv2.imencode('.jpg',image)[1].tofile(frames_save_path+"/frame%d.jpg"%count)#ifcount==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)

    2.python图片合成

    importcv2importosimportnumpyasnpfromPILimportImagedefframe2video(im_dir,video_dir,fps):im_list=os.listdir(im_dir)im_list.sort(key=lambdax: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=1foriinim_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视频拆分+图片合成(源码二)

    importcv2importnumpyasnpimportosos.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=0while(isOpened):#读取视频的前两秒的图像,共计2*int(fps)张ifi==int(fps)*2:breakelse:i=i+1(flag,frame)=cap.read()#读取每一张flagframefilename='image'+str(i)+'.jpg'#将读取的图片写入文件中,ifflag==True:cv2.imwrite(filename,frame,[cv2.IMWRITE_JPEG_QUALITY,100])#确定图片质量,100算是高的print('end!')##读取零散图片(上面分解的图片),并将其合成视频img=cv2.imread('image1.jpg')imginfo=img.shapesize=(imginfo[1],imginfo[0])#与默认不同,opencv使用height在前,width在后,所有需要自己重新排序print(size)#创建写入对象,包括新建视频名称,每秒钟多少帧图片(10张),size大小#一般人眼最低分辨率为19帧/秒videoWrite=cv2.VideoWriter('2.mp4',-1,10,size)foriinrange(1,40):filename='image'+str(i)+'.jpg'img=cv2.imread(filename,1)#1表示彩图,0表示灰度图#直接写入图片对应的数据videoWrite.write(img)videoWrite.release()#关闭写入对象print('end')

    三、python视频拆分(源码三)

    importcv2#导入opencv模块importosimporttimedefvideo_split(video_path,save_path):'''对视频文件切割成帧''''''@paramvideo_path:视频路径@paramsave_path:保存切分后帧的路径'''vc=cv2.VideoCapture(video_path)#一帧一帧的分割需要几帧写几c=0ifvc.isOpened():rval,frame=vc.read()else:rval=Falsewhilerval:rval,frame=vc.read()#每秒提取2帧图片ifc%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()forparents,dirs,filenamesinos.walk(DATA_DIR):#ifparents==DATA_DIR:#continueprint("正在处理文件夹",parents)path=parents.replace("\\","//")f=parents.split("\\")[1]save_path=SAVE_DIR+"//"+f#对每视频数据进行遍历forfileinfilenames:file_name=file.split(".")[0]save_path_=save_path+"/"+file_nameifnotos.path.isdir(save_path_):os.makedirs(save_path_)video_path=path+"/"+filevideo_split(video_path,save_path_)end_time=time.time()print("Costtime",start_time-end_time)

    关于“Python怎么实现视频分解成图片及图片合成视频”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Python怎么实现视频分解成图片及图片合成视频”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道。

    发布于 2022-04-03 22:38:53
    收藏
    分享
    海报
    0 条评论
    48
    上一篇:MySQL和Redis的数据一致性问题怎么解决 下一篇:Go语言time包数字与时间相乘的问题怎么解决
    目录

      0 条评论

      本站已关闭游客评论,请登录或者注册后再评论吧~

      忘记密码?

      图形验证码