Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何利用python中的图像制作电影_Python_Image_Video_Screenshot - Fatal编程技术网

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

如何利用python中的图像制作电影,python,image,video,screenshot,Python,Image,Video,Screenshot,我目前试图用图像制作一部电影,但我找不到任何有用的东西 以下是我目前的代码: 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):

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

以下是我目前的代码:

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()

<>你可以考虑使用像FFMPEG这样的外部工具将图像合并成一个电影(见答案),或者你可以尝试使用OpenCV把这些图像组合成一个电影,比如这个例子。 我在下面附加了一个剪掉的代码,我用来将一个名为“图像”的文件夹中的所有png文件合并成一个视频

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()

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

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

但是感谢您的帮助:)

下面是一个使用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')

我使用
ffmpeg-python
绑定。你可以找到更多的信息

导入ffmpeg
(
ffmpeg
.input('/path/to/jpeg/*.jpg',pattern_type='glob',帧速率=25)
.output('movie.mp4')
.run()
)

这实际上并不总是适用于ubuntu,当我在我的Windows10上用Python 3.6和opencv 3.3.1创建video=cv2.VideoWriter(video_name,cv2.VideoWriter_fourcc(*'xvided'),30,(width,height))时,它在ubuntu上工作,但当:video=cv2.VideoWriter(video_name,-1,1,(width,height))FWIW时,它就不工作了,我得到一个ffmpeg转换错误。将处理cv2.VideoWriter的视频编解码器(第二个参数)的“fourcc”参数从-1更改为0解决了这个问题。如何精确帧速率?@nassim
cv2.VideoWriter(output_filename,fourcc,fps,self.\u window_shape)
发现了如何在合并所有图像时定义fps,而“-r”位定义的-r 1将是1fps,“-r 30”将是30,等等。这不是python,您只是通过python运行ffmpeg命令!为什么fps增加到60或以上后图像质量会很差?使用-vb选项提高比特率。“ffmpeg-r 1-i img%01d.png-vcodec mpeg4-y-vb 40M movie.mp4”Moviepy是一个很棒的库!我得到了”OSError:读取图像文件时数据流中断”,这可以通过以下方法解决:您可以使用“.in sorted(os.listdir(image_folder))..”对图像进行排序。注意:如果图像已编号,则可以使用“natural sorting”(自然排序)或编写循环:image_files=[]用于范围(1,20)内的img_编号:image_files.append(路径_到_images++'image_folder/image_'+str(img_number)+'.png')它可以工作,但由于某些原因,照片看起来是旋转的。有什么解决方法吗?