ffmpeg:如何每秒选择一个随机帧?

ffmpeg:如何每秒选择一个随机帧?

我有一个可变 FPS 的视频,我想将其降低到 1 FPS。此外,我希望每秒随机采样这一帧。因此,假设一个 5FPS、3 秒长的视频,帧索引为:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
[0 ... 4] is the 1st second
[5 ... 9] is the 2nd second
[10 ... 14] is the 3rd second

我想要 之间的一帧[0 ... 4]、 的一帧[5 ... 9]和 之间的一帧[10 ... 14]

到目前为止我已经尝试过:

ffmpeg -y -i input.mp4 -filter:v "select='random(1)',fps=1" -f mp4 output.mp4

但是,这总是以完美的 1 秒间隔对帧进行采样。谢谢!

答案1

这基本上完成了工作,但是 PRNG 输出还有待改进。

-filter:v "select='st(1,mod(t\,floor(t)));if(eq(n\,0),1,(floor(t)-floor(prev_selected_t))*gt(ld(1)\,random(7)))',setpts=N,fps=1"

相关内容