【问题标题】:Run ffmpeg once but get multiple screenshots运行 ffmpeg 一次但获得多个屏幕截图
【发布时间】:2018-04-22 05:37:17
【问题描述】:

我使用 ffmpeg 和 ffmpeg -ss $TIME -i $URL -frames:v 1 -filter:v $FILTER file.jpg 之类的命令从远程视频文件中获取屏幕截图(-ss 位于 -i 之前,用于快速搜索 https://trac.ffmpeg.org/wiki/Seeking)。 $FILTER 是我想要转换屏幕截图的方式,例如裁剪/调整大小。在这种情况下,它是"crop=iw-5:ih-5, scale=100:100:force_original_aspect_ratio=increase, crop=100:100")

如果我想在 3 秒、5 秒和 14 秒时获得 3 个屏幕截图,我需要分别运行此命令 3 次,将 3、5 和 14 传递为 $TIME。但是是否可以运行一次命令,但它会在不同的时间输出多个屏幕截图文件?

ffmpeg 是否会以一种仅发出 1 次而不是 3 次的往返远程请求的方式来执行此操作?在这种情况下,它会更有效率。如果没有,那么最好分别发出 3 个请求,因为我可以并行进行。

【问题讨论】:

    标签: linux video ffmpeg thumbnails


    【解决方案1】:

    对于等间隔的屏幕截图,请参阅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 是以秒为单位的演示时间戳。

    您还可以使用 betweenpict_type PICT_TYPE_I 以特定间隔搜索 I 帧。

    【讨论】:

    • 也许,添加输入 -t 15 以避免过滤整个文件。
    • @aergistal 所以我实际上并没有在命令中使用字母t?演示时间戳是什么意思?
    • @Mulvya 15 是因为最后一张截图是在 14 点?假设视频是 2000 秒,而我需要的最后一个屏幕截图是 1995 年,那么我会过滤整个文件吗?有没有办法做到这一点,它只是获取你想要的文件的一部分,就像我在原始问题中的命令中所做的那样(但对于许多屏幕截图而不仅仅是一个屏幕截图)。
    • @user779159 有一个过滤器文档的链接,以防你错过了
    • @aergistal 我看到上面写着The PTS (Presentation TimeStamp) of the output audio frame, expressed in TB units.,但我不知道那是什么意思。
    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多