Problems obtaining the correct number of frames in video file

20 vues (au cours des 30 derniers jours)
K E
K E le 26 Sep 2012
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.
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.

Réponse acceptée

Ryan G
Ryan G le 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 commentaires
Ryan G
Ryan G le 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.
K E
K E le 28 Sep 2012
Modifié(e) : K E le 28 Sep 2012
Thanks again Ryan. You really helped me. I ended up using another free converter, ffmpeg, to convert from MPEG-2 to MPEG-1 using the following command which I could incorporate into a MATLAB script,
ffmpeg -i myMpeg2File.mpg -target ntsc-vcd -y myMpeg1File.mpg
64-bit VideoReader has no problems reading the MPEG-1 file and counts the same number of frames each time my code snippet runs. It takes a lot longer to count the frames now, so I think before it failed part way through the file.

Connectez-vous pour commenter.

Plus de réponses (0)

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by