如何阅读.avi文件C ++

时间:2011-05-05 14:31:18

标签: c++ file-upload file opencv avi

我对c ++做的很少,所以对我来说很简单。

我想在.avi视频文件中阅读我正在制作的程序。我将文件位置保存为string。有没有关于在c ++中使用.avi文件的好教程,还是有人知道读一个人的内容?它和普通文件一样吗?

感谢您的帮助。我在网上看,但我发现的每个帖子都是一个悬而未决的问题。

修改根据要求,这里有一点解释。我有一个更详细的previously asked SO question,但这就是我想要做的事情:

我正在制作一个可以检测面部的程序(虽然是OpenCV)截至目前,我已经获得了一个视频处理器程序,它将检测一个帧上的每个面部,并将该帧作为图像返回CvRec的面孔。我想拍摄这些面孔并测试它们以验证它们都是真正的面孔。

在我拥有所有面孔(经过测试)后,我想拍摄图片并一起测试。我测试每个帧上的面的大小和距离变化。如果面部以2秒的帧长度传递,那么我想裁剪面部并使其成为每帧的主题。

每裁剪一帧后,我想为用户保存新的视频文件。

希望这会有所帮助。如果有人需要更好的解释,请告诉我。

2 个答案:

答案 0 :(得分:5)

首先,一点背景。

什么是AVI?
AVI 代表 音频视频交错 。这是 RIFF(资源交换文件格式) 的特例。 AVI由Microsoft定义,它是音频/视频数据最常用的格式。

我假设您想要读取avi文件并解码压缩视频帧。 AVI文件与任何其他普通文件一样,您可以使用 fread() 在C 中)或 iostream 在C ++中 )打开avi文件并读取其内容。但是avi文件的内容是压缩格式的视频帧。压缩允许更大尺寸的视频内容有效地打包在更少的内存空间中。要理解这些压缩数据,您必须 解码 编码数据格式。您将不得不研究描述如何完成 AVI 编码的标准,然后提取和解码帧。现在,这些原始视频数据在馈送到视频设备时将以视频格式显示。

答案 1 :(得分:4)

看起来你住在OpenCV中,所以事情很简单。如果正确编译OpenCV,它能够将io /编码/解码委托给其他库。例如,Quicktime和其他人,但最好是使用ffmpeg。您可以使用OpenCV API打开,读取和解码所有内容,从而逐帧为您提供视频。

确保使用ffmpeg支持编译OpenCV,然后阅读有关如何读/写AVI文件的OpenCV教程。这真的很容易。

使用ffmpeg支持构建OpenCV可能很难。如果你不能使用当前的版本运行ffmpeg,你可能想要切换到旧版本的OpenCV。

就个人而言,我不会花时间尝试自己阅读视频并将任务委托给OpenCV。这就是应该如何使用。