如何用python中的图像制作电影

Vic*_*tor 24 python video screenshot image

我目前试图用图像制作电影,但我找不到任何有用的东西.

到目前为止,这是我的代码:

import time

from PIL import  ImageGrab

x =0

while True:
    try:
        x+= 1
        ImageGrab().grab().save('img{}.png'.format(str(x))
    except:
        movie = #Idontknow
        for _ in range(x):
            movie.save("img{}.png".format(str(_)))

movie.save()
Run Code Online (Sandbox Code Playgroud)

Bob*_*rph 53

您可以考虑使用像ffmpeg这样的外部工具将图像合并到电影中(请参阅此处的答案),或者您可以尝试使用OpenCv将图像组合成电影,就像这里的示例一样.

我在下面附上一个代码剪切我用来将所有png文件从一个名为"images"的文件夹组合成一个视频.

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()
Run Code Online (Sandbox Code Playgroud)

  • 当我创建像video = cv2.VideoWriter(video_name,cv2.VideoWriter_fourcc(*'XVID'),30,(宽度,高度))时,它在Ubuntu上运行但是在以下情况下无效:video = cv2.VideoWriter(video_name, - 1,1,(宽度,高度)) (6认同)
  • @nassim `cv2.VideoWriter(output_filename, fourcc, fps, self._window_shape)` 找到[此处](https://www.programcreek.com/python/example/72134/cv2.VideoWriter) (4认同)
  • 这实际上并不总是适用于ubuntu https://github.com/ContinuumIO/anaconda-issues/issues/223 (2认同)
  • 感谢您的好回答。我建议改进解释并链接到 VideoWriter 的文档(相关部分)。这将使您更容易了解需要哪些数据类型以及各个参数的作用。 (2认同)

Vic*_*tor 28

谢谢,但我找到了使用ffmpeg的替代解决方案:

def save():
    os.system("ffmpeg -r 1 -i img%01d.png -vcodec mpeg4 -y movie.mp4")
Run Code Online (Sandbox Code Playgroud)

但是谢谢你的帮助:)

  • 这不是python,您只是通过python运行ffmpeg命令! (5认同)
  • fps用"-r"位定义 - 所以"-r 1"为1 fps," - r 30"为30,等等. (3认同)
  • 为什么 fps 提高到 60 或以上后图像质量变得很糟糕? (3认同)

小智 15

这是一个使用 moviepy 的最小示例。对我来说,这是最简单的解决方案。

import os
import moviepy.video.io.ImageSequenceClip
image_folder='folder_with_images'
fps=1

image_files = [image_folder+'/'+img for img in os.listdir(image_folder) if img.endswith(".png")]
clip = moviepy.video.io.ImageSequenceClip.ImageSequenceClip(image_files, fps=fps)
clip.write_videofile('my_video.mp4')
Run Code Online (Sandbox Code Playgroud)

  • Moviepy https://zulko.github.io/moviepy/examples/examples.html 是一个很棒的库! (2认同)

Jia*_*Cao 10

我使用ffmpeg-python绑定。您可以在此处找到更多信息。

import ffmpeg
(
    ffmpeg
    .input('/path/to/jpegs/*.jpg', pattern_type='glob', framerate=25)
    .output('movie.mp4')
    .run()
)
Run Code Online (Sandbox Code Playgroud)