我试图使用bash将多个目录中的多个图像缝合到一个视频中。下面的脚本起作用。
for f in {0..289}; do convert +append Viewer/$f.png Timeline_Board/$f.png Leaderboard/$f.png Montage/montage$f.png; done
cd Montage
ffmpeg -f image2 -r 7 -i montage%d.png -vcodec libx264 -crf 22 montage.mkv这个循环通过帧0.png到289 and,并像预期的那样将组件拼接在一起。然而,我并不总是知道我将转换多少帧。我想要做的是用这样的行文:
for f in {0..$1}; do convert +append Viewer/$f.png Timeline_Board/$f.png Leaderboard/$f.png Montage/montage$f.png; done在这里,我可以传递一个命令行参数来准确选择我想要的帧数。但是,当我的脚本中有这一行并运行./convert_images 289时,我会看到一个错误:convert: unable to open image 'Viewer/{0..289}.png': No such file or directory @ error/blob.c/OpenBlob/2675.
看起来bash并没有将我传入的整数解释为循环的参数。我如何使bash将变量视为一个循环到的数字?
发布于 2015-05-26 03:09:47
如果您的shell是bash,请使用C样式的for循环:
for ((f=0; f<289; f++)); do
...
done为了解释它的原因--支撑展开发生在参数展开之前,所以当它发生时,变量的值是不可用的。
https://stackoverflow.com/questions/30448808
复制相似问题