我尝试了各种不同的方法。 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 处生成缩略图,并获取时间戳。
最佳答案
您现在的操作方式不是最佳的,因为您正在寻找输出,即输入视频被解码并丢弃,直到您达到搜索标记。
执行此操作的最佳方法是通过输入搜索,即将 -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
关于video - ffmpeg - 如何使用寻找并找到最近的 iframe 来捕获屏幕截图的时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33746719/