我将视频帧提取到名为“ images”的文件夹中。让我们考虑:
a0.jpga1.jpga2.jpga3.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()