Bash 脚本 ffmpeg 图片转视频不起作用但在命令行中起作用

Bash 脚本 ffmpeg 图片转视频不起作用但在命令行中起作用

这在命令行中用于将 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' 

相关内容