我使用ffmpeg从远程视频文件中获取一个屏幕截图,命令类似于ffmpeg -ss $TIME -i $URL -frames:v 1 -filter:v $FILTER file.jpg
(-ss
在快速搜索https://trac.ffmpeg.org/wiki/Seeking之前)。-i
是我想要转换屏幕截图的方式,比如裁剪/调整大小。在这种情况下是$FILTER
)
如果我想在3秒、5秒和14秒时获得3个屏幕截图,我需要运行这个命令3次,分别传递3、5和14作为"crop=iw-5:ih-5, scale=100:100:force_original_aspect_ratio=increase, crop=100:100"
。但是,是否可以运行一次该命令,但让它为不同的时间输出多个屏幕截图文件?
ffmpeg会不会这样做,使得往返远程请求只需要1次而不是3次?那样会更有效率。如果没有,那么最好单独提出这3个请求,因为我可以并行处理。
最佳答案
有关相等间隔的屏幕截图,请参见wiki。
对于特定的时间戳,可以使用select过滤器一次完成:
ffmpeg -i <input> -filter:v "select='0-eq(t,3)-eq(t,5)-eq(t,14)',<other filters>" -vsync vfr file%01d.png
其中
t
是表示时间戳(秒)。您还可以使用
between
和pict_type
PICT_TYPE_I
按特定间隔搜索I帧。关于linux - 运行ffmpeg一次,但获得多个屏幕截图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47198241/