查找视频中的帧数
Finding number of frames in a video
我试图逐帧显示视频,我需要知道其总帧数。但它显示错误:"unable to determine the number of frames in this file"。
obj = VideoReader('a.avi');
nof=obj.NumberOfFrames;
for i=1:nof
img = read(obj,i);
imshow(img);
end
视频可能以可变帧速率编码,在这种情况下,MATLAB 在读取最后一帧之前无法检测帧数(如记录here。
要找出答案,您应该按照建议阅读最后一帧 here。
Obj = VideoReader('varFrameRateFile.avi');
lastFrame = read(Obj, inf);
numFrames = Obj.NumberOfFrames;
vidFrames = read(readerobj);
numFrames = get(readerobj, ‘numberOfFrames’);
Matlab 将在未来版本中弃用 read() 和 NumberOfFrames。下面是我用来处理 Matlab 版本更改的一些视频打开和查找帧数函数。我已经在几个 avi 文件上测试了类似版本,并安装了所需的编解码器。
function [totalFrames] = findNumFrames(videoSrcPath, SelectedReader)
% open video source
if ( SelectedReader == 1 )
% VideoReader currently has a read to random frame but will be
% deprecated soon
videoSrc = VideoReader(videoSrcPath);
elseif ( SelectedReader == 0 )
%vision.VideoFileReader does not have a read to random frame
videoSrc = vision.VideoFileReader(videoSrcPath,...
'ImageColorSpace', 'Intensity');
end
% get number of frames
if ( SelectedReader == 1 )
% The below read() and NumberOfFrames will be deprecated in
% future versions and we will have to use SelectReader == 0
% or readFrame
try
lastFrame = read(videoSrc, inf); % need to read last frame to get the number of frames
totalFrames = videoSrc.NumberOfFrames;
catch
warning('Problem using read - possibly deprecated. Using readFrame instead.');
end
elseif ( SelectedReader == 0 )
totalFrames = 0;
while( ~isDone(videoSrc) )
step(videoSrc);
totalFrames = totalFrames + 1;
end
reset(videoSrc);
end
end
我试图逐帧显示视频,我需要知道其总帧数。但它显示错误:"unable to determine the number of frames in this file"。
obj = VideoReader('a.avi');
nof=obj.NumberOfFrames;
for i=1:nof
img = read(obj,i);
imshow(img);
end
视频可能以可变帧速率编码,在这种情况下,MATLAB 在读取最后一帧之前无法检测帧数(如记录here。
要找出答案,您应该按照建议阅读最后一帧 here。
Obj = VideoReader('varFrameRateFile.avi');
lastFrame = read(Obj, inf);
numFrames = Obj.NumberOfFrames;
vidFrames = read(readerobj);
numFrames = get(readerobj, ‘numberOfFrames’);
Matlab 将在未来版本中弃用 read() 和 NumberOfFrames。下面是我用来处理 Matlab 版本更改的一些视频打开和查找帧数函数。我已经在几个 avi 文件上测试了类似版本,并安装了所需的编解码器。
function [totalFrames] = findNumFrames(videoSrcPath, SelectedReader)
% open video source
if ( SelectedReader == 1 )
% VideoReader currently has a read to random frame but will be
% deprecated soon
videoSrc = VideoReader(videoSrcPath);
elseif ( SelectedReader == 0 )
%vision.VideoFileReader does not have a read to random frame
videoSrc = vision.VideoFileReader(videoSrcPath,...
'ImageColorSpace', 'Intensity');
end
% get number of frames
if ( SelectedReader == 1 )
% The below read() and NumberOfFrames will be deprecated in
% future versions and we will have to use SelectReader == 0
% or readFrame
try
lastFrame = read(videoSrc, inf); % need to read last frame to get the number of frames
totalFrames = videoSrc.NumberOfFrames;
catch
warning('Problem using read - possibly deprecated. Using readFrame instead.');
end
elseif ( SelectedReader == 0 )
totalFrames = 0;
while( ~isDone(videoSrc) )
step(videoSrc);
totalFrames = totalFrames + 1;
end
reset(videoSrc);
end
end