我有这个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
我得到“预期结束但找到了标识符”
任何人都知道该怎么做?
答案 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"