2017-03-15 1 views
0

appelscript를 통해 터미널에 보내려는 ffmpeg 명령이 있습니다. 터미널에서 직접 실행하면 작동합니다.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의 올바른 구문은 "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 대신 아이디어가 있습니까? 나는 이것을 빨아 먹는다. 그러나 나는 배우고 싶다. –