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.
John Williams answered .
2025-11-20
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.