尝试使用AppleScript在Quicktime中打开、修改和保存文件

尝试使用AppleScript在Quicktime中打开、修改和保存文件,applescript,quicktime,Applescript,Quicktime,我尝试使用AppleScript自动化对一堆文件进行小编辑的过程,但没有成功。更具体地说,我想要一个脚本,它将: 在QuickTime中打开特定文件 将其拆分为指定长度的段 以与原始段相同的格式和质量将每个段另存为单个文件 关闭文档 最重要的是,我希望脚本基本上是独立/无人操作的 这里有一些关于我尝试做什么的更多信息: 前一段时间StackOverflow上的另一个用户,但该建议不起作用 从我所能找到的几个在线讨论中,似乎苹果在第7版之后拿走了QuickTime的一些功能。我目前正在使用10.3

我尝试使用AppleScript自动化对一堆文件进行小编辑的过程,但没有成功。更具体地说,我想要一个脚本,它将:

  • 在QuickTime中打开特定文件
  • 将其拆分为指定长度的段
  • 以与原始段相同的格式和质量将每个段另存为单个文件
  • 关闭文档
  • 最重要的是,我希望脚本基本上是独立/无人操作的

    这里有一些关于我尝试做什么的更多信息:

    前一段时间StackOverflow上的另一个用户,但该建议不起作用

    从我所能找到的几个在线讨论中,似乎苹果在第7版之后拿走了QuickTime的一些功能。我目前正在使用10.3+

    这几乎完全描述了我要做的事情。正如“kryten2”所指出的,导出在新版本的QuickTime中似乎不再有效。而且,就像“VideoBeagle”一样,当我尝试调用save方法时,会出现权限错误

    VideoBeagle在那个页面上发布的代码对我不起作用。以下是一个修改版本:

    tell application "QuickTime Player"
        open basefile --argument passed to script when executed
    
        set the clipboard to "outputfile"
        delay (0.25)
        tell document 1
            trim from 0 to 60
            tell application "System Events"
                tell process "QuickTime Player"
                    keystroke "s" using command down
                    keystroke "v" using command down
                    delay 1
                    keystroke return
                    delay 3
                    #click menu item "Save..." of menu "File" of menu bar 1
                end tell
            end tell
    
            close saving no
    
        end tell
    end tell
    
    上面的代码确实在QuickTime中打开文件并将文件修剪到正确的长度,但随后它会在新窗口中创建文件的未保存副本,关闭原始文件,但不会保存新文档。当我尝试延迟并删除“修剪”功能时,它将显示保存对话框,但实际上不会保存文件

    是否有人成功地使用AppleScript和QuickTime保存文件。。。最近


    非常感谢你

    如果您拥有QuickTime Pro授权,最好使用QuickTime Player 7的导出功能(不是免费的,但非常便宜)。要做到这一点,您还需要从苹果网站下载这个旧的QT版本。它仍然可用,但苹果推出的QuickTime Player 7基本上只有读取功能

    不过,如果您想坚持使用QuickTime Player(在版本7之后),则在保存时脚本编写中存在一些已知问题。解决方法是模拟GUI的一部分,就像您已经开始做的那样

    下面的脚本要求处理电影文件,为修改的视频定义新的路径和名称,从第2秒修剪到第6秒,然后使用GUI界面保存和关闭。我发表了许多评论,以确保您能够理解并根据自己的需要进行更新:

    -- select file to be processed
    set myVideo to choose file with prompt "Select video to be processed"
    
    -- set new path and file name
    set newPath to ((path to desktop folder from user domain) as string) & "Test_Folder"
    set PPath to POSIX path of newPath
    set newName to "cutVideo.mov"
    
    tell application "QuickTime Player"
    activate
    open myVideo
    set myDoc to front document
    trim myDoc from 2 to 6  -- keep only video from second 2 to 6
    end tell
    tell application "System Events"
    tell process "QuickTime Player"
        keystroke "s" using {command down}
        delay 0.8
        keystroke "G" using {command down} -- go to
        delay 0.8
        keystroke PPath -- folder path with / and not :
        delay 0.8
        keystroke return
        delay 0.8
        keystroke newName -- fill file name
        delay 0.8
        keystroke return -- ok save dialog
        delay 0.8
        keystroke "w" using {command down} -- close window
    end tell
    end tell
    

    谢谢你的回复,pbell!我一直不愿意回到QT7,因为我发布的论坛帖子上的用户在使用QT7的实验中失败了。模拟GUI似乎是一种复杂的、有时不一致的方法(但这可能是唯一的方法)。我能够让你的代码正常工作(谢谢!),尽管我不得不在修剪后增加延迟。。。我假设菜单项的重新启用速度不够快,QuickTime不接受“s”键。我很高兴它解决了您的问题。我尝试了许多其他方法来避免QtGUI的保存和导出,但总是失败。在GUI脚本编写中,所需的延迟来自硬件速度、操作系统版本以及后台运行的其他进程。这就是为什么设置安全高值更好的原因……我必须承认,在又玩了一个小时您提供的代码之后,我无法让它始终正确执行。我怀疑/假设这是因为您提到的因素(硬件、流程等)。有时它不会激活QT窗口,所以击键会被发送到其他地方(在
    trim
    之后调用
    activate
    似乎可以解决这个问题……),有时
    击键newName
    不会发生,所以文件被命名为“Untitled”,等等。啊!我可能不得不增加延迟大小,并在新保存的文件工作时监视它。再次感谢!从worth case开始,将延迟设置为2,然后您应该能够在屏幕上看到所有步骤。当然,请记住,因为您使用的是GUI脚本,所以在运行过程中不应触摸键盘或鼠标!这个剧本对我来说非常合适。最后,但并非最不重要的一点是,您是否在桌面上创建了文件夹“Test_folder”(请参见脚本第4行):它必须存在(或者您可以更改脚本中的行)