【发布时间】:2011-07-26 12:29:51
【问题描述】:
我在使用 Matlab 创建 avi 文件时遇到问题。我的目标是在整个视频上使用边缘过滤器并将文件保存为 avi。过滤器工作正常,我的问题是 avi 文件的写入。
我的代码:
vidFile = VideoReader('video.avi');
edgeMov = avifile('edges','fps',30);
for i = 1:vidFile.numberofframes
frameI = read(vidFile,i);
frameIgray = rgb2gray(frameI);
edgeI = edge(frameIgray,'canny',0.6);
edgeIuint8 = im2uint8(edgeI);
edgeIuint8(:,:,2) = edgeIuint8(:,:,1);
edgeIuint8(:,:,3) = edgeIuint8(:,:,1);
edgeMov = addframe(edgeMov,edgeIuint8);
end
edgeMov = close(edgeMov)
当循环结束并且 avifile 关闭时,我去播放视频,它说“Windows Media Player 在播放此文件时遇到问题”。我也尝试过 Media Player Classic 和 VLC,但没有成功,这让我相信问题一定是文件本身。使用 GSpot 我检查了文件,它说 AVI 标头已损坏。
再次重试循环返回完全相同的问题。让我感到困惑的是,当我为较少的帧数(例如 30 个)运行循环时,视频写得很好,我可以观看。我要转换的视频大小超过 1000 帧,所以我不知道大小是否有问题?
任何帮助将不胜感激,谢谢。
【问题讨论】:
-
创建的文件大小是多少?
-
@Richie Cotton 不到 4GB,比原始视频少了一点。
-
@Richie Cotton:我认为它是如此之大,因为没有使用压缩。使用我在文件下方评论的编解码器只有大约 20MB。