我正在编写一个python / django应用程序,它需要进行图像处理,然后将图像组合成一个视频(每个图像都是一个帧)。图像处理很容易。我正在使用PIL,但是对于转换为视频部分,我被卡住了。我发现pyffmpeg但似乎只是将视频解码为帧,而不是相反。虽然我可能错过了什么。我也听说pythonMagick(imagemagick包装器)可以做到这一点,但我似乎无法在文档中找到有关编码的任何内容。
这是在linux服务器上运行的,必须是python(因为那是应用程序所在的)。
我应该使用什么?
答案 0 :(得分:7)
使用OpenCV和python绑定。有cv.WriteFrame
功能。 Similar question and answer
答案 1 :(得分:2)
你可以使用Popen来在子进程中运行ffmpeg。
答案 2 :(得分:2)
首先使用以下命令安装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"在图像文件夹中。
希望这有帮助。
答案 3 :(得分: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()