我做20秒的视频在FPS = 25,500帧它们是0000.png
,0001.png
,... 0499.png
。这有效:
ffmpeg -framerate 25 -i images/%04d.png out.mp4
但实际上,视频中仅有一些更改,在我的情况下为0000、0122、0288、0312、0450帧。与此同时,PNG相同。
问题:只有5个不同的文件就足够生成500个PNG文件了!我只想生成这5个PNG文件,并从中生成视频。
当我尝试上述命令images/
包含只 0000.png
,0122.png
,0288.png
,0312.png
,0450.png
而不是495人,显然它失败:
[image2 @ 00000000006d4040]无法打开文件:images / 0001.png
问题:在使用时,有没有办法告诉ffmpeg
您忽略丢失的帧并使用最新的可用帧而不是失败-i images/%04d.png
?
如果没有,那么有什么其他方法可以生成仅带有这5个PNG的视频,这些视频应该在准确的时间范围内到达?
使用-t
输入选项声明持续时间,然后使用concat过滤器连接。
ffmpeg -loop 1 -framerate 25 -t 4.88 -i 0000.png -loop 1 -framerate 25 -t 6.64 -i 0122.png -loop 1 -framerate 25 -t 0.96 -i 0288.png -loop 1 -framerate 25 -t 00:00:05.52 -i 0312.png -filter_complex "[0][1][2][3]concat=n=4:v=1:a=0,format=yuv420p" output.mp4
duration
在concat多路分解器输入文件列表中使用指令声明持续时间,然后与concat多路分解器连接。
这可能是最快的方法。
使input.txt
包含以下内容:
file 0000.png
duration 4.88
file 0122.png
duration 6.64
file 0288.png
duration 0.96
file 0312.png
duration 5.52
串联:
ffmpeg -f concat -i input.txt -vf format=yuv420p output.mp4
此方法使您可以以帧为单位(和/或根据需要使用时间值)来声明持续时间。
ffmpeg -loop 1 -framerate 25 -i 0000.png -loop 1 -framerate 25 -i 0122.png -loop 1 -framerate 25 -i 0288.png -loop 1 -framerate 25 -i 0312.png -filter_complex "[0]trim=start_frame=0:end_frame=121,setpts=PTS-STARTPTS[v0];[1]trim=start_frame=122:end_frame=287,setpts=PTS-STARTPTS[v1];[2]trim=start_frame=288:end_frame=311,setpts=PTS-STARTPTS[v2];[3]trim=start_frame=312:end_frame=449,setpts=PTS-STARTPTS[v3];[v0][v1][v2][v3]concat=n=4:v=1:a=0,format=yuv420p" output.mp4
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句