使用FFmpeg将图像转换为具有可变fps的视频

使用FFmpeg将图像转换为具有可变fps的视频,ffmpeg,Ffmpeg,我有900张图片: 001.tif 002.tif 003.tif 900.tif 我使用以下代码从这些图像生成视频: ffmpeg-r30-start\u number 1-i%03d.tif-c:v libx264-r30-pix\u fmt yuv420p output.mp4 它工作得很好,但我还需要制作另一个视频,开始时速度很慢(例如5 fps),然后逐渐加速(例如6、7、8、…fps),以达到非常高的速度(例如90 fps)。视频的每一秒与之前和之后的第二秒相比应该有不同的fp

我有900张图片:

  • 001.tif
  • 002.tif
  • 003.tif
  • 900.tif
我使用以下代码从这些图像生成视频:

ffmpeg-r30-start\u number 1-i%03d.tif-c:v libx264-r30-pix\u fmt yuv420p output.mp4

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


我可以用FFmpeg吗?如果是这样的话,他们怎么做?

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

从帧持续时间而不是fps的角度考虑这一点更有用,因为setpts可以直接改变这一点。fps为5表示帧持续时间为200ms,而fps为90表示帧持续时间为11ms(四舍五入后)。因此,第0帧从时间0开始,持续时间为200ms,因此第1帧显示为200ms,并具有该时间戳。帧808的持续时间为11ms。因此,对于每个帧,时间戳expr是
200ms-189ms*N/809
,其中N是帧索引。因为809之后我们没有减少帧持续时间,所以我们必须将N钳制到809<代码>200ms-189ms*最小值(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\u time\u base
一样。

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

从帧持续时间而不是fps的角度考虑这一点更有用,因为setpts可以直接改变这一点。fps为5表示帧持续时间为200ms,而fps为90表示帧持续时间为11ms(四舍五入后)。因此,第0帧从时间0开始,持续时间为200ms,因此第1帧显示为200ms,并具有该时间戳。帧808的持续时间为11ms。因此,对于每个帧,时间戳expr是
200ms-189ms*N/809
,其中N是帧索引。因为809之后我们没有减少帧持续时间,所以我们必须将N钳制到809<代码>200ms-189ms*最小值(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\u time\u base

谢谢,@Gyan。它起作用了。你的解释会让我为将来的工作修改密码。谢谢你,@Gyan。它起作用了。你的解释会让我为将来的工作修改代码。