【问题标题】:Insert frames into video using FFMPEG使用 FFMPEG 将帧插入视频
【发布时间】:2019-08-25 02:03:43
【问题描述】:

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

我已经有一个脚本可以准确识别这些帧何时被丢弃,所以我有一个需要插入的每一帧的索引以及插入位置。

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

有没有办法在 FFMPEG 中迭代地做到这一点?我目前正在将视频写入其组成帧,添加我的空白图像,然后重新连接帧中的视频,这是一个非常低效的过程。

【问题讨论】:

  • 相机保存成什么格式?
  • MJPEG 编解码器,.avi 容器。

标签: video command-line ffmpeg frame


【解决方案1】:

让我们拍摄一个帧速率值为 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 选项将使用先前可用帧的克隆填充这些插槽。

【讨论】:

  • 谢谢!不过,我不得不做出一项改变。该示例的第一个数字必须是 398(以说明第一帧是索引 0)。其次,后面的每个数字都需要是 N-k,其中 N 是帧号,k 是您迄今为止包含的插入数。 IE。我的指数是 398、1205-1、4299-2 和 7891-3。这样可以使整个视频保持一致。
猜你喜欢
  • 2018-02-12
  • 2018-03-14
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多