所以我希望 MEncoder 将所有 png 文件从最早修改日期到最后修改日期编码为 avi 文件,并且我希望每个帧间隔 3 秒。
答案1
mf:// 语法表示您可以传递列表文件,因此您可以通过这种方式传递按日期排序的文件列表。
要对文件进行排序,如果名称足够简单并且它们都在一个目录中,ls -t
则将执行此操作:ls -t *.png > file-list
。
然后mencoder mf://@file-list -mf fps=1/3:type=png …
应该这样做(您可以通过使用来mplayer
代替 mencoder 来轻松检查)。
如果您需要处理更复杂的内容(例如,子目录),您可以同时使用 find 和 perl。我忽略了文件名中换行符的可能性,因为我怀疑mencoder
可以处理这个问题:
find -type f -name '*.png' | perl -E 'chomp(@a = <>); @a = sort { -M $a <=> -M $b } @a; $,="\n"; say @a'
这不是特别有效(它调用的次数stat
超出了需要的次数),但除非您有很多文件,否则已经足够了。如果您需要数千个文件,可以通过 Orcish Maneuver、Schwartzian 变换等来提高效率。