如何解决使用 Open CV 拼接视频
我看到有关使用 Open CV 拼接图像的问题和答案。是否可以使用 Open CV 拼接视频。具体使用Python?我已经安装了 Open CV 的 Pycharm,并且能够让它播放一个录制的文件。但是,让它阅读两个并将它们拼接在一起会很棒。如果有人能指出我尚未找到的任何教程,我将不胜感激。 谢谢
解决方法
您可以使用 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
编码。
它更长更复杂,但它显示视频。
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 举报,一经查实,本站将立刻删除。