制作提取帧的视频时出错



我将视频帧提取到一个名为"images"的文件夹中。让我们考虑一下:

答0.jpg 回答 1.jpg 回答 2.jpg 回答 3.jpg 和。。。。。。

现在我想制作这些帧的视频。

我有此代码可以从提取的视频中创建视频

import cv2
import os

image_folder = 'images'
video_name = 'video.avi'

images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
for i in range(len(images)):
image_name = 'a' + str(i) + '.jpg'
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape
video = cv2.VideoWriter(video_name, 0, 1, (width, height))
video.write(cv2.imread(os.path.join(image_folder, image_name)))
cv2.destroyAllWindows()
video.release()

问题是当我制作视频时,我得到了视频,但帧是随机排序的,我如何按顺序排列它们? 感谢您的帖子 我该如何解决这个问题?

正如您所说,您的框架没有顺序,这意味着当您通过os.listdir获取它们时,它们没有按顺序排列。您还说它们的名称类似于 a0、a1 等,因此您可以这样做:

images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
for i in range(len(images)):
image_name = 'a' + str(i) + '.jpg'
video.write(cv2.imread(os.path.join(image_folder, image_name)))

编辑

您将视频编写器放置在循环中,以便每次都重新创建它。这次我已经附加了应该可以工作的完整代码。

import cv2
import os
image_folder = 'images'
video_name = 'video.avi'
images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
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 i in range(len(images)):
image_name = 'a' + str(i) + '.jpg'
video.write(cv2.imread(os.path.join(image_folder, image_name)))
cv2.destroyAllWindows()
video.release()

最新更新