我尝试过各种不同的方法。ffprobe 始终显示出有意义的结果,使用以下命令,pts_time 随着帧的继续而增加:
ffprobe -show_frames video.mp4 > probestats.txt
Run Code Online (Sandbox Code Playgroud)
我考虑过使用该数据来查找最接近我在 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
Run Code Online (Sandbox Code Playgroud)
目的是获得我正在寻找的秒数中最近的 iframe,例如找到靠近 5 秒标记的最近的 iframe 并获取缩略图 - 这会提高性能。
问题是,ffmpeg 输出看似随机的 pts_time,与 ffprobe 中显示的 pkt_pts_time 相比绝对不正确。
正如标题所述,我正在寻找一个 ffmpeg 命令来在最接近指定搜索的 iframe 处生成缩略图,并获取时间戳。
您现在执行此操作的方式在您寻求输出时并不是最佳的,也就是说,输入视频会被解码并丢弃,直到您到达搜索标记。
执行此操作的最佳方法是通过输入查找,即将参数放在-ss
输入之前-i
并使用-noaccurate_seek
选项。通过这种方式,使用关键帧来解析输入,而不是解码。
因此,它会寻找时间戳之前最近的关键帧,然后您可以将其保存到图像中。请参阅 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2475 次 |
最近记录: |