【问题标题】:Send command to terminal with AppleScript使用 AppleScript 向终端发送命令
【发布时间】:2017-03-15 20:06:07
【问题描述】:

我有这个 ffmpeg 命令,我想通过 appelscript 发送到终端。当我直接在终端中运行它时它可以工作。

ffmpeg -i score.mov -i palette.png -filter_complex \
"fps=8,scale=600:-1:flags=lanczos[x];[x][1:v]paletteuse" -f image2pipe -vcodec ppm - | convert -delay 15 -loop 0 -layers Optimize - output39.gif

这不会在 scripteditor 中编译。

tell application "Terminal"
    do script "ffmpeg -i score.mov -i palette.png -filter_complex \
"fps=8,scale=600:-1:flags=lanczos[x];[x][1:v]paletteuse" -f image2pipe -vcodec ppm - | convert -delay 15 -loop 0 -layers Optimize - output39.gif"
end tell

我得到“预期的行尾,但找到了标识符”

有人知道该怎么做吗?

【问题讨论】:

    标签: terminal ffmpeg applescript


    【解决方案1】:

    使用do shell script——正如另一个答案中所建议的——删除行分隔符并将字符串中的双引号替换为单引号。

    do shell script "ffmpeg -i score.mov -i palette.png -filter_complex 'fps=8,scale=600:-1:flags=lanczos[x];[x][1:v]paletteuse' -f image2pipe -vcodec ppm - | convert -delay 15 -loop 0 -layers Optimize - output39.gif"
    

    【讨论】:

    • 谢谢。工作完美:) 我只需将完整路径 /usr/local/bin/ 添加到 ffmpeg 并转换以使其正常运行。
    【解决方案2】:

    你很接近,但有一些明确的语法问题。

    首先,您不必告诉终端。

    AppleScript 中用于 shell 命令的正确语法是:“do shell script”后跟命令。请记住,您正在向此函数发送文本,因此请正确转义 " 和 ' 和 $ 以及使用双 \\'s 的脚本中没有的内容,以免混淆脚本。

    为了未来的一致性,我喜欢在我的应用程序开始时将我使用的所有 shell 应用程序设置为属性:

    property grep : do shell script "which grep"
    

    ...然后在我的脚本行中调用它们,但这不是必需的。

    试试这个:

    do shell script "ffmpeg -i score.mov -i palette.png -filter_complex \
    \\"fps=8,scale=600:-1:flags=lanczos[x];[x][1:v]paletteuse\\" -f image2pipe \
    -vcodec ppm - | convert -delay 15 -loop 0 -layers Optimize - output39.gif"
    

    【讨论】:

    • 非常感谢埃里克!但是现在我在这部分得到了同样的错误: -f image2pipe 有什么想法吗?我很讨厌这个。但我想学习:)
    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多