Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 搜索MJPEG视频的特定帧是否比搜索h.264文件更快?_Video_Ffmpeg_Gstreamer_H.264_Mjpeg - Fatal编程技术网

Video 搜索MJPEG视频的特定帧是否比搜索h.264文件更快?

Video 搜索MJPEG视频的特定帧是否比搜索h.264文件更快?,video,ffmpeg,gstreamer,h.264,mjpeg,Video,Ffmpeg,Gstreamer,H.264,Mjpeg,我正在录制视频,需要快速随机搜索视频中的特定帧 我可以用MJPEG或h.264压缩标准录制视频 据我所知,MJPEG可以生成单独的JPEG图像,并且生成比h.264更大的文件大小,h.264可以跨多个视频帧进行压缩 这种差异是否意味着当 使用ffmpeg或gstreamer查找文件中的随机位置 以编程方式 当仅从视频文件读取1帧时,MJPEG是否允许帧搜索操作降低IO要求 选择MJPEG。 如果要查找特定(n)帧,在H.264情况下,必须找到与所查找帧最近的I帧,然后解码该I帧和第n帧之间的所有

我正在录制视频,需要快速随机搜索视频中的特定帧

我可以用MJPEG或h.264压缩标准录制视频

据我所知,MJPEG可以生成单独的JPEG图像,并且生成比h.264更大的文件大小,h.264可以跨多个视频帧进行压缩

这种差异是否意味着当 使用ffmpeg或gstreamer查找文件中的随机位置 以编程方式

当仅从视频文件读取1帧时,MJPEG是否允许帧搜索操作降低IO要求

选择MJPEG。
如果要查找特定(n)帧,在H.264情况下,必须找到与所查找帧最近的I帧,然后解码该I帧和第n帧之间的所有帧,如果第n帧是B帧,则进一步解码以恢复完整的第n帧。这需要几毫秒,但可能对您至关重要。
MJPEG将有更大的文件大小,但没有解码开销,因此这是您的选择,除非您的磁盘非常慢。
在任何情况下,ffmpeg都必须遍历所有视频数据包才能对其进行计数,因此这是磁盘和处理器速度之间的折衷。

事实上,ffmpeg 2.1+也可以非常快速地从h.264中提取帧。假设您通过一个时间点指定所需的帧,它不需要像接受的答案中所述的那样“遍历所有视频数据包以计数”。我也不认为有办法请求第N帧(除了用N乘以固定的帧速率来确定所需的时间点)

下面是一个例子,使用免费提供的动画短片的h.264版本

让我们要求一个精确的帧,正好在视频播放10分钟后:

$ffmpeg-ss 00:10:00.000-i/home/eric/Videos/bbb_sunflower_2160p_30fps_normal.mp4-y-vframes 1-s 3840x2160/tmp/bbb-10:00.000.jpg

提取只花了大约1.8秒

小心:如果反转
-i
和-
ss
参数,则是“输出搜索”(而不是“输入搜索”)。在本例中为“”

例如:

$ffmpeg-i/home/eric/Videos/bbb_sunflower_2160p_30fps_normal.mp4-ss 00:10:00-y-vframes 1-s 3840x2160/tmp/bbb-10:00.000.jpg

提取这个过程大约需要12分钟45秒(请注意,电影本身的长度不到11分钟!)。因此,在我的机器上,它的运行速度低于实时速度


更多关于FFmpeg“搜索”的详细信息可以在这里找到:

这很容易用FFmpeg测试,对吗?但可能是的(比较默认值),尽管可以在某些仅内部模式中使用h264。