2.2.4 读取/写入视频文件

OpenCV提供了VideoCapture和VideoWriter类,支持各种视频文件格式。支持的格式取决于操作系统和OpenCV的构建配置,但是通常情况下,假设支持AVI格式是安全的。通过它的read方法,VideoCapture对象可以依次查询新的帧,直到到达视频文件的末尾。每一帧都是一幅BGR格式的图像。

相反,图像可以传递给VideoWriter类的write方法,该方法将图像添加到VideoWriter的文件中。我们来看一个例子,从一个AVI文件读取帧,再用YUV编码将其写入另一个文件:

VideoWriter类的构造函数的参数值得特别注意。必须指定一个视频文件的名称。具有此名称的所有之前存在的文件都将被覆盖。还必须指定一个视频编解码器。可用的编解码器因系统而异。支持的选项可能包括以下内容:

·0:这个选项表示未压缩的原始视频文件。文件扩展名应该是.avi。

·cv2.VideoWriter_fourcc('I','4','2','0'):这个选项表示未压缩的YUV编码,4:2:0色度抽样。这种编码是广泛兼容的,但是会产生大的文件。文件扩展名应该是.avi。

·cv2.VideoWriter_fourcc('P','I','M','1'):这个选项是MPEG-1。文件扩展名应该是.avi。

·cv2.VideoWriter_fourcc('X','V','I','D'):这个选项是一种相对较旧的MPEG-4编码。如果想限制生成的视频大小,这是一个不错的选项。文件扩展名应该是.avi。

·cv2.VideoWriter_fourcc('M','P','4','V'):这个选项是另一种相对较旧的MPEG-4编码。如果想限制生成的视频大小,这是一个不错的选项。文件扩展名应该是.mp4。

·cv2.VideoWriter_fourcc('X','2','6','4'):这个选项是一种相对较新的MPEG-4编码。如果想限制生成的视频大小,这可能是最佳的选项。文件扩展名应该是.mp4。

·cv2.VideoWriter_fourcc('T','H','E','O'):这个选项是Ogg Vorbis。文件扩展名应该是.ogv。

·cv2.VideoWriter_fourcc('F','L','V','1'):这个选项表示Flash视频。文件扩展名应该是.flv。

帧率和帧大小也必须指定。因为我们是从另一个视频复制的,所以这些属性可以从VideoCapture类的get方法读取。