1

我想在 Matlab 中读取一个 AVI 文件。我根据这个链接试过了: http: //inside.mines.edu/~woff/courses/EENG512/lectures/other/Matlab_movies.pdf

clear all
close all
movieObj = VideoReader('ap001_BL0_SP2_cam03_compressed.avi'); % open file
get(movieObj) % display all information about movie
nFrames = movieObj.NumberOfFrames; %shows 310 in my case
for iFrame=1:2:nFrames
    I = read(movieObj,iFrame); % get one RGB image
    imshow(I,[]); % Display image
end

我收到以下错误:

使用 VideoReader/read 时出错(第 145 行)请求的帧索引超出文件末尾。

test_video_read 中的错误(第 9 行) I = read(movieObj,iFrame); % 得到一张 RGB 图像

(缩短)“get(movieObj)”的输出是:

General Settings: 
   Duration = 10.3333
   Name = ap001_BL0_SP2_cam03_compressed.avi
   Type = VideoReader

Video Settings:
   BitsPerPixel = 24
   FrameRate = 30
   Height = 1280
   NumberOfFrames = 310
   VideoFormat = RGB24
   Width = 960

所以应该可以读取第一帧,因为有 310 个可用!我可以在 VLC-Player 中播放 AVI 文件,所以应该已经安装了编解码器,对吧?

我正在使用 MATLAB R2013a,Windows 7。谁能帮忙,谢谢!

4

2 回答 2

2

VLC 播放器是使用 ffmpeg 编解码器构建的。VideoReader 使用 DirectShow 和 Media Foundation API,它们是 Windows 平台 API,与 ffmpeg 不同。因此,如果文件使用 VLC 播放,则不能保证被 VideoReader 打开。你可以做几件事:

  1. 可以在 Windows Media Player 上查看文件吗?如果是这样,在大多数情况下,它应该与 VideoReader 一起使用。如果没有,那么您没有合适的编解码器。尝试安装 ffsdhow 或 K-lite 编解码器包。
  2. 如果文件可以在 Windows Media Player 上运行,但 VideoReader 不支持,则表明存在错误。过去对我有用的一种解决方法是我安装了上面提到的编解码器,然后再试一次。
  3. 如果 (1) 和 (2) 没有帮助,请使用 handbrake 或 Mirro 之类的软件将文件转码为 MP4,该文件在 VideoReader 中运行。

希望这可以帮助。

迪内什

于 2015-10-12T13:48:27.150 回答
1

我已经使用一些 avi 文件测试了你的 Matlab 代码,我对它们没有任何问题。所以,我认为是你的 avi 文件导致了错误。

我之前也遇到过类似的问题,我的 (mp4) 电影可以在任何媒体播放器中播放,但 matlab 无法打开它们。就我而言,问题是编译 mp4 电影时的像素格式(通过 ffmpeg)。默认情况下,我的电影是使用 High 4:4:4 Predictive (yuv444p) 格式编译的,但 Matlab 无法处理。当我切换到较旧的像素格式(yuv420p)时,将电影加载到 Matlab 中没有任何问题。

您可以使用 ffprobe 来检查这是否是问题,它是 ffmpeg 的一部分,您可以从https://www.ffmpeg.org下载它们。

否则,您是否尝试过使用未压缩的 avi?

于 2015-10-12T05:59:31.763 回答