Problems obtaining the correct number of frames in video file
12 views (last 30 days)
Show older comments
I am having trouble using VideoReader to determine the correct number of frames in a video file,
videoObj = VideoReader('2_1107.mpg') ;
Warning: Unable to determine the number of frames in this file.
This workaround fails,
lastFrame = read(videoObj, inf)
Error using VideoReader/read (line 86)
The frame index requested is beyond the end of the file.
The following code returns a different number of frames each time it's run, e.g. 164, 263, 257.
videoObj = VideoReader('2_1107.mpg');
nFrame = 0 ;
isGood = true ;
while isGood
nFrame = nFrame + 1 ;
try
thisFrame = read(videoObj, nFrame) ;
catch
isGood = false ;
nFrame = nFrame - 1 ; % Don't include in the count if fails
end
end
If VideoReader skipping or repeating frames on each pass through the file, how can I get the correct number of frames? More info: problem is present for both R2012a and R2012b run on Windows 7 (32-bit versions), video format is MPEG-2, size of the video is 65706 KB, and it's a variable frame rate file.
0 Comments
Accepted Answer
Ryan G
on 27 Sep 2012
Have you tried something like this:
xyloObj = VideoReader('xylophone.mpg');
xylDat = read(xyloObj);
size(xylDat)
For this example, which is the mpg in the link provided, the final value in size is the number of frames. If this does not help, can you do a:
get(videoObj)
and post the results? I would be interested to see what data is missing.
7 Comments
Ryan G
on 27 Sep 2012
I think you really have 2 options.
1) If you have access to the Computer Vision System Toolbox, this supports mpeg-2 using the command:
videoFReader = vision.VideoFileReader(FILENAME)
2) You can find a free converter to change the file from mpeg-2 to mpeg-1
Depending on what you're looking to do this might be ok.
More Answers (0)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!