我正在尝试用一些 png 文件(实际上有 1000 个)制作视频。它们以数字命名,但步长为 5000,即0.png
、5000.png
等等10000.png
。
我正在尝试使用命令创建视频
ffmpeg -framerate 2 -pattern_type glob -i "*.png" test.mp4
但我遇到的问题是,它不是按其孔值对它们进行排序,而是使用文件名的第一位数字对它们进行排序。因此,我在动画中得到的顺序是
0.png
1000000.png
100000.png
10000.png
1005000.png
1010000.png
... etc
这不是我想要的顺序。
我尝试使用以下信息重命名它们这个帖子,但如果我循环遍历目录,我会按照同样不理想的顺序进行。因此重命名的文件将被错误地枚举。
我怎样才能让 bash 以正确的方式对它们进行排序?
答案1
你可以做几件不同的事情:
使用填充零重命名您的文件:
0000000.png
0010000.png
0100000.png
1000000.png
1005000.png
1010000.png
使用版本排序选项:
file_args=()
while IFS= read -r file; do
file_args+=( -i "$file" )
done < <(ls -v *.png)
# ..........^^
# or
# <(ls *.png | sort -V)
然后
ffmpeg -framerate 2 "${file_args[@]}" test.mp4
答案2
一行:
cat $(find . -maxdepth 1 -name '*.png' -print | sort -V) | ffmpeg -framerate 2 -i - -vf format=yuv420p -movflags +faststart output.mp4
许多玩家不喜欢 2 fps,因此如果它不起作用,请添加-r 10
输出选项,它将复制帧来补偿(输出看起来相同,持续时间相同)。