2017-03-15 159 views
0

我有这个ffmpeg命令,我想通过appelscript发送给终端。当我直接在终端中运行它时,它会起作用。用AppleScript发送命令到终端

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

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

谢谢。工作完美:)我只需将完整路径/ usr/local/bin /添加到ffmpeg并转换为使其正常运行。 –

1

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

首先,您不必告诉终端。

AppleScript for shell命令的正确语法是:“do shell script”,后跟该命令。请记住,您正在向此函数发送文本,因此请妥善地将“and”和$以及您的脚本中不包含双\\的内容以避免混淆脚本。

为了未来的一致性,我喜欢在我的应用程序开始时设置我利用到属性的所有外壳应用:

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" 
+0

非常感谢Eric!但现在我得到了同样的错误在这一部分:-f image2pipe而不是 任何想法?我吮吸这个。但我想学习:) –