python图像帧到视频

python图像帧到视频,python,image-processing,video-encoding,Python,Image Processing,Video Encoding,我正在编写一个python/django应用程序,它需要进行图像处理,然后将图像合并到视频中(每个图像都是一帧)。图像处理很容易。我正在使用PIL,但对于转换为视频部分,我被卡住了。我发现了pyffmpeg,但它似乎只是将视频解码成帧,而不是相反。虽然我可能错过了什么。我还听说pythonMagick(imagemagick包装器)可以做到这一点,但我似乎在文档中找不到任何关于编码的信息 这是在linux服务器上运行的,必须是python(因为应用程序就是在python中运行的) 我应该使用什么

我正在编写一个python/django应用程序,它需要进行图像处理,然后将图像合并到视频中(每个图像都是一帧)。图像处理很容易。我正在使用PIL,但对于转换为视频部分,我被卡住了。我发现了pyffmpeg,但它似乎只是将视频解码成帧,而不是相反。虽然我可能错过了什么。我还听说pythonMagick(imagemagick包装器)可以做到这一点,但我似乎在文档中找不到任何关于编码的信息

这是在linux服务器上运行的,必须是python(因为应用程序就是在python中运行的)


我应该使用什么?

使用OpenCV和python绑定。有
cv.WriteFrame
功能

您可以使用Popen在子流程中运行ffmpeg

首先使用以下命令安装ffmpeg:sudo apt install ffmpeg

import os
os.system("ffmpeg -f image2 -r 1/5 -i ./images/swissGenevaLake%01d.jpg -vcodec mpeg4 -y ./videos/swissGenevaLake.mp4")
详情:

上述代码从存储在images文件夹中的三个图像文件创建视频。每个图像在视频中播放5秒钟(因为参数:-r 1/5)。图像文件夹中的三个文件名分别为:“swissGenevaLake1.jpg”、“swissGenevaLake2.jpg”和“swissGenevaLake3.jpg”


希望这对你有所帮助。

如果你有一个图像文件夹可以作为视频框。可以调整参数并按排序方式排列帧

import cv2
import os
from tqdm import tqdm
import glob
#TODO
image_folder = '<Enter your target frames folder here>/*'
video_name = 'Dir to store the video'#save as .avi
#is changeable but maintain same h&w over all  frames
width=640 
height=400 
#this fourcc best compatible for avi
fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
video=cv2.VideoWriter(video_name,fourcc, 2.0, (width,height))



for i in tqdm((sorted(glob.glob(image_folder),key=os.path.getmtime))):
     x=cv2.imread(i)
     video.write(x)

cv2.destroyAllWindows()
video.release()
导入cv2
导入操作系统
从TQM导入TQM
导入glob
#待办事项
图像_文件夹='/*'
video_name='存储视频的目录'#另存为.avi
#可更改,但在所有帧上保持相同的h&w
宽度=640
高度=400
#此fourcc最适合avi
fourcc=cv2.VideoWriter_fourcc('M','J','P','G'))
video=cv2.VideoWriter(视频名称,fourcc,2.0,(宽度,高度))
对于tqdm中的i((已排序(glob.glob(image_文件夹),key=os.path.getmtime)):
x=cv2.imread(i)
视频写入(x)
cv2.destroyAllWindows()
video.release()

好吧,我为这个问题设置了悬赏,但没有仔细查看答案。当我快速检查OpenCV时,我认为它是用于分析帧而不是创建视频。我用与链接答案类似的代码做了一个测试,并很容易地创建了一个视频。如何配置fps?使用时间模块,找出结束时间和开始时间之间的差异。将该值除以1,将得到FPS