You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用FFmpeg从视频每秒中随机选取一帧?

如何使用FFmpeg从视频每秒中随机选取一帧?

嗨,我完全get到你的需求了——你想从视频的每一秒时间范围内随机挑一帧,而不是按固定的1秒间隔取帧对吧?之前你用的命令没达到预期效果,问题出在滤镜的执行顺序上:fps=1会先把视频强制转换成每秒1帧的固定间隔序列,之后的random(1)只是在这个已经固定好的帧列表里随机筛选,自然没办法在每秒的帧范围内做随机选择。

给你一个能实现需求的FFmpeg命令:

ffmpeg -y -i input.mp4 -filter:v "select='gte(random(1),0.99)*eq(floor(t),floor(prev_selected_t))',setpts=N/FRAME_RATE/TB" output.mp4

我来拆解一下这个命令的核心逻辑:

  • gte(random(1),0.99):生成0到1之间的随机数,当随机数≥0.99时返回“真”(你可以调整这个阈值,比如改成0.95会让随机触发的概率更高,但后面的条件会确保每个秒区间只留一帧)
  • eq(floor(t),floor(prev_selected_t)):floor(t)会把当前帧的时间向下取整(也就是当前帧所在的秒数,比如0-1秒内的所有帧都会得到0,1-2秒内的得到1),prev_selected_t是上一次选中帧的时间。这个条件的作用是:在同一个秒区间内,只有第一次触发随机条件的帧会被保留,避免同一秒选到多帧
  • setpts=N/FRAME_RATE/TB:因为我们跳过了大量帧,这个参数会重新设置输出帧的时间戳,保证视频播放时速度正常,不会出现卡顿或快进的问题

拿你举的5FPS、3秒视频的例子来说,这个命令会自动把帧分成[0-4]、[5-9]、[10-14]三个秒区间,每个区间内随机选中一帧,完全符合你的要求。

备注:内容来源于stack exchange,提问作者Clash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:03:01