我正在尝试让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进行通配符解释,即使该路径是由脚本构建的,而不仅仅是尝试简单地使用给定的路径吗? 最好的问候和预先的感谢
答案 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
我不知道为什么,但是在进行此操作之前,我一直在努力在*
字符周围使用单引号。 ...也许缺乏睡眠?