video - ffmpeg - 如何使用寻找并找到最近的 iframe 来捕获屏幕截图的时间戳?

标签 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 处生成缩略图,并获取时间戳。

最佳答案

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

执行此操作的最佳方法是通过输入搜索,即将 -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/

相关文章:

python - VideoWriter OpenCV - 无法将管道放在函数 CvVideoWriter_GStreamer::open 中播放

video - ffmpeg:无效的段文件名模板 'stream05d.ts'

ffmpeg - Bento4 MP4Dash 出现音频失败?

python - 使用 Raspberry Pi + Webcam 在 python 中录制视频,但有时相机没有像我预期的那样打开/关闭

ffmpeg - avcodec_find_decoder(CODEC_ID_MPEG2TS) 始终为 NULL

video - 如何让ffmpeg保持透明度?

audio - 集成视频/音频的服务或解决方案

audio - 使用 Windows 7 从 decklink 卡捕获(和记录)720p 音频和视频的 ffmpeg 命令行

flash - ActionScript : NetStream stutters after buffering

delphi - 如何获取已安装的显卡(Delphi)