【问题标题】:Error during making video of extracted frames制作提取帧的视频时出错
【发布时间】:2020-09-17 08:56:10
【问题描述】:

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

a0.jpg a1.jpg a2.jpg a3.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()

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

【问题讨论】:

  • 能否打印图像的值并显示图像的名称。
  • 你到底是什么意思?它们都是从一个视频中提取的,大小相同,名称分别为a0.jpg、a1.jpg、a2.jpg等。

标签: python image opencv video frame


【解决方案1】:

正如您所说,您的框架没有按顺序排列,这意味着当您通过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()

【讨论】:

  • 我修改了代码(见我的帖子)。但现在的问题是它不播放保存的视频。我该如何解决?
  • 我在我的帖子中放置了一个编辑部分。现在检查它是否可以解决您的问题。
  • 抱歉,还是不行,视频不能播放。
猜你喜欢
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 2014-03-20
  • 2020-07-20
  • 1970-01-01
相关资源
最近更新 更多