我有一系列文件:
file0.png, file1.png, ..., file10.png,... file100.png, ..., file1000.png, file1001.png, ..., file10000.png
我想用 ffmpeg 制作视频,
ffmpeg -framerate 30 -pattern_type glob -i '*.png' -c:v libx264 out.mp4
命名约定导致输入中读取的文件顺序错误。我该如何解决这个问题?
所谓的解决方案“如何在命令提示符中重命名一堆文件?”不起作用!
答案1
因为 archlinux 的重命名实用程序存在一些问题,所以我在实时 Ubuntu 上启动并进行了重命名。
rename 's/\d+/sprintf("%05d", $&)/e' *.png
这就是 toto 重命名文件序列所做的操作。
答案2
最初我查看了ffmpeg
的文档,看看是否可以在自己的文件中指定输入文件名,然后可以根据需要对其进行排序。但文档中没有明确提供这样的选项。我可能是错的,如果您注意到这样的选项,那将是我的建议。
因此,您应该按照您想要的顺序重命名输入文件。我假设您使用的是 bash shell,文件位于同一目录中,所有文件都命名file1.png
为file10000.png
,并且您希望将它们命名file00001.png
为file10000.png
。
#!/bin/bash
for f in file*.png
do
printf -v n "file%05d.png" "${f:4:-4}"
mv "$f" "$n"
done
一行如下:
for f in file*.png; do printf -v n "file%05d.png" "${f:4:-4}"; mv "$f" "$n"; done
或者可能只是:
#!/bin/bash
for (( i=0; i<10000; i++ ))
do
printf -v n "%05d" $i
mv "file$i.png" "file$n.png"
done
一行如下:
for (( i=0; i<10000; i++ )); do printf -v n "%05d" $i; mv "file$i.png" "file$n.png"; done;
我不确定哪个更快,但我怀疑第二个会更快。