使用Open CV进行视频缝合



我看到了关于使用Open CV进行图像拼接的问答。是否可以使用Open CV缝合视频。特别是使用Python?我安装了Pycharm和Open CV,可以让它播放一个录制的文件。但如果能把它读成两个并把它们缝合在一起,那就太好了。如果有人能给我指一些我还没找到的教程,我将不胜感激。感谢

您可以使用OpenCVfor/while循环从两个视频中逐帧读取,将帧缝合在新帧中(使用numpy-即hstack()(,并将其保存在新文件中(也可以逐帧(

稍后我创建示例。


但使用MoviePy、ffmpeg-python或Manim等专用模块可能更简单
可能所有这些都使用ffmpeg程序,该程序具有许多功能和筛选器。


MoviePy的示例-它创建一行中有两个电影的数组,但它可以创建多行多列的数组。

from moviepy.editor import *
clip1 = VideoFileClip('input1.mp4')
clip2 = VideoFileClip('input2.mp4')

final_clip = clips_array([[clip1,clip2]])  # two videos in one row 
final_clip.write_videofile('output.mp4')

一列中的两个视频

final_clip = clips_array([[clip1], [clip2]])  # two videos in one column

和阵列2x2视频

final_clip = clips_array([[clip1, clip2], [clip3,clip4]])

编辑:

CV编码。

它更长、更复杂,但它显示视频。

import cv2
import numpy as np
clip1 = cv2.VideoCapture('input1.mp4')
clip2 = cv2.VideoCapture('input2.mp4')
width  = clip1.get(cv2.CAP_PROP_FRAME_WIDTH)
height = clip1.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps    = clip1.get(cv2.CAP_PROP_FPS) 
print('fps:', fps)              
video_format = cv2.VideoWriter_fourcc(*'MP42')  # .avi 
final_clip   = cv2.VideoWriter('output.avi', video_format, fps, (int(width), int(height)))
delay = int(1000/fps)
print('delay:', delay)              
while True:
ret1, frame1 = clip1.read()
ret2, frame2 = clip1.read()    
if not ret1 or not ret2:
break

final_frame = np.vstack([frame1, frame2])  # two videos in one row
final_clip.write(final_frame)
cv2.imshow('Video', final_frame)
key = cv2.waitKey(delay) & 0xFF

if key == 27:
break

cv2.destroyWindow('Video')
clip1.release()
clip2.release()

最新更新