是比Python的多处理更快的东西吗?在OS X中进行屏幕录制的过程?

时间:2018-06-21 04:02:59

标签: python multiprocessing screenshot video-capture pixbuf

我试图编写一个Python程序来记录 当前屏幕在OS X中以任意fps表示,例如60fps。

捕获我发现的当前屏幕的最快方法 正在使用subprocess.call([[“ screencapture”,“ pic.bmp”])。但 截屏花了大约0.16秒,所以我 依次拍摄屏幕截图,其帧速率不能超过6 fps。

相反,我尝试使用Python的multiprocessing.Process(第一次)通过以0.0167s的间隔启动新进程来制作屏幕截图,以制作60fps的视频。我首先尝试遵循以下代码:

from multiprocessing import Process
from subprocess import call
from PIL import Image
import time

def capture(file_name):
    call(["screencapture", file_name])

p1=Process(target=capture, args=("f1",))
p1.start()

p2=Process(target=capture, args=("f2",))
p2.start()

我测试了上面的代码以拍摄2张屏幕图片,其中 Google的秒表正在运行。生成的两张图片显示间隔为0.05秒,最多仅为12 fps。

因为有像Monosnap这样的屏幕录制程序支持60fps,所以我想应该有一个更好的方法来做到这一点,而我正试图找到提高速度的方法。如何将间隔降低到0.0167秒或更短?

Edit1:这是一个更新,以回应声称这是Take screenshots **quickly** from python的可能副本。实际上,PyGTK sample的FionaSarah的解决方案来自原始问题的第一个链接。但是此解决方案似乎不适用于PyGObject的gi.repository中的当前版本的Gdk。 FionaSarah使用的gtk.gdk.Pixbuf.get_from_drawable在当前版本的Gdk中找不到。看来可以使用Gtk.OffscreenWindow来代替,或者应该使用this中的Xlib。

1 个答案:

答案 0 :(得分:1)

看看àMSS,它的速度非常快,并且不需要第三方模块。