这是一个困扰了我很长时间的问题,也花了很多时间寻求解决办法,今天终于找到了答案。
实验环境:MATLAB.V7.1.R14.SP3,test.avi视频文件(XVID或DX50编码)
Matlab的aviread函数可以用来读取视频文件中指定帧的图像,但只支持avi格式的视频文件,且要求编码方式为Indeo5。当实验程序读取test.avi视频文件时,会报错:
Unable to locate decompressor to decompress video stream
即Matlab找不到相应编码的解码器。
test.avi文件可以被本机的播放器打开,所以可以确定本机上并不缺少xvid的解码器,但由于播放器可能是使用自己的解码器,而非本机的全局解码器,因此推断System32下没有与xvid相关的文件。那么首先想到的办法就是安装XviD codec或者ffdshow等解码器集合。
在安装了最新版本的XviD codec(点击下载)后,System32下出现了几个与xvid相关的文件:xvid.ax、xvidcore.dll、xvidvfw.dll,回到Matlab中,问题依旧,卸载之。
此后,尝试安装老版本的XviD codec(点击下载),System32下只新增了两个文件:xvid.ax、xvid.dll,回到Matlab中,运行程序,一切正常!
经验总结:由于Matlab7.1不是一个很新的版本,其对一些最新版本的解码器支持得不够好,尝试老版本的解码器,或许能让他们相互配合起来。并且,Matlab使用的解码器必须是位于System32下的全局解码器。之前的时间都花在尝试下载安装不同的解码器,但不是因为版本太新就是因为没有注册到System32下而失败。
后话:解决"Unable to locate decompressor to decompress video stream"的方法还有很多。可以尝试视频转换软件,改变其编码方式,或使用第三方的mmread函数,再或者使用更高版本的Matlab,其中自带mmreader函数,能读取多种编码格式的视频文件。
Matlab是个娇贵的主,视频编码问题解决后,他还有这样的要求"The supported frame types are 8-bit (indexed or grayscale), 16-bit grayscale or 24-bit (TrueColor) frames." 所以有时候不得不使用视频转换软件,以得到符合他胃口的文件。
--End--



原来有关的视频解码器也有相应dll文件在system32里面啊。。
我也遇到这样的问题,不过我试了你说的方法,好像不行。请问我要将system32中相关的*.dll文件拷到matlab工作路径中吗?还有其它的工作要做吗?希望能得到你的帮助。
@zhouyuhuan, 你可以再尝试装一个ffdshow