使用FFMPEG将帧插入视频

5
我正在使用的录像机会偶尔丢帧,所以我需要重新插入帧到视频中,以保持时间精确。我已经有一个脚本来确定哪些帧被丢失了,所以我有一个每个需要插入和位置的帧的索引。
例如,在100秒、100FPS的视频中,我应该有10,000帧。然而,在第399、1205、4299和7891帧处丢了4帧。因此,我想要在相同分辨率的位置插入黑色帧,或者将上一帧保持恰好一帧(例如,将第398帧保持额外一帧,即0.01 s)。
在FFMPEG中是否有一种迭代的方法来实现这个目标?目前,我正在将视频写入其组成帧,添加我的空白图像,然后从帧重新连接视频,这是一个非常低效的过程。

相机保存的格式是什么? - Gyan
MJPEG编解码器,.avi容器。 - Ryan Glanz
1个回答

5

假设你有一个帧率为FR的视频,其中缺少以下帧:索引为399、1205、4299和7891。第一帧的索引为0。

ffmpeg -i in.avi -vf setpts='PTS+(1/FR/TB)*(gte(N,399)+gte(N,1205)+gte(N,4299)+gte(N,7891))' -vsync cfr -q:v 1 out.avi

setpts过滤器可以调整时间戳,setpts表达式的作用是将给定索引后的所有帧向前偏移。偏移量根据之前缺失的帧数进行评估。这将创建空的时间戳插槽。然后,'-vsync cfr'选项将使用上一个可用帧的克隆填充这些插槽。


1
谢谢!不过我需要做一个修改。那个例子的第一个数字应该是398(因为第一帧是索引0)。其次,每个后续数字都需要是N-k,其中N是帧数,k是你已经包含的插入数量。也就是说,我的索引是398、1205-1、4299-2和7891-3。这样可以保持整个视频的连贯性。 - Ryan Glanz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接