【问题标题】:Matlab: Writing avi fileMatlab:编写avi文件
【发布时间】: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。

标签: matlab video-processing


【解决方案1】:

我已经使用以下内容创建了 AVI

edgeMov = avifile('video.avi','compression','Indeo5','fps',15,'quality',95); 

试一试。

【讨论】:

  • “此版本的 Windows 不支持 Indeo 编解码器。您必须指定不同的编解码器。”您能推荐一种适用于 Windows 7 的不同编解码器吗?
  • 我在Windows XP上用过,也许你只需要安装编解码器:codecguide.com/download_kl.htm
  • 可能,我去看看是否可行。我不知道为什么我需要编解码器来编码大量帧。奇怪!
  • 不幸的是,安装编解码器不起作用,但是使用不同的压缩编解码器 (Cinepak) 效果很好。 edgeMov = avifile('edges', '压缩', 'Cinepak', 'fps', 30);
猜你喜欢
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 2016-02-17
  • 1970-01-01
相关资源
最近更新 更多