ffmpeg,带有“ -pattern_type glob”和bash脚本中的变量

时间:2018-08-04 06:37:43

标签: bash ffmpeg

我正在尝试让ffmpeg使用-pattern_type glob开关和“ /foo/bar/*.jpg”对目录中的所有图片制作视频。如果我仅在一个目录中手动执行命令,则此方法效果很好。例如:

ffmpeg -framerate 35 -pattern_type glob -i '/root/webcam_test/2018-07-21/*.jpg' -vf scale=1280:-1 -c -c:v libx264 -pix_fmt yuv420p /root/clips/out01_cut.mp4

但是,如果我在bash脚本中执行此操作并通过变量设置路径,则根据ffmpegs的输出,该变量将被正确替换,但是ffmpeg指出

  

'/ root / webcam_test / 2018-07-21 / *。jpg':无此类文件或目录

脚本部分如下所示:

for D in `find /root/webcam_test/ -type d`
do
    [...]
    cmd="ffmpeg -framerate 35 -pattern_type glob -i '$D/*.jpg' -vf scale=1280:-1 -c -c:v libx264 -pix_fm                                 t yuv420p /root/clips/$d_cut.mp4"
    echo $cmd
[...]
done

有人知道如何使ffmpeg进行通配符解释,即使该路径是由脚本构建的,而不仅仅是尝试简单地使用给定的路径吗? 最好的问候和预先的感谢

3 个答案:

答案 0 :(得分:1)

通过将bash变量放在单引号内,它不会扩展。尝试使用双引号:

ffmpeg -framerate 35 -pattern_type glob -i "$D/*.jpg" -vf scale=1280:-1 -c -c:v libx264 -pix_fmt yuv420p /root/clips/$D_cut.mp4

答案 1 :(得分:1)

我有类似的问题。我的解决方案是在ffmpeg命令之前更改目录,并使用不带目录的模式。即:

cd $D/;ffmpeg -framerate 35 -pattern_type glob -i "*.jpg" -vf scale=1280:-1 -c -c:v libx264 -pix_fmt yuv420p /root/clips/$D_cut.mp4

答案 2 :(得分:0)

无论这些引用与否,它们都可以在我的延时cron脚本中工作:

$ ls -1 *.jpg
20190620_011712sm.jpg
$ TODAY=$(date +"%Y%m%d")
$ ffmpeg -y -v 24 -f image2 -pattern_type glob -i ${TODAY}_\*sm.jpg -r 12 -vcodec libx264 ${TODAY}.mp4 2>&1|col -b
$ ffmpeg -y -v 24 -f image2 -pattern_type glob -i "${TODAY}_*sm.jpg" -r 12 -vcodec libx264 ${TODAY}.mp4 2>&1|col -b

我不知道为什么,但是在进行此操作之前,我一直在努力在*字符周围使用单引号。 ...也许缺乏睡眠?