Terminal 使用AppleScript向终端发送命令

Terminal 使用AppleScript向终端发送命令,terminal,ffmpeg,applescript,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

我有这个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
我得到“预期的行尾,但找到了标识符”


有人知道该怎么做吗?

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

首先,你不必告诉终端

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

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

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

首先,你不必告诉终端

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

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

按照另一个答案中的建议,使用
do shell脚本
,删除行分隔符并用单引号替换字符串中的双引号

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"

按照另一个答案中的建议,使用
do shell脚本
,删除行分隔符并用单引号替换字符串中的双引号

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并进行转换以使其正常运行。谢谢。工作完美:)我只需将完整路径/usr/local/bin/添加到ffmpeg并进行转换以使其正常运行。非常感谢Eric!但现在我在这一部分得到了同样的错误:-f image2pipe,而不是任何想法?我讨厌这个。但我想学:)非常感谢你,埃里克!但现在我在这一部分得到了同样的错误:-f image2pipe,而不是任何想法?我讨厌这个。但我想学:)