ffmpeg 制作缩略图的最有效方法? [视窗 10]
Posted
技术标签:
【中文标题】ffmpeg 制作缩略图的最有效方法? [视窗 10]【英文标题】:Most efficient way for ffmpeg to make thumbnails? [Windows 10] 【发布时间】:2016-11-18 03:00:11 【问题描述】:我通常使用 ThumbnailMe 制作缩略图的联系表。我的默认设置是 15 行 x 5 列,即 75 张图像,视频时长从 45 分钟到大约 90 分钟不等。 ThumbnailMe 几乎可以立即制作这种尺寸的联系表。最近为大量视频制作大量联系表的要求让我查看了一个命令行选项,以便我可以批量执行这些操作。我尝试了几种不同的方法来从命令行制作缩略图:
ffmpeg -ss 300 -i myvideo.avi -vf fps=1/300 %d.jpg
或
ffmpeg -i myvideo.avi -vf fps=1/60 %d.jpg
无论我使用其中哪种方法,制作 16 个屏幕截图大约需要一分钟(从那里我将使用 ImageMagick 制作联系表)。正如我上面所说,ThumbnailMe 只需按一下按钮就可以制作 15x5 的图像网格。 ThumbnailMe 是基于一个较旧的命令行程序 Movie Thumbnailer 构建的,我认为它使用了旧版本的 ffmpeg,或者至少是编解码器 libavcodec。
如果这些其他程序可以如此快速地创建缩略图,为什么 ffmpeg 需要这么长时间才能为我制作它们?即使我以非常小的尺寸输出屏幕截图,比如 50x50,创建每个图像仍然需要大约 2 秒。
【问题讨论】:
【参考方案1】:fps
过滤器是解决此问题的低效方法。选择过滤器是更好的选择。如果需要,FFmpeg 也有一个过滤器来生成网格。
ffmpeg -i in.mp4 -vf select=not(mod(n\,800)),scale=200:-1,tile=15x5 -vsync 0 in-grid.jpg
这会选择每 800 帧,将选定帧按比例缩放到 200 像素宽度,然后将前 75 个选定帧平铺在 15x5 布局中。如果需要,平铺过滤器有 options 用于外边框和帧间填充。
为了使其尽可能高效,应选择选择间隔 (800),以便选择过滤器输出的帧数不会超过网格所需的帧数。此外,您可以在 FFmpeg 中通过省略比例和平铺并在其他地方执行来节省一些时间。
【讨论】:
这确实创建了网格,并且相对而言,比我使用的方法更快。但是,我接下来在高清视频(比特率 5000 Kbps,1280x720,AVC 格式)上尝试了这个,生成网格需要 60 多秒。【参考方案2】:我使用 mt https://github.com/mutschler/mt/releases 作为我的联系表,它非常快,应该可以提供您所要求的一切。
我刚刚做了一个快速测试,在默认模式下生成一个 15x5 的网格大约需要 27 秒。在快速模式下,它只需要大约 4 秒。 (在 6300Kbp/s、1280x720、h264 AVC 文件上测试)
快速模式和默认模式的主要区别在于,在快进到下一个捕捉位置时会稍微不准确。
【讨论】:
以上是关于ffmpeg 制作缩略图的最有效方法? [视窗 10]的主要内容,如果未能解决你的问题,请参考以下文章