FFMPEG,提取第一帧并保持5秒

时间:2018-03-08 12:31:47

标签: filter ffmpeg concat

我正在尝试在图像序列的开头叠加一个15秒的视频过渡(带有alpha的png序列以显示下面的图像),我可以使用叠加过滤器做得很好。但我想在播放动画之前保持图像序列的第一帧5秒钟。我已经尝试过修剪/选择,但我似乎无法让它持续5秒钟,我也似乎无法将其与其他视频连接起来进行转换。所以我的问题是:

  1. 如何获得第一帧并保持5秒,下面的方法有效,但似乎不是最干净的选择?
  2.   

    -framerate 30 -t 60.0 -i input1。%04d.jpg -framerate 30 -t 15.0 -i transition1_%03d.png -filter_complex“color = c = red:d = 5:s = 480x270:r = 30 [bg]; [bg] [1:v] overlay [transhold]; [0:v] [transhold] overlay = repeatlast = 0 [out]“

    1. 如果我将它叠加在主视频上之前我怎么能用原版来连续,我可以用两个叠加来实现它,实际转换的开始偏移量使用下面的命令保持的长度,但它似乎是有点笨拙。
    2.   

      -framerate 30 -t 60.0 -i input1。%04d.jpg -framerate 30 -t 15.0 -i transition1_%03d.png -filter_complex“color = c = red:d = 5:s = 480x270:r = 30 [bg]; [1:v] split [trans] [transhold]; [trans] setpts = PTS + 5 / TB [trans]; [transhold] select = eq(n \ 0)[transhold]; [bg] [ transhold] overlay [transhold]; [0:v] [transhold] overlay = repeatlast = 0 [tmp1]; [tmp1] [trans] overlay [out]“

      这是一个更大的命令的一部分,我将四个高清图像编译成一个4k的视频,每个视频都有自己的过渡,所以更干净的我可以做得更好。我还希望能够改变不同HD输入的保持持续时间。如果我需要,我可以将第一张图像作为不同的输入,但我仍然需要连接它们。我认为必须有一种方法可以使用过滤器...

1 个答案:

答案 0 :(得分:0)

另一篇文章回答了这个问题: https://video.stackexchange.com/questions/23551/ffmpeg-extract-first-frame-and-hold-for-5-seconds

-framerate 30 -t 60.0 -i input1.%04d.jpg 
-framerate 30 -t 15.0 -i transition1_%03d.png 
    -filter_complex 
        "[1]loop=149:1:0[trans];
         [0][trans]overlay=eof_action=pass" out.mp4

第二个输入的第一帧重复149次,因此有150个实例(30 fps x 5s)。循环结束时的0是要循环的帧的起始索引。中间1是从第3个参数中的索引开始循环的帧数。