使用open cv进行视频拼接

niwlg2el  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(298)

我看到关于使用open cv进行图像拼接的问题和答案。是否可以使用open cv缝合视频。特别是使用python?我已经用OpenCV安装了pycharm,并且能够让它播放一个录制的文件。但如果能把这两个字读出来,并把它们缝合在一起,那就太好了。如果有人能给我指一些我还没找到的教程,我将不胜感激。谢谢

ijnw1ujt

ijnw1ujt1#

你可以用 OpenCV 具有 for/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 . 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()

相关问题