Python将多个视频帧组合成.mp4视频 | 您所在的位置:网站首页 › 一帧帧的画面怎么拼成视屏 › Python将多个视频帧组合成.mp4视频 |
已经有很多文章描述了如何将视频拆分成视频帧,例如:https://blog.csdn.net/WYKB_Mr_Q/article/details/124929081 那我们如何将很多视频帧重新组合成视频呢?这里我们主要用到了 OpenCV 库中的 VideoWriter 类。 OpenCV种的 cv2.VideoWriter 类可以将图片序列保存成视频文件,也可以修改视频的各种属性,还可以完成对视频类型的转换。该类种常用的函数包括:构造函数、write 函数等。 1、构造函数 OpenCV中的cv2.Video_fourcc()用来指定视频编码格式: fourcc = cv2.VideoWriter_fourcc(*'mp4v') # MP4格式上述代码指定视频写入器的格式为 .mp4 格式。需要注意到’mp4v’中的英文字母,要么全大写,要么全小写。 保存为其它视频参考格式如下: 支持avi格式: I420,YUV编码,视频格式为.avi PIM1,MPEG-1编码,视频格式为.avi XVID,MPEG-4编码,视频格式为.avi其他编码器 THEO,Ogg Vorbis,视频格式为.ogv FLV1,Flash视频,视频格式为.flv AVC1,H264编码 DIV3,MPEG-4.3编码 DIVX,MPEG-4编码 MP42,MPEG-4.2编码 MJPG,motion-jpeg编码 U263,H263编码 I263,H263I编码设置完视频写入格式之后,需要完成对象创建,比如设置视频的帧率,视频帧的长和宽等参数。这里我们主要用到了cv2.VideoWriter()函数。 videowrite = cv2.VideoWriter(save_video_path, fourcc, fps=15, frameSize=(w, h))其中,save_video_path参数表示合成之后视频保存的路径及名称;fourcc表示上述编码格式;fps就是帧率,即每秒播放多少张图片;frameSize表示保存视频的宽和高。 2、write函数 cv2.VideoWriter.write()用于写入下一帧视频。 videowrite.write(img)其中,img表示读取到的视频帧数据。 3、释放 释放该类对象时所使用的是函数cv2.VideoWriter.release()。该函数的语法格式是: videowrite.release()在制作视频时,不用这个也没关系。 下面是完整的代码: import cv2 import os # 视频帧放置的文件夹路径,假如有多组视频帧,在frames文件夹下可放置多个文件夹 frame_path = r"E:\data\frames" # 生成视频存放的文件夹路径 video_path = r"E:\datas\videos" for root, dirs, files in os.walk(frame_path): # 一个文件夹中的第几个视频帧 i = 0 for file in files: # 读取图像的地址 img_path = os.path.join(root, file) img = cv2.imread(img_path) h, w, c = img.shape i += 1 # 如果是第一个视频帧,则构造视频对象 if i == 1: # 保存视频的地址 dir_lis = root.split("\\") save_videos_path = os.path.join(video_path, dir_lis[-3], dir_lis[-2]) # 如果路径不存在,则创建文件夹 if not os.path.exists(save_videos_path): os.makedirs(save_videos_path) # 加入文件名 save_video_path = os.path.join(save_videos_path, dir_lis[-1] + '.mp4') # 设置视频写入器 fourcc = cv2.VideoWriter_fourcc(*'mp4v') # MP4格式 # 完成写入对象的创建,第一个参数是合成之后的视频的名称,第二个参数是可以使用的编码器,第三个参数是帧率即每秒钟展示多少张图片,第四个参数是图片大小信息 videowrite = cv2.VideoWriter(save_video_path, fourcc, fps=15, frameSize=(w, h)) # 2是每秒的帧数,size是图片尺寸 # 将视频帧写入视频对象中 videowrite.write(img) print("第{}张图像合成成功".format(i)) print('------done!!!------')参考链接:https://zhuanlan.zhihu.com/p/399689868 日常学习记录,一起交流讨论吧!侵权联系~ |
CopyRight 2018-2019 实验室设备网 版权所有 |