ffmpeg - 如何使用搜索和查找最近的iframe来捕获屏幕截图的时间戳?

时间:2015-11-16 23:47:09

标签: video ffmpeg

我尝试了各种不同的方法。 ffprobe总是显示出明显的结果,随着帧的继续,pts_time会增加,使用此命令:

ffprobe -show_frames video.mp4 > probestats.txt

我考虑使用这些数据来查找最接近我在ffmpeg中寻找的秒数的视频帧,但我正在尝试保持这种性能,因为我在上传时生成的缩略图可能超过5GB,这意味着我最终会用50MB +探测文件来解析。

所以,目前,我正在循环这个ffmpeg命令,以便最终每个文件总共有10个缩略图,无论长度如何:

ffmpeg -i video.mp4 -ss 00:00:05 -vf select="eq(pict_type\\,I)[s1];[s1]showinfo[out]" -vframes 1 -q:v 1 thumbs/thumb-1.jpg 2>&1

目标是获取我正在寻找的秒数的最近的iframe,例如在5秒标记附近找到最近的iframe并使用缩略图 - 这会提高性能。

问题是,ffmpeg正在输出看似随机的pts_time,与ffprobe中显示的pkt_pts_time相比肯定不正确。

因此,正如标题所述,我正在寻找一个ffmpeg命令来在指定搜索的最近的iframe处生成缩略图,并获取时间戳。

2 个答案:

答案 0 :(得分:2)

您现在采用的方式并不是最佳,因为您正在寻找输出,即输入视频会被解码并丢弃,直到您点击搜索标记。

执行此操作的最佳方法是通过输入搜索,即将-ss参数放在输入-i之前并使用-noaccurate_seek选项。通过这种方式,输入被解析,而不是使用关键帧解码

因此,它会搜索您的时间戳之前的最近的关键帧,然后您可以将其保存到图像中。 See the wiki了解更多信息。

ffmpeg -noaccurate_seek -ss 00:00:05 -i video.mp4 \
-vf select="eq(pict_type\\,I)[s1];[s1]showinfo[out]" \
-vframes 1 -q:v 1 thumbs/thumb-1.jpg

答案 1 :(得分:0)

我对此线程比较晚,但是我也在尝试以最快的方式处理缩略图。我尝试了很多方法,包括@aergistal的方法,但是这种方法对我来说快了大约3倍:

-hide_banner
-loglevel panic
-ss #{timestamp}
-i #{path}
-vframes 1
-f image2 #{folder}/#{s}-#{timestamp.gsub(':', '_')}.jpg