如何使用 MEncoder 将所有 png 文件(当前目录中)按日期修改顺序编码为 avi 文件?

如何使用 MEncoder 将所有 png 文件(当前目录中)按日期修改顺序编码为 avi 文件?

所以我希望 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 变换等来提高效率。

相关内容