逐帧组合两个不同长度的视频,使它们出现在一个帧中,有点像视频平铺

时间:2015-10-07 15:02:11

标签: opencv ffmpeg video-capture video-processing

我有两个不同长度但分辨率相同的h264视频(640,480)。我想逐帧组合它们,使得时间T的video1的帧f1和时间T的video2的帧f2侧向出现在一帧中。所以最后你通过组合video1和video2的帧序列形成一个视频。

如何使用以下任何解决方案来实现此目的:

  • 编程
  • 软件
  • 的ffmpeg

1 个答案:

答案 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,但他们并没有突然工作