在ffmpeg中重复单个帧填充视频的中间部分

时间:2017-06-14 05:32:33

标签: video ffmpeg

我有49个png渲染帧。我使用ffmpeg将这些帧转换为视频:

ffmpeg -r 24 -f image2 -s 1920x1080 -i %04d.png -vcodec libx264 -crf 25 -pix_fmt yuv420p test2.mp4

然而,这只是所有帧的序列。现在我尝试实现以下顺序:

frame 1...24 - frame 25 - frame 26...49

当帧25需要重复120帧时。这可能是ffmpeg吗?

如果有可能实现更好:

frame 1...24 - frame 25 - frame 24...1

1 个答案:

答案 0 :(得分:2)

假设您正在使用50帧序列,

ffmpeg -framerate 24 -i %04d.png
 -filter_complex "[0]trim=end_frame=25,split=2[fo][re];[fo]loop=118:1:24,setpts=N/24/TB[fo];
                    [re]reverse,setpts=N/24/TB[re];[fo][re]concat=n=2:v=1:a=0"
 -c:v libx264 -crf 25 -pix_fmt yuv420p   out.mp4

[0]trim=end_frame=25 - >保持前25帧。帧从0开始编号。

split=2[fo][re] - >有这个修剪段的两个副本

[fo]loop=118:1:24 - >在结束1 24次循环单帧118。所以最后一帧有119个实例。

setpts=N/24/TB[fo] - >长话短说,ffmpeg意味着使用定时媒体,所以这个过滤器是为了确保现在带有循环的段具有平滑,连续的时间戳。 24是输入的帧率。

[re]reverse - >反转修剪段的第二个副本。

setpts=N/24/TB[re] - >与上述相同。

[fo][re]concat=n=2:v=1:a=0 - >加入两个部分 - 循环部分和反向部分。由于第25帧是反转序列的第一帧,因此第25帧有120个实例。