Python JPEG到电影

时间:2012-03-20 21:55:26

标签: python image video

我正在寻找一种方法,用Python将图像文件目录(例如JPEG)连接到电影文件(MOV,MP4,AVI)。理想情况下,这也允许我从该目录中获取多个JPEG并将它们“粘贴”到网格中,该网格是电影文件的一帧。哪些模块可以实现这个目标?

4 个答案:

答案 0 :(得分:8)

您可以使用Python interface of OpenCV,特别是VideoWriter可能会完成这项工作。根据我对该文档的理解,以下内容可以满足您的需求:

w = cvCreateVideoWriter(filename, -1, <your framerate>, 
                        <your frame size>, is_color=1)

并在循环中为每个文件:

cvWriteFrame(w, frame)

请注意,我没有尝试过这段代码,但我认为我的想法是正确的。请告诉我它是否有效。

答案 1 :(得分:2)

这是我所拥有的一个脚本的简化版本,它从一个视频中获取帧并修改它们(该代码取出),然后写入另一个视频。也许它会有所帮助。

import cv2

fourcc = cv2.cv.CV_FOURCC(*'XVID')
out = cv2.VideoWriter('out_video.avi', fourcc, 24, (704, 240))

c = cv2.VideoCapture('in_video.avi')

while(1):
  _, f = c.read()
  if f is None:
    break

  f2 = f.copy() #make copy of the frame
  #do a bunch of stuff (missing)

  out.write(f2)  #write frame to the output video

out.release()
cv2.destroyAllWindows()
c.release()

如果您有一堆图像,请将它们加载到一个循环中,然后将一个图像一个接一个地写入您的视频。

答案 2 :(得分:1)

我终于进入了该项目的工作版本,这使我陷入了这个问题。 现在,我想用我所获得的知识做出贡献。 这是我的解决方案,用于将当前目录中的所有图片转换为视频,然后将其集中在黑色背景中,因此该解决方案适用于不同尺寸的图像。

import glob
import cv2
import numpy as np

DESIRED_SIZE = (800, 600)
SLIDE_TIME = 5 # Seconds each image
FPS = 24

fourcc = cv2.VideoWriter.fourcc(*'X264')
writer = cv2.VideoWriter('output.avi', fourcc, FPS, DESIRED_SIZE)

for file_name in glob.iglob('*.jpg'):
    img = cv2.imread(file_name)

    # Resize image to fit into DESIRED_SIZE
    height, width, _ = img.shape
    proportion = min(DESIRED_SIZE[0]/width, DESIRED_SIZE[1]/height)
    new_size = (int(width*proportion), int(height*proportion))
    img = cv2.resize(img, new_size)

    # Centralize image in a black frame with DESIRED_SIZE
    target_size_img = np.zeros((DESIRED_SIZE[1], DESIRED_SIZE[0], 3), dtype='uint8') 
    width_offset = (DESIRED_SIZE[0] - new_size[0]) // 2
    height_offset = (DESIRED_SIZE[1] - new_size[1]) // 2
    target_size_img[height_offset:height_offset+new_size[1], 
                    width_offset:width_offset+new_size[0]] = img

    
    for _ in range(SLIDE_TIME * FPS):
        writer.write(target_size_img)

writer.release()

答案 3 :(得分:0)

解决方案应该使用python并生成电影文件对您来说真的很重要吗?或者这些仅仅是您对解决方案的期望?

如果您只是希望能够将一堆jpeg文件作为电影播放,那么您可以不使用python或使用.avi / .mov / mp4文件来混淆计算机,只需转到{{3}并使用鼠标从硬盘驱动器中选择图像文件。 “电影”在您的Web浏览器中播放。