微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Open CV 拼接视频

如何解决使用 Open CV 拼接视频

我看到有关使用 Open CV 拼接图像的问题和答案。是否可以使用 Open CV 拼接视频。具体使用Python?我已经安装了 Open CV 的 Pycharm,并且能够让它播放一个录制的文件。但是,让它阅读两个并将它们拼接在一起会很棒。如果有人能指出我尚未找到的任何教程,我将不胜感激。 谢谢

解决方法

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

稍后我创建示例。


但使用专门的模块(如 MoviePyffmpeg-pythonManim)可能更简单。
可能他们都使用具有许多功能和过滤器的程序 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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。