1,出现问题
在使用matlab做实验的时候出现问题,具体信息如下:
>> m2=aviread('C:/test.avi');
??? Error getting frame data.
Error in ==> aviread at 63
X = readavi(info.Filename,-1);
由错误提示信息,可知是读取帧数据时出错了。猜测一下:
- 文件损坏?
- 不支持该文件格式?
对于第一个猜测,我用播放器看一下该AVI文件,可播放,所以不会是文件损坏了。
对于第二个猜测,要看些文档。
用help aviread命令该能找到点信息。
>> help aviread;
AVIREAD Read AVI file.
MOV = AVIREAD(FILENAME) reads the AVI movie FILENAME into the
MATLAB movie structure MOV. If FILENAME does not include an
extension, then '.avi' will be used. MOV has two fields, "cdata"
and "colormap". If the frames are truecolor images, MOV.cdata will
be Height-by-Width-by-3 and MOV.colormap will be empty. If the
frames are indexed images, then MOV.cdata field will be
Height-by-Width and MOV.colormap will be M-by-3. On UNIX, FILENAME
must be an uncompressed AVI file.
MOV = AVIREAD(...,INDEX) reads only the frame(s) specified by
INDEX. INDEX can be a single index or an array of indices into the
video stream, where the first frame is number one.
The supported frame types are 8-bit (indexed or grayscale),
16-bit grayscale or 24-bit (TrueColor) frames.
See also aviinfo, avifile, movie.
Reference page in Help browser
doc aviread
细读该帮助信息,可发现,在文档的最后有提到“frame types”,即帧的类型。这个跟错误信息有极大的类似。
文档中提到,matlab支持灰度级是8位(索引式或灰度)、16位或是24位(即真彩色)的帧。
打开test.avi的信息,
C:/test.avi
General
Complete name : C:/test.avi
Format : AVI
Format/Info : Audio Video Interleave
Format/Family : RIFF
File size : 1.88 MiB
PlayTime : 12s
Bit rate : 1304 Kbps
StreamSize : 15.9 KiB
Video #0
Codec : DivX 4
Codec/Family : MPEG-4
Codec/Info : Project Mayo DivX 4
Codec settings/PacketBitStream : No
Codec settings/BVOP : No
Codec settings/QPel : No
Codec settings/GMC : 0
Codec settings/Matrix : Default
PlayTime : 12s
Bit rate : 1300 Kbps
Width : 352 pixels
Height : 240 pixels
Aspect ratio : 1.467
Frame rate : 30.000 fps
Resolution : 8 bits
Chroma : 4:2:0
Interlacement : Progressive
Bits/(Pixel*Frame) : 0.513
StreamSize : 1.86 MiB
Writing library : avc2.0.11.1110
看到这个文件的视频编码格式是Divx4,分辨率是8位。这个文件我是用格式转换器进行过转换的,由mpg文件转化为avi文件。看来是这个原因了。
3.解决问题
本来想先找个其它的avi文件来试试,可以的话,就看看它是什么格式的。但一时间找不到,就直接找了一个强大的格式转换软件:WinAVI Video Converter。
用它来转换了一下,却出现以下的错误:
>> m2=aviread('C:/test3.avi');
??? Unable to locate decompressor to decompress video stream
Error in ==> aviread at 63
X = readavi(info.Filename,-1);
错误提示信息是:没有找到正确的解码器来解码视频流。
然后我试了几个编码的形式,都出现了同样的错误。看来matlab支持的格式很有限。接着,我找了找AVI的格式,网上有人说matlab支持的是AVI早期的格式。
我在WinAVI里再找了找,有一个没有压缩的编码器,叫ZJMedia Uncompress RGB24和ZJMedia Uncompress RGB32,就是有24位和32位的选择,就选用了24位的格式转换了一下,结果,通过了。
看看转换后文件的信息:
C:/test4.avi
General
Complete name : C:/test4.avi
Format : AVI
Format/Info : Audio Video Interleave
Format/Family : RIFF
File size : 72.3 MiB
PlayTime : 9s 966ms
Bit rate : 61 Mbps
Video #0
Codec : RGB
PlayTime : 9s 966ms
Bit rate : 61 Mbps
Width : 352 pixels
Height : 240 pixels
Aspect ratio : 1.467
Frame rate : 30.000 fps
Resolution : 24 bits
Bits/(Pixel*Frame) : 24.011
可以看到,这里的编码信息直接是RGB,也就是没有经过压缩的,分辨率是24位的。符合要求!
转自:http://blog.csdn.net/IdoIwill/article/details/2125838