Python图像帧转换为视频。

14

我正在编写一个Python/Django应用程序,需要进行图像处理,然后将这些图像合并成一个视频(每个图像都是帧)。 图像处理很容易。 我使用的是PIL,但在转换为视频的部分上遇到了难题。 我找到了pyffmpeg,但似乎只能将视频解码为帧,而不能反过来。 尽管我可能错过了什么。 我也听说pythonMagick(imagemagick wrapper)可以做到这一点,但在文档中找不到关于编码的任何信息。

这将在Linux服务器上运行,并且必须是Python(因为应用程序是在Python中编写的)。

我应该使用什么?

4个回答

14

使用以下命令安装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”,它们位于images文件夹中。

希望这可以帮到您。


10

我在没有仔细查看答案的情况下为这个问题设置了赏金。当我快速检查OpenCV时,我认为它是用于分析帧而不是创建视频的。不过,我使用了类似于链接答案的代码进行了测试,并且非常容易地创建了一个视频。 - Dan Roberts

1
你可以使用Popen在子进程中运行ffmpeg。

0
如果您有一个图像文件夹需要制作成视频,您可以调整参数并按顺序排列帧。
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()

如何配置 FPS? - Haha TTpro
使用time模块,找到结束时间和开始时间之间的差值。将该值除以1,即可得到FPS。 - user760664

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接