我正在使用 ffmpeg 将一些 jpg 转换为 mp4 文件,并且看起来效果很好,创建了 video.mp4。这是我正在使用的命令:
ffmpeg -r 0.1 -i uploads/image%d.jpg uploads/video.mp4
我的上传目录中有这些文件
image1.jpg
image2.jpg
image3.jpg
image4.jpg
我在谷歌上快速搜索后找到了这个例子。我做了一些改动,但图片 %d.jpg 保持不变。它应该循环播放每张图片并将其放入 mp4 中。但是我发现它没有包括这里的最后一个文件。
%d 如何以 1 为增量并随后抓取此处的每个文件?为什么它没有抓取最后一个文件?当我删除第 4 张图像时,它只会加载前两张图像,因此出于某种原因,最后一张图片没有被包含在内。
任何关于其如何运作的评论都会非常有帮助,谢谢!
答案1
ffmpeg 知道 %d 表示单个数字字符,因此会在文件列表中递增。因此,这是 ffmpeg 而不是 shell 执行的操作 - 这对于确保图像按顺序排列非常重要。
请注意,如果您的数字后缀超过一位数 - 例如 image001.jpg 到 image110.jpg 那么您需要让它知道:
ffmpeg -r 0.1 -i uploads/image%03d.jpg uploads/video.mp4
“%03d” 表示 3 位数字,左侧用零填充(例如 005)。“%05d” 表示 5 位数字,左侧用零填充(例如 00044)
另请注意,数字之间不能有间隙,如果有间隙,请重命名。
有关数字格式的更多详细信息请参见此处:http://www.pixelbeat.org/programming/gcc/format_specs.html
答案2
如果你知道范围,你可以做类似的事情
ffmpeg -r 0.1 -i uploads/image{1..4}.jpg uploads/video.mp4
答案3
据我所知,%d
它属于ffmpeg
,而不是 bash。我测试了你的命令,它工作正常。确保第三张图片的文件名开头没有空格。