如何使FFMPEG加入非顺序图像文件?(跳过3秒)


27

我有一堆图像,遵循这种模式。

0001.png
0004.png
0007.png
0010.png
0013.png
0016.png
0019.png
...

它们的顺序正确,但是FFMPEG在第一个文件之后会忽略任何内容,因为找不到0002.png。我如何才能加入这些文件?

我试过了

ffmpeg -i %04d.png out.avi

2
暂时重命名它们,制作AVI,然后将其重命名为(3x-2).png方案怎么样?批量重命名实用程序@ bulkrenameutility.co.uk/Main_Intro.php是一个免费的umm批量重命名器。
吉安

Answers:


18

使用ffmpeg 0.11.1就像这样简单:

ffmpeg -f image2 -i %*.png out.avi

man页面的“视频和音频文件格式转换”下的示例中:

导入图像序列时,-i还支持在内部扩展类似外壳的通配符模式(globbing)。为了降低您的实际文件名和shell的水珠扩张干扰的机会,你是用一个单一的前缀他们需要激活水珠元字符%的字符,像foo-%*.jpegfoo-%?%?%?.jpegfoo-00%[234%]%*.jpeg

每个注释的更新:在最新版本上,您现在应该使用-i '*.png'语法。


3
在Ubuntu 13.04中使用ffmpeg或avconv对我来说一直没有用
hellocatfood 2013年

2
这似乎不再是一个选择。
Timmmm 2015年

2
glob_sequence模式类型已过时,但glob图案类型不是。Mulvya和Peter Cordes的答案有效。
博士 Sybren

1
Pattern type 'glob_sequence' is deprecated: use pattern_type 'glob' instead
Serge Stroobandt

1
需要澄清的是,由于此页面当前是该警告消息(Pattern type 'glob_sequence' is deprecated...)在Google中的最佳搜索结果:rymo上面的命令(特别是-i %*.png)会引起警告。要消除它,请使用Peter Cordes答案(-i '*.png')中稍有不同的语法。
詹姆斯(James)

19

除了我的评论中的解决方法外,您还应该可以使用ffmpeg 文档中的以下语法:

ffmpeg -f image2 -pattern_type glob -i '*.png' out.avi

引号很重要,您需要ffmpeg来查看*,而不是让shell对其进行扩展。


不适用于我,但这可能是因为我的系统较旧。我接受这一点,因为它最有可能帮助未来的用户。
Brigand 2013年

根据ffmpeg文档,您应使用'* .png'而不是具有glob模式类型的%04d.png。
乔治的朋友

然后,它将选择文件夹中存在的所有png,除了00xx.png之外,而OP希望仅将%04d png排队,而不必担心编号的连续性。
吉安

2
很确定您需要使用*.png单引号(so '*.png')以避免它被Unix样式的shell(例如OSX和linux等)扩展。
evilsoup

1
遗憾的是,ffmpeg开发人员使文件遍历支持成为一种选择!标准的Windows构建不包含它。
Timmmm 2015年

9

http://www.ffmpeg.org/faq.html:如果您有大量要重命名的图片,则可以使用以下命令来减轻负担。该命令使用bourne shell语法,以'img001.jpg','img002.jpg'等顺序,将与* jpg匹配的当前目录中的所有文件符号链接到'/ tmp'目录。

x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done


我用它来组合多个序列seqA-[0001-n].pngseqB-[0001-n].png等等。比弄乱image2 globlob和concat过滤器要容易得多。
2014年

对于我这样没有工作,直到我换成for i in *jpgfor i in /full/path/*jpg,因为所有的符号链接被打破
Jezzamon

4

我实际上会建议穆尔维亚建议的同样的事情。每当处理3D动画渲染时需要执行此类操作时,我都会将文件重命名以使其连续。除非您出于某种原因需要保留文件名,否则在许多不同的软件中使用该方法会更容易。Total Commander还是进行多重重绘的绝佳工具。


我最终做了类似的事情(Python重命名脚本)。
Brigand 2013年

3

对于缺少的序列部分,我使用了2个内衬

CONCAT=$(echo $(ls *.png | sort -n -t _ -k 2) | sed -e "s/ /|/g")
ffmpeg -framerate 25 -i "concat:$CONCAT" -c:v libx264 -profile:v high -pix_fmt yuv420p output.mp4

希望这对以后的人有帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.