使用FFMPEG如何更快地从视频中提取缩略图/图像?

4
我使用这个命令从视频中提取一系列图像,以视觉时间轴的形式来表达它们: ffmpeg -i inputfile.mp4 -r 1 -t 12 image-%d.jpeg 我的大多数视频都是MP4格式。我能够成功地提取出图像,但提取所需的时间太长了。
有没有办法缩短提取图像所需的时间?
编辑:在 MP4 格式编码的 15 秒长的视频中,我需要 60 秒才能获取 8 张缩略图。我正在使用我的 Galaxy Nexus(Android 手机)进行此操作,有没有办法提高操作速度?理想情况下,我希望它少于 10 秒。
2个回答

4
嗯,什么是“慢”? :) 我刚刚做了这个,在标准机器上花了四秒钟。可能有加快速度的方法,但是ffmpeg必须解码MP4数据包结构(GOP),提取帧并存储JPG图像-四秒对我来说看起来很合理。我只看到你的命令行中很少有改进的空间: ffmpeg -i inputfile.mp4 -r 1 -an -t 12 -s 512x288 -vsync 1 -threads 4 image-%d.jpeg 尝试使用线程-s参数(后者定义目标图像大小-它不会加快处理速度,但如果您不想保留源图像大小,它将为您节省一个额外的步骤)。
此外,请确保您拥有与您的平台匹配的ffmpeg版本-那里的速度差异很大。不幸的是,我在这里无法给出通用建议。对于您的情况,也许编译自己的ffmpeg源代码是一个好主意。

在我的情况下,从一个14秒的剪辑中提取图像需要22秒,而从一个30秒的剪辑中平均需要67秒。我正在针对移动设备进行开发,所以是否有可能在具有良好处理能力的移动设备上加快速度? - Arif Nadeem
看看我的修改后的答案。但是,如果你真的想在Galaxy Nexus上执行此操作,我怀疑这是不可能的<10秒。在提取图像之前,缩小视频尺寸是否可行?这会有所帮助。 - Jan Petzold
你的意思是在从视频中获取帧之前最好将其重新编码为其他格式,而重新编码是否足够快?我问这个问题的原因是我发现从mp4视频中获取帧需要更长时间,但对于3gp和flv来说非常快。 - Arif Nadeem
我并不是完全意味着那个,但如果你注意到源格式之间的差异,那是很重要的。但是,如果你的源视频越小(即分辨率),你也会节省时间。此外,使用Motion-JPEG这样的编解码器的视频将更快地执行,因为没有帧结构(GOP)需要解码。因此,如果在您的情况下可能的话,我建议重新对源视频进行编码,以使用较小分辨率的Motion-JPEG。 - Jan Petzold

1

这里是相关的技术问题https://dev59.com/TWMl5IYBdhLWcg3wR1SD#18539500

-ss参数需要在-i参数之前指定:

ffmpeg -ss 00:03:00 -i Underworld.Awakening.avi -frames:v 1 out1.jpg

这个例子将会在电影开始的第三分钟左右产生一帧图像(out1.jpg)。输入将使用关键帧进行解析,速度非常快。缺点是它也会在某个关键帧上完成寻找,而不一定位于指定的时间(00:03:00),因此寻找的准确性可能不如预期。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接