我最近的工作涉及以编程方式制作视频。在 python 中,典型的工作流程如下所示:
import subprocess, Image, ImageDraw
for i in range(frames_per_second * video_duration_seconds):
img = createFrame(i)
img.save("%07d.png" % i)
subprocess.call(["ffmpeg","-y","-r",str(frames_per_second),"-i", "%07d.png","-vcodec","mpeg4", "-qscale","5", "-r", str(frames_per_second), "video.avi"])
此工作流程为视频中的每一帧创建一个图像并将其保存到磁盘。保存所有图像后,调用 ffmpeg 从所有图像构建视频。
将图像保存到磁盘(不是在内存中创建图像)消耗了这里的大部分周期,并且似乎没有必要。有没有办法执行相同的功能,但不将图像保存到磁盘?因此,将调用 ffmpeg 并在构建后立即构建图像并将其馈送到 ffmpeg。