读取的若干视频大小相同
import cv2
# 读取三个视频文件
video1 = cv2.VideoCapture('video1.avi')
video2 = cv2.VideoCapture('video2.avi')
video3 = cv2.VideoCapture('video3.avi')
save_path = 'output.avi' # 保存路径
fourcc = cv2.VideoWriter_fourcc(*'XVID') # 编码类型
fps = video1.get(cv2.CAP_PROP_FPS) # 获取视频帧率
width = int(video1.get(cv2.CAP_PROP_FRAME_WIDTH)) # 获取视频的宽
height = int(video1.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 获取视频的高
# 创建输出视频文件
out = cv2.VideoWriter(save_path, fourcc, fps, (3 * width, height))
# 逐帧读取视频并拼接
while True:
# 从三个视频中读取一帧
ret1, frame1 = video1.read()
ret2, frame2 = video2.read()
ret3, frame3 = video3.read()
# 如果其中任意一个视频已经读取完毕,则退出循环
if not ret1 or not ret2 or not ret3:
break
# 将三个帧拼接成一个更宽的图像
result = cv2.hconcat([frame1, frame2, frame3])
# 将拼接后的帧写入输出视频
out.write(result)
# 释放资源
video1.release()
video2.release()
video3.release()
out.release()
cv2.destroyAllWindows()
在这个程序中,我们首先使用
cv2.VideoCapture()
函数分别读取了三个输入视频
video1
、
video2
和
video3
。然后,我们使用
video1.get()
函数获取了这些视频的帧率、宽度和高度,以便在创建输出视频时使用。接下来,我们使用
cv2.VideoWriter()
函数创建了输出视频
out
,并指定了输出视频的格式、帧率和大小。
在逐帧读取输入视频时,我们使用
video1.read()
函数从三个输入视频中分别读取一帧,并将这三帧使用
cv2.hconcat()
函数拼接成一个更宽的图像。最后,我们使用
out.write()
函数将拼接后的帧写入输出视频。
需要注意的是,我们在处理输入视频时,使用了一个
while
循环,直到其中任意一个视频读取完毕才退出循环。这是因为,如果其中任意一个视频比其他视频更长,那么在拼接视频时就需要保证所有视频的帧数相同。在处理视频时,还需要注意释放资源,以避免内存泄漏。
常见的编码类型:
cv2.VideoWriter_fourcc(*'XVID') # MPEG-4编码类型,文件名后缀为.avi,可指定输出视频的大小
cv2.VideoWriter_fourcc(*'PIM1') # MPEG-1编码类型,文件名后缀为.avi
cv2.VideoWriter_fourcc(*'MP4V') # MPEG-4编码,文件名后缀为.mp4,可指定输出视频的大小
cv2.VideoWriter_fourcc(*'FLV1') # Flash视频,文件名后缀为.flv
版权声明:本文为weixin_48158964原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。