好吧,我知道了。感谢LordNeckbeard建议使用image2pipe。我必须使用jpg编码而不是png,因为带png的image2pipe在我的ffmpeg版本上不起作用。第一个脚本与您的问题的代码基本相同,除了我实现了一个简单的图像创建功能,即仅创建从黑色到红色的图像。我还添加了一些代码来计时执行时间。
串行执行
import subprocess, Imagefps, duration = 24, 100for i in range(fps * duration): im = Image.new("RGB", (300, 300), (i, 1, 1)) im.save("%07d.jpg" % i)subprocess.call(["ffmpeg","-y","-r",str(fps),"-i", "%07d.jpg","-vprec","mpeg4", "-qscale","5", "-r", str(fps), "video.avi"])并行执行(不将任何图像保存到磁盘)
import Imagefrom subprocess import Popen, PIPEfps, duration = 24, 100p = Popen(['ffmpeg', '-y', '-f', 'image2pipe', '-vprec', 'mjpeg', '-r', '24', '-i', '-', '-vprec', 'mpeg4', '-qscale', '5', '-r', '24', 'video.avi'], stdin=PIPE)for i in range(fps * duration): im = Image.new("RGB", (300, 300), (i, 1, 1)) im.save(p.stdin, 'JPEG')p.stdin.close()p.wait()结果很有趣,我运行了每个脚本3次以比较性能: 串行:
12.906232118612.896506071112.9360799789
平行:
8.677976846698.571393966678.38926696777
因此,似乎并行版本的速度要快1.5倍左右。



