使用AppleScript将命令发送到终端

时间:2017-03-15 20:06:07

标签: terminal ffmpeg applescript

我有这个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

这不能在脚本编写者中编译。

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

我得到“预期结束但找到了标识符”

任何人都知道该怎么做?

2 个答案:

答案 0 :(得分:2)

使用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"

答案 1 :(得分:1)

您已关闭但有一些明确的语法问题。

首先,你不必告诉终端。

AppleScript for shell命令的正确语法是:"执行shell脚本"然后是命令。请记住,您正在向此功能发送文本,因此请正确排除"和'和$以及你的脚本中没有双\ \&#,以免混淆脚本。

为了将来的一致性,我喜欢在应用程序开头将所有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"