如何导入.AVI文件?

4

我正在尝试导入一个 .avi 文件以进行帧处理。

Import["c:\\windows\\clock.avi","Elements"]
Import["c:\\windows\\clock.avi","VideoEncoding"]
Import["c:\\windows\\clock.avi"]
Import["c:\\windows\\clock.avi",{"Frames",{5,6}}]

Out[115]= {Animation,BitDepth,ColorSpace,Data,Duration,FrameCount,FrameRate,
           Frames,GraphicsList,ImageList,ImageSize,VideoEncoding}
Out[116]= rle8
Out[117]= {1,2,3,4,5,6,7,8,9,10,11,12}
During evaluation of In[115]:= Import::fmterr: Cannot import data as video format.
During evaluation of In[115]:= Import::fmterr: Cannot import data as video format.
Out[118]= {$Failed,$Failed}  

我测试的所有AVI文件都报告了相同的错误。有什么提示吗?
1个回答

7

AVI是一种容器格式。你可以使用非常奇怪和罕见的格式来编码电影,仍然称其为.avi。

你可以使用视频格式转换器(如freemake)将电影转换为Mathematica可以使用的格式。检查Internal`$VideoEncodings以了解被识别的内部格式的种类。

很多时候,Quicktime (.mov) 最容易使用。AVI有时会加载得很好,但即使我正确地安装了编解码器并且所有播放器都可以播放它,也不会显示出来。

如果其他方法都失败了,你可以尝试使用VirtualDub。它可以读取AVI并将其拆分为单独的图像,这些图像可以轻松地导入到mma中。

编辑
我记得在我的最近一个视频项目中,我无法从FireFox插件DownloadHelper下载某个YouTube电影得到的AVI文件中读取它(尽管它在我所有的播放器中都可以播放,如VLC、Media Player Classic、Windows Media player等)。通过DH转换为.mov后可以工作,但DH会将其标志插入其中。所以最后我使用FreeMake下载并通过VirtualDub将其转换为单个帧。


这个问题,Mma的帮助文档可能需要更多的帮助 :( - Dr. belisarius
5
@Sjoerd:如果你在代码前后使用两个反引号,就可以在其中使用一个反引号。我已经编辑了你的帖子,请确认这是否是你想要的。 - user616736
@belisarius 我试过这部电影,似乎使用VirtualDub并将其转换为MJPEG是最好的方法。Mathematica可以读取该格式(至少我的安装可以)。我会将转换后的视频暂时存储在http://dl.dropbox.com/u/3675222/tracking_video_001mjpeg.avi。对我来说,没有一个MPEG4编码适用。Mathematica可以读取它们,但最后只得到白色帧。 - Sjoerd C. de Vries
有点奇怪。我有很多编解码器,通常在VirtualDub中使用它们来制作游戏视频,但Mathematica却显示:In[1]:= Internal`$VideoEncodingsOut[1]= {"Uncompressed"}。操作系统是Windows 7,Mathematica版本是8。 - Nakilon
@Nakilon 我得到了这个响应: {"动画", "BMP", "Cinepak", "组件视频", "DVCPRO-PAL", "DV/DVCPRO-NTSC", "DV-PAL", "图形", "H.261", "H.263", "JPEG 2000", "运动JPEG A", "运动JPEG B", "MPEG-4视频", "照片-JPEG", "平面RGB", "PNG", "Sorenson视频", "TGA", "TIFF", "未压缩", "视频"},但仍然大多数(也许全部)的AVI文件无法加载。 - Sjoerd C. de Vries
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接