我正在尝试拍摄本地文件夹中的两张图像,并使用OpenCV的Videowriter函数从这些图像创建视频。我使用的FrameRate为1,所以这将创建一个时长为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秒。
我想在论坛上可能也有类似的问题,但我找不到。如果有人能给我指出解决方案,那就太好了。
谢谢。
发布于 2019-06-09 03:18:53
下面的代码片段应该可以解决您的问题。请注意,您必须指定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()发布于 2020-12-24 20:09:19
在这里,你可以根据你有多少帧和你想要制作多少秒的视频来动态计算fps。
请看下面的代码:
import cv2
import os
image_folder = 'images'
video_name = 'video.avi'
fourcc = cv2.VideoWriter_fourcc(*'XVID') # define the video codec
images = [img for img in os.listdir(image_folder) if img.endswith(".png")]
img_count = len(images)
video_secs = 10
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape
video = cv2.VideoWriter(video_name, fourcc, float(img_count/video_secs), (width, height))
for image in images:
video.write(image)
cv2.destroyAllWindows()
video.release()https://stackoverflow.com/questions/56507536
复制相似问题