AUTOMATOR - 尝试使用从 AppleScript 接收的参数在 shell 脚本中发出命令

AUTOMATOR - Trying to issue a command inside a shell script with parameters received from AppleScript

我正在为 macOS 创建这个自动程序脚本,它接收视频并在给定时间以秒为单位提取帧。

从 finder 收到视频后,它运行此 applescript 以秒为单位询问时间,以提取帧。

时间存储在 Applescript 变量中 "seconds"。

当 applescript 结束时,我有 3 个变量:

  1. inputVideo,包含 POSIX 输入视频路径
  2. outputVideo,包含 POSIX 输出视频路径
  3. 秒,包含以秒为单位的时间。

applescript 以这些行结尾

    return fileInputPosix & fileOutputPosix & seconds
end run

并将变量传递给以这些行开头的 shell 脚本:

fileInput=${@[0]}
fileOutput=${@[1]}
seconds=${@[2]}

/usr/local/bin/ffmpeg -i $fileInput -vf "select=eq(n\,$seconds)" -vframes 1 $fileOutput

最后一行使用FFMPEG提取一帧。

我有这个错误

The action “Run Shell Script” encountered an error: “ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers built with Apple LLVM version 10.0.0 (clang-1000.11.45.5) configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1_1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gpl --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-opencl --enable-videotoolbox libavutil 56. 22.100 / 56. 22.100 libavcodec 58. 35.100 / 58. 35.100 libavformat 58. 20.100 / 58. 20.100 libavdevice 58. 5.100 / 58. 5.100 libavfilter 7. 40.101 / 7. 40.101 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 3.100 / 5. 3.100 libswresample 3. 3.100 / 3. 3.100 libpostproc 55. 3.100 / 55. 3.100 /Users/fireball/Desktop/HD/aaa.mp4/Users/fireball/Desktop/HD/aaa.png1000[0]: Not a directory”

我想我在命令行字符串上遇到了一些连接错误

如果我在终端上输入最后一行,我会这样输入:

ffmpeg -i aaa.mp4 -vf "select=eq(n\,1000)" -vframes 1 aaa.png

其中 aaa.mp4 是输入视频,aaa.png 是 t=1000 秒时的帧。

有什么想法吗?

根据错误消息,行 fileInputPosix & fileOutputPosix & seconds return 是一个字符串。

也许你想要 return 一个列表然后你必须添加大括号并用逗号替换符号字符并且你必须将数值转换为文本

return {fileInputPosix, fileOutputPosix, (seconds as text)}

要将变量传递给 shell 脚本,只需编写

/usr/local/bin/ffmpeg -I  -vf "select=eq(n\,)" -vframes 1 

或者如果您需要变量

fileInput=
fileOutput=
seconds=

/usr/local/bin/ffmpeg -i $fileInput -vf "select=eq(n\,$seconds)" -vframes 1 $fileOutput