我有两个不同长度但分辨率相同的h264视频(640,480)。我想逐帧组合它们,使得时间T的video1的帧f1和时间T的video2的帧f2侧向出现在一帧中。所以最后你通过组合video1和video2的帧序列形成一个视频。
如何使用以下任何解决方案来实现此目的:
答案 0 :(得分:1)
我能够用这个解决问题:
import cv2
import cv
import numpy as np
capture1 = cv2.VideoCapture("video1.h264")
capture2 = cv2.VideoCapture("video2.h264")
while True:
ret1, frame1 = capture1.read()
ret2, frame2 = capture2.read()
h1, w1, d1 = capture1.get(cv.CV_CAP_PROP_FRAME_HEIGHT), capture1.get(cv.CV_CAP_PROP_FRAME_WIDTH), 3
h2, w2, d2 = capture1.get(cv.CV_CAP_PROP_FRAME_HEIGHT), capture1.get(cv.CV_CAP_PROP_FRAME_WIDTH), 3
vis = np.zeros((max(h1,h2), w1+w2, 3), np.uint8)
if frame1 is None:
frame1 = np.zeros((h1,w1,d1), np.uint8)
if frame2 is None:
frame2 = np.zeros((h2,w2,d2), np.uint8)
vis[:h1, :w1, :d1] = frame1
vis[:h2, w1:w1+w2, :d2] = frame2
cv2.imshow('Merged Frame', vis)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
capture1.release()
capture2.release()
cv2.destroyAllWindows()
以上代码也解决了不同长度视频的问题。例如:假设video1为video2,则video2将变暗,直到video1结束。
但另一个问题是,在video2变暗之后,video1的处理速度变慢了。另外,一旦视频结束,我该如何打破循环?我试图使用提到的ret1, ret2 flags
,但他们并没有突然工作