改进了从视频中提取缩略图

Posted

技术标签:

【中文标题】改进了从视频中提取缩略图【英文标题】:Improved thumbnail extraction from videos 【发布时间】:2011-07-20 06:57:03 【问题描述】:

我一直在使用 FFmpeg 查找 h264 视频文件的中间帧,并提取 jpg 缩略图以用于流媒体门户。这是为每个上传的视频自动完成的。

有时帧恰好是黑色帧,或者只是语义不好,即背景或模糊的镜头,与视频内容没有很好的关联。

我想知道是否可以使用 openCV 或其他方法/库通过面部识别或帧分析以编程方式找到更好的缩略图。

【问题讨论】:

【参考方案1】:

我自己也遇到过这个问题,并想出了一个非常粗略但简单的算法来确保我的缩略图更“有趣”。怎么样?

    创建 x - 缩略图的数量都在不同的点。例如。 5 个缩略图 使用最大(以字节为单位)文件并丢弃其余文件

为什么会这样?因为单调“无聊”图像的 jpeg 文件(如全黑屏幕)压缩成比包含许多对象和颜色的图像小得多的文件。

它并不完美,但却是一个可行的 80/20 解决方案。 (用 20% 的工作解决 80% 的问题。)编写实际分析图像本身的代码将是相当多的工作。

【讨论】:

谢谢,这听起来很粗糙,但不费吹灰之力就解决了黑框问题。【参考方案2】:

Libavfilter 有一个缩略图过滤器,用于从一系列帧中选择最具代表性的帧。不知道它是如何工作的,但这是文档http://ffmpeg.org/libavfilter.html#thumbnail

【讨论】:

【参考方案3】:

如果有人需要两个班轮(使用 ffmpeg 和 imagemagick):

(这会从视频中最多选择 20 帧,并使用 gt(scene) 来选择过渡时刻。它使用 ffmpeg 制作 120 像素宽的 png,然后使用 imagemagick 制作 gif(因为 ffmpeg gif 非常丑陋。.. .) 如果电影中没有发生任何事情,它可能会失败,但你不应该把它称为电影 - 不是吗?

ffmpeg -i $1 -loglevel error -vf "select=gt(scene\,0.1), scale=120:-1" -frames:v 20 -f image2 -vsync 0 -an ./tmp/img%05d.png 
convert -delay 25 -loop 0 ./tmp/img*.png thumb.gif

【讨论】:

以上是关于改进了从视频中提取缩略图的主要内容,如果未能解决你的问题,请参考以下文章

如何从 facebook 视频 url 中提取缩略图

从照片中提取后,视频及其缩略图未按顺序保存

从线程中的视频网址中提取缩略图

如何从 PHAsset 获取视频的缩略图?

Android:如何获取应用程序私有文件的视频缩略图?

如何在 YouTube 缩略图上叠加播放按钮