FFmpeg单帧对应叠加PNG时视频时长异常的问题咨询
FFmpeg单帧对应叠加PNG时视频时长异常的问题咨询
嗨,我来帮你分析一下这个问题~
首先,你遇到的核心问题是FFmpeg默认会以两个输入流中时长较长的那个作为输出视频的总时长,而且当其中一个流提前结束时,FFmpeg会自动重复它的最后一帧来匹配另一个流的长度。你的情况应该是提供的PNG序列总帧数比原视频的帧数多,所以输出视频被PNG序列的长度“拉长”了,原视频结束后,FFmpeg就一直重复原视频的最后一帧来叠加剩下的PNG。
要解决这个问题,你只需要给overlay滤镜加上shortest=1参数,它会强制输出视频的时长取两个输入流中较短的那个(也就是原视频的时长),这样多余的PNG会被自动忽略,不会再出现原视频结束后还继续叠加的情况。
修改后的命令如下:
ffmpeg -y -i "video-file.mp4" -i "%05d.png" -filter_complex "[0:v][1:v]overlay=shortest=1" "output-video-file.mp4"
另外还要提醒你先确认一下PNG序列的帧数是否和原视频的帧数完全匹配:比如你先获取到原视频是N帧,那你的PNG文件是不是从00001.png(或者你设置的起始编号)到000N.png?如果PNG的计数起始或结束不对,也会导致两者帧数不一致,这时候即使加了参数,可能前几帧或者最后几帧的叠加会有问题哦。
如果后续你遇到PNG帧数比原视频少的情况,不想让后面的帧重复最后一张PNG,可以给overlay加上eof_action=pass参数,这样PNG流结束后,会直接输出原视频的剩余帧,不再叠加任何PNG。
备注:内容来源于stack exchange,提问作者Catalin Morosan
相关产品推荐
相关产品推荐

