如何在没有`NumberOfFrames`的情况下在MATLAB中知道视频的帧数

时间:2015-05-15 16:32:19

标签: matlab video-processing

似乎MATLAB将删除NumberOfFrames选项。

我该怎么知道视频有多少帧?

示例:

Obj       = VideoReader( 'File.avi' );
numFrames = Obj.NumberOfFrames;

我尝试使用FrameRate*Duration进行解决,但如果两者都不是整数,则有时无效。

更新

我已向Mathworks提交了请求,让我们等待他们的回复。

2 个答案:

答案 0 :(得分:3)

作为一种无效的解决方法,您可能希望使用hasFrame()方法来了解框架是否可供读取。在while循环中使用它,你可以传递整个视频并收集最后一个计数器值作为帧数...这根本不是有效的,但可以工作。

示例:

clc
clear

VideoObj = VideoReader('YourVideo.avi');

NumFrames = 0;
while hasFrame(VideoObj)

%// You can store the current frame into a mov structure. It completely defeats the efficiency since you can't pre-allocate and you are back to original problem though.

    CurrentFrame = readFrame(VideoObj)     
    NumFrames = NumFrames+1;
end

现在帧数存储在NumFrames

这是一个有趣的问题!

答案 1 :(得分:1)

好的,我找到了办法

vid = VideoReader('video.avi');

numframes = int16(fix(vid.FrameRate*vid.Duration));