You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用FFmpeg按等时间间隔批量提取视频缩略图?

用一条FFmpeg命令批量提取等间隔缩略图

当然可以!不用反复执行单帧提取命令,一条FFmpeg指令就能轻松实现按等时间间隔批量生成缩略图的需求,下面给你两种最实用的方案,对应不同的场景:

方案1:按固定时间间隔提取(比如每5秒一张)

如果你的需求是固定时间间隔提取(比如不管视频时长,每5秒取一帧),可以用fps滤镜来控制输出频率:

ffmpeg -i video.webm -vf "fps=1/5,scale=120:90" -q:v 2 thumbnail_%03d.jpeg
  • fps=1/5:表示每5秒输出1帧(反过来fps=2就是每秒输出2帧)
  • scale=120:90:指定缩略图的分辨率,和你原来的命令一致
  • -q:v 2:控制JPEG的质量,数值越小质量越高(范围1-31,默认是3),可以根据需求调整
  • thumbnail_%03d.jpeg:自动生成带序号的文件名,%03d会输出001、002...这样的格式,改成%02d就是01、02,按需调整

方案2:固定提取数量(比如强制提取12张,等间隔分布)

如果你的需求是不管视频时长,固定提取N张(比如12张),均匀分布在整个视频时间轴上,就用select滤镜结合视频总时长来计算间隔:

ffmpeg -i video.webm -vf "select='eq(n, floor(t/(duration/12)))',scale=120:90" -vsync vfr -q:v 2 thumbnail_%03d.jpeg
  • duration是FFmpeg内置变量,代表视频的总时长
  • duration/12就是12张图之间的时间间隔,floor(t/(duration/12))会在每个间隔的时间点选中对应帧
  • -vsync vfr:强制FFmpeg只输出我们选中的帧,避免重复生成或丢帧,保证刚好输出12张

额外小技巧

  • 如果想要更快的提取速度,可以加上-skip_frame nokey,这样只会提取视频的关键帧,速度会快很多,但间隔可能会有微小偏差(因为关键帧不是严格等间隔的)
  • 如果需要PNG格式的缩略图,把输出文件名改成thumbnail_%03d.png即可,PNG是无损格式,文件会大一些但质量更好

内容的提问来源于stack exchange,提问作者Alexander Vakrilov

火山引擎 最新活动