【问题标题】:Fill middle of video with repeating a single frame in ffmpeg在 ffmpeg 中重复单帧填充视频中间
【发布时间】:2017-06-14 14:13:51
【问题描述】:

我有 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

【问题讨论】:

    标签: video ffmpeg


    【解决方案1】:

    假设您使用的是 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 个实例。

    【讨论】:

    • 感谢您的回答!然而 out.mpg 只显示开始和结束,但错过了单帧的重复。有什么想法吗?
    • 需要查看完整的控制台输出。
    • 我已将输出粘贴到pastebin.com/gp4P6uCJ 我需要将长度稍微更改为 12 帧。于是就变成了 1..12 - 12 - 12..1
    • 在循环中,将第 3 个值更改为 11。并将 setpts 中的 12 更改为 24。
    猜你喜欢
    • 2016-02-26
    • 1970-01-01
    • 2017-04-19
    • 2017-08-10
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    相关资源
    最近更新 更多