Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比Python更快的东西';在OSX中进行屏幕录制的过程?_Python_Multiprocessing_Screenshot_Video Capture_Pixbuf - Fatal编程技术网

比Python更快的东西';在OSX中进行屏幕录制的过程?

比Python更快的东西';在OSX中进行屏幕录制的过程?,python,multiprocessing,screenshot,video-capture,pixbuf,Python,Multiprocessing,Screenshot,Video Capture,Pixbuf,我试图编写一个Python程序来记录 当前屏幕在OSX中以任意fps显示,比如说60fps 我找到的捕获当前屏幕的最快方法 正在使用subprocess.call([“屏幕捕获”,“pic.bmp”])。但是 拍摄一张截图花了大约0.16秒,所以我 通过按顺序拍摄屏幕快照,无法获得超过6 fps的帧速率 取而代之的是,我尝试使用Python的multiprocessing.Process(这是第一次)通过以0.0167秒的间隔启动新进程来拍摄屏幕截图,以制作一个60帧/秒的视频。我首先尝试使用以

我试图编写一个Python程序来记录 当前屏幕在OSX中以任意fps显示,比如说60fps

我找到的捕获当前屏幕的最快方法 正在使用subprocess.call([“屏幕捕获”,“pic.bmp”])。但是 拍摄一张截图花了大约0.16秒,所以我 通过按顺序拍摄屏幕快照,无法获得超过6 fps的帧速率

取而代之的是,我尝试使用Python的multiprocessing.Process(这是第一次)通过以0.0167秒的间隔启动新进程来拍摄屏幕截图,以制作一个60帧/秒的视频。我首先尝试使用以下代码:

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()
我测试了上面的代码,拍了两张屏幕的照片 谷歌的秒表正在运行。结果显示,两张图片的间隔为0.05秒,最多只有12帧

因为有像Monosnap这样支持60fps的屏幕录制程序,我想应该有更好的方法来实现这一点,我正试图找到如何加快速度。如何将间隔降低到0.0167秒或更少


Edit1:这是一个更新,以回应声称这是一个可能的副本。实际上,从最初问题的第一个链接开始,就有FionaSarah的解决方案。但这个解决方案似乎无法与PyGObject的gi.repository中当前版本的Gdk一起工作。FionaSarah使用gtk.gdk.Pixbuf.get_from_drawable,这在当前版本的gdk中找不到。似乎可以使用Gtk.OffscreenWindow,或者应该从中使用Xlib

看看吧,它速度非常快,不需要第三方模块。

你确定谷歌秒表的更新频率高于12 fps吗?你需要一个库(你可以自己编写)来访问一些低级缓冲区,而不是每次需要帧时启动和停止大型应用程序。疯狂物理学家:我不确定。但是当我在测试秒表时,两张图片上的时间差在0.041s到0.045s之间。疯狂物理学家:事实上,使用call([“screenscapture”,file_name])是一种改进,因为我最初使用的是PIL.ImageGrab.grab(),速度更慢。我也想找到一个更快的方法来访问当前的屏幕像素值,但我找不到任何有用的参考。可能重复的谢谢!在链接中用mss截图大约需要0.2秒。你能分享你的代码吗?这是几种方法,取决于你真正想要什么。谢谢你的兴趣,但我找到了我想要的。我只需要捕捉整个屏幕的某个分区。通过将我的原始代码的第7行替换为“call([“screenscapture”、“-x”、“-r300547300200”,file_name]),只需大约0.0023秒即可拍摄指定子区域的屏幕截图。键入“man screenscapture”显示屏幕截图的一些主页。但不知何故,只要在终端上键入“screenscapture-p”就可以知道手册页中没有写的内容,特别是关于-R.FTR的内容。您也可以使用MSS捕获一个区域。无论如何,很高兴你找到了一个解决方案:)有没有机会为Debian/Ubuntu发行版制作一个
sudo apt安装MSS