【问题标题】:Conversion of images to video with variable fps using FFmpeg使用 FFmpeg 将图像转换为具有可变 fps 的视频
【发布时间】:2020-04-24 18:45:35
【问题描述】:

我有 900 张图片:

  • 001.tif
  • 002.tif
  • 003.tif
  • ...
  • 900.tif

我使用以下代码从这些图像生成视频:

ffmpeg -r 30 -start_number 1 -i %03d.tif -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4

它工作得很好,但我还需要制作另一个开始时很慢(例如 5 fps)的视频,然后逐渐(例如 6、7、8、... fps)加速以达到非常高的速度(例如 90 帧/秒)。与前一秒和后一秒相比,视频的每一秒都应该有不同的 fps,这是一个完全逐渐加速的过程。

我可以用 FFmpeg 做吗?如果有,他们怎么做?

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

    您可以使用 setpts 过滤器逐渐改变 fps。

    根据帧持续时间而不是 fps 来考虑这一点更有帮助,因为这是 setpts 可以直接改变的。 fps 为 5 表示帧持续时间为 200 ms,而 fps 为 90 表示帧持续时间为 11 ms(舍入后)。因此,第 0 帧从时间 0 开始,持续时间为 200 毫秒,因此第 1 帧显示为 200 毫秒并具有该时间戳。帧 808 的持续时间为 11 毫秒。所以对于每一帧,timestamp expr 是200ms-189ms*N/809,其中 N 是帧索引。由于我们没有在 809 之后减少帧持续时间,因此我们必须将 N 限制为 809。200ms-189ms*min(N,809)/809

    然后是命令

    ffmpeg -start_number 1 -i %03d.tif -vf "settb=1/1000,setpts='if(eq(N,0),0,PREV_OUTPTS+200-189*(min(N,809)/809))'" -vsync vfr -enc_time_base 1/1000 -c:v libx264 -pix_fmt yuv420p output.mp4

    settb 将计时刻度设置为 1 毫秒。对于处理管道的不同部分,enc_time_base 也是如此。

    【讨论】:

    • 谢谢你,@Gyan。有用。您的良好解释将使我能够为我未来的工作自己更改代码。
    猜你喜欢
    • 2014-03-02
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多