我正在尝试拍摄本地文件夹中的2张图像,并使用OpenCV的Videowriter功能从这些图像创建视频。 我正在使用1的FrameRate。因此,这将创建2秒持续时间的视频。下面是代码(我从here获得了代码):
import cv2
import os
image_folder = 'images'
video_name = 'video.avi'
images = [img for img in os.listdir(image_folder) if img.endswith(".png")]
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape
video = cv2.VideoWriter(video_name, 0, 1, (width,height))
for image in images:
video.write(cv2.imread(os.path.join(image_folder, image)))
cv2.destroyAllWindows()
video.release()
目标:我想创建一个10秒的视频,将这2张图像分别显示5秒。
我认为论坛中可能存在类似的问题,但我找不到它。如果有人可以指出解决方案,那就太好了。
谢谢。
答案 0 :(得分:1)
下面的代码段应该可以解决您的问题。请注意,您将必须指定each_image_duration
。我使用此变量将视频中的每个图像写入特定的持续时间。对于此用例,您必须将fps
保留为1.0
,以便为1.0 sec
显示每个视频帧。这将使cv2.Videowriter
中的第三个参数成为可能。
import cv2
import os
image_folder = 'images'
video_name = 'video.avi'
each_image_duration = 5 # in secs
fourcc = cv2.VideoWriter_fourcc(*'XVID') # define the video codec
images = [img for img in os.listdir(image_folder) if img.endswith(".png")]
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape
video = cv2.VideoWriter(video_name, fourcc, 1.0, (width, height))
for image in images:
for _ in range(each_image_duration):
video.write(cv2.imread(os.path.join(image_folder, image)))
cv2.destroyAllWindows()
video.release()