1

我试图编写一个 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 张照片。生成的两张图片显示 0.05 秒的间隔,最多只有 12 fps。

因为有像 Monosnap 这样支持 60fps 的屏幕录制程序,我想应该有更好的方法来做到这一点,我正在尝试找到如何加快速度。我怎样才能将时间间隔降低到 0.0167 秒或更短?

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

4

1 回答 1

1

看看 à MSS,它速度极快,不需要 3rd 方模块。

于 2018-06-23T08:13:16.733 回答