用 OpenCV 开发难免会针对 Camera 或者是 Video 做处理,有的时候需要将画面保留下来,这个时候最佳方案是保存成一个 .avi 的文件。
OpenCV 底层是用 FFMEPG 进行多媒体开发的,所以 OpenCV 它的长项不在于此,它只是提供了这种能力而已,如果要针对多媒体文件做复杂的处理,推荐的还是 FFMEPG 专业库。
OpenCV 用来创建视频文件的类是 VideoWriter。
但首先,给大家普及一些视频类相关的知识点。
1. 文件后缀名
我们一般都知道视频文件是 .mp4、.3gp、.rmvb 等等格式的,但一个文件取这样的后缀名是为了告诉用户或者操作系统,它的内容是什么格式的。我们也可以将 rmvb 格式的文件取名为 ***.avi。后缀的目的是为了方便用专业的工具或者软件操作它们。
2. 文件格式
我们可以将一个视频文件看做一个容器。
简单地说就是可以看做是一个盒子。
这个盒子里面有视频画面数据、音频数据、字幕数据等等。
不同的文件格式如 mp4、avi、mkv 等等,它们存放 打包数据的方式不一样,文件内部文件编码方式也可能不一样。
3. 编码格式
视频容器中,一般有视频和音频数据,它们采取的编码方式不一样。
视频常见的编码方式通常有:
x264、h264、mpeg-4
音频常见的编码方式通常有:
mp3、AAC、flac
编码的目的主要是为了高效存储和传输,如果你不采用编码压缩的话,那么视频可以看做是一系列的图片序列,体积会非常大。
4. 编码器和解码器
把视频或者音频按照编码格式,编码成特定文件格式需要编码器的参与,不然每次开发重新写代码代价很高。
把特定文件格式解码成特定的编码格式数据,这个过程称为解码,需要解码器的存在。
解码器和编码器都有开源的或者收费的工具库,极大方便了开发者。
5. FPS 帧率
我们读初