Matlab中的跳帧与电影文件检索

  时间:2022-05-11 07:28:41  阅读量:25  评论数:0  作者:user5913745

我试图在Matlab中处理一个我使用VideoReader阅读的视频。我可以处理没有问题的帧,但我只想处理每五帧。我尝试使用step函数,但这在我的videoreader对象上不起作用。现在我可以调用readFrame五次,但这显然会减慢整个过程(它需要大量的视频素材)。我怎样才能有效地跳过五个帧,处理五个帧,跳过另外五个,使用MATLAB?

错误消息: “videoreader”类型输入参数的未定义函数“step”。

但是,在步骤中调用help函数会得到以下示例:

WORKED=step(VR,DELTA)
Moves the frame counter by DELTA frames for video VR.  This is a 
generalization of NEXT.  Returns 0 on an unsuccessful step.  Note that 
not all plugins support stepping, especially with negative numbers.  In 
the following example, both IM1 and IM2 should be the same for most 
plugins.
  vr = videoReader(...myurl...);
  if (~next(vr)), error('couldn''t read first frame'); end
      im1 = getframe(vr);
  if (~step(vr,-1)), error('could not step back to frame 0'); end
      im2 = getframe(vr);
  if (any(im1 ~= im2)), 
      error('first frame and frame 0 are not the same'); 
  end
  vr = close(vr);
FNUM should be an integer.

After the videoReader constructor is called, NEXT, SEEK, or step should
be called at least once before GETFRAME is called. 

这里,step显然是在VideoReader对象上调用的,不是吗?非常感谢您的帮助。

网友解决方案:

我也有这个问题。如果不使用不推荐使用的代码,完成您正在尝试的工作的唯一方法是为每个输出帧调用readFrame五次。这是缓慢和非常低效的。但是,如果您使用不推荐的read方法(并且假设您的视频是文件而不是流),您也可以指定帧号。我不知道为什么MathWorks在这方面倒退了。我建议您提交一个服务请求来询问它,并说明为什么此功能对您很重要。

同时,您可以试用我的frame2jpg函数,该函数从视频文件中提取特定帧。它尝试使用不推荐的read方法,如果失败,则返回到readFrame。我发现阅读方法在我自己的1080p60 fps MPEG-4视频应用程序中快了十倍。请随意修改代码以满足您的需要。


原文地址(source):原文链接