使用FFmpeg将图像转换为具有可变fps的视频
我有900张图片:使用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
- 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。它起作用了。你的解释会让我为将来的工作修改代码。