这在命令行中用于将 jpg 序列转换为视频。
cat *.jpg | ffmpeg -f image2pipe -framerate 5 -i - -s 1280x720 ./HD720_out.mp4
但在包含以下内容的可执行脚本 temp.sh 中不起作用(第一个 jpg 除外):
eval cat "$1" | ffmpeg -f image2pipe -framerate 5 -i - -s 1280x720 "./HD720_out.mp4"
例如,./temp.sh *.jpg
只将第一个文件提供给视频,而不是序列。我做错了什么?命令行运行正常。
答案1
简化:$1
扩展为脚本的第一个命令行参数。
但是在脚本解释运行 temp.sh 的 shell 之前,它将首先扩展*中的星号./temp.sh *.jpg
,从而有效地在命令行中产生:
./temp.sh first.jpg second.jpg third.jpg
\
\_ $1
有两种方法可以解决这个问题。第一种方法(也是首选方法):
cat "$@" | ...
将只使用所有命令行参数,而不仅仅是第一个。您不需要eval
这个,也不应该使用它。
第二个(eval
发挥作用的地方):
eval cat "$1" |
在调用脚本时使用引用参数来避免扩展:
./temp.sh '*.jpg'