使用FFmpeg将图像转换为帧数可变的视频。

我有900张图片。

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

我使用下面的代码从这些图像中生成一个视频,它工作得很完美,但我还需要制作另一个视频,在开始时很慢(例如5 fps),然后逐渐(例如6,7,8,……fps)加速。

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

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

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

解决方案:

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

从帧持续时间的角度考虑比从fps的角度考虑更有帮助,因为那是setpts可以直接改变的。fps为5表示帧持续时间为200毫秒,而fps为90表示帧持续时间为11毫秒(四舍五入后)。因此,帧0从时间0开始,持续时间为200ms,所以帧1显示在200ms,并具有该时间戳。帧808的持续时间为11ms。所以对于每一帧,时间戳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 为处理管道的不同部分。

给TA打赏
共{{data.count}}人
人已打赏
未分类

PSET 4 恢复分区故障 CS50

2022-9-9 0:22:42

未分类

Google字体和Sass的问题

2022-9-9 0:33:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索