Python将多个视频帧组合成.mp4视频 您所在的位置:网站首页 一帧帧的画面怎么拼成视屏 Python将多个视频帧组合成.mp4视频

Python将多个视频帧组合成.mp4视频

2024-07-10 18:31| 来源: 网络整理| 查看: 265

已经有很多文章描述了如何将视频拆分成视频帧,例如: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 实验室设备网 版权所有