【问题标题】:Quicktime Player recording with Applescript broken on Mavericks?在 Mavericks 上使用 Applescript 录制 Quicktime Player 录音?
【发布时间】:2014-05-05 17:56:04
【问题描述】:

我有这个简单的代码:

tell application "QuickTime Player"
activate
new screen recording
document "Screen Recording" start
delay 10
document "Screen Recording" stop
end tell

这可以在我的 10.8 机器上录制 10 秒的电影,没有问题。 但是在 10.9 mac-mini 上,QT 挂在上面的停止动作上。 它挂在窗口上,显示“正在完成录制”消息。 我必须强制退出它,但还是一样。如果我手动执行这些步骤,它们会起作用。但是使用 AppleScript 甚至使用 Automator 的相同步骤都有同样的问题。

我升级到 10.9.2,但仍然是同样的问题。

这是一个已知的错误吗?有什么建议可以解决吗?

谢谢。

【问题讨论】:

  • 仅供参考:我自己检查了您的脚本,并在 10.9 上发现了同样的挂起问题。所以你的问题是有效的。不幸的是,我没有解决方案。
  • 感谢 regulus6633 检查您的结果。这似乎是一个非常奇怪的错误。

标签: macos applescript quicktime


【解决方案1】:

我做了这样的事情来记录 CI 的屏幕,它总是对我有用:

set filePath to (path to desktop as string) & "ScreenRecordingFile.mov"

tell application "System Events" to tell process "Simulator"
	set frontmost to true
end tell

tell application "QuickTime Player"
	activate
	set newScreenRecording to new screen recording
	delay 1
	tell application "System Events"
		tell process "QuickTime Player"
			set frontmost to true
			key code 49
		end tell
	end tell
	tell newScreenRecording
		start
		delay 15
		stop
	end tell
	export document 1 in (file filePath) using settings preset "720p"
	close document 1 saving no
end tell

【讨论】:

    【解决方案2】:

    需要两个技巧:

    1. 在开始之前向 QuickTime Player 发送一个空格键以避免Finishing... 对话框卡住。 (感谢@outring)
    2. 我们需要模拟鼠标点击。这并不容易,我们需要通过 CoreGraphics(又名 Quartz)来完成。我们可以使用 Objective-C(需要编译)、Python(通过 PyObjc 桥接)或 Swift 编写。
    3. 不知何故,在单击鼠标后大约 2 秒开始录制,因此我们需要休眠 12 秒才能播放 10 秒的视频。

    一个工作脚本将如下所示:

    tell application "QuickTime Player"
       activate
       new screen recording
       tell application "System Events" to tell process "QuickTime Player" to key code 49
       document "Screen Recording" start
       do shell script "python -c 'import Quartz; mouse_location = Quartz.NSEvent.mouseLocation(); [ Quartz.CGEventPost(Quartz.kCGHIDEventTap, Quartz.CGEventCreateMouseEvent(None, mouse_action, mouse_location, Quartz.kCGMouseButtonLeft)) for mouse_action in [ Quartz.kCGEventLeftMouseDown, Quartz.kCGEventLeftMouseUp ] ]'"
       delay 12
       document "Screen Recording" stop
    end tell
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,发现问题不在stop,而是在非交互式start,所以我尝试开始(伪)交互式录制完美解决。

      tell application "QuickTime Player"
          activate
          new screen recording
          activate
          tell application "System Events" to tell process "QuickTime Player"
              key code 49
          end tell
          document "Screen Recording" start
          delay 10
          document "Screen Recording" stop
      end tell
      

      它仍然调用start 而不是模拟点击,因为我还没有找到让它工作的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-01
        相关资源
        最近更新 更多