使用FFMPEG将帧插入视频

时间:2019-04-03 13:55:42

标签: video command-line ffmpeg frame

我正在录制视频的相机偶尔会掉帧,因此我需要将帧重新插入视频中以保持定时精确。

我已经有了一个脚本来准确标识何时删除了这些帧,因此我有了每个需要插入的帧及其位置的索引。

例如,在100 FPS的100 s视频中,我应该有10,000帧。但是,在399、1205、4299和7891帧处丢弃了4帧。因此,我想在那些位置以相同的分辨率插入黑色帧,或者将前一帧恰好保留一帧(例如,将398保留为一个额外的帧,即0.01 s)。

有没有一种方法可以在FFMPEG中迭代地执行此操作?我目前正在将视频写入其组成的帧中,添加空白图像,然后将这些帧中的视频重新连接起来,这是一个非常低效的过程。

1 个答案:

答案 0 :(得分:0)

让我们以帧频值为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选项将使用先前可用帧的副本填充这些插槽。