一、什么是FOURCC
FOURCC是“four character code”的缩写,也称为4CC。用于媒体文件中的视频编解码器、压缩格式、颜色或像素格式的标识符。一个字符编码占用一个字节也就是8位的存储空间,因此一个FOURCC占用4字节。FOURCC中的四个字符通常都是用ASCII字符编码,以方便交流。
AVI文件是最广泛使用的,或者说是第一种广泛使用的媒体文件格式,它使用FOURCC标识符作为编解码器用于压缩文件中的各种视频/音频流。其他比较著名的FOURCC包括DIVX、XVID、H264、DX50。但这些只是数百个在使用的FOURCC的一小部分。
视频的大小直接影响视频分析的实时性,而视频文件的大小影响因素有时长、格式、帧率(FPS)以及分辨率等,因此需要选择合适的格式,或者做一些压缩处理。部分CV_FOURCC测试如下:
二、视频压缩
ffmpeg是格式转化和压缩的工具,使用命令行进行转化。参考文档 http://wiki.webmproject.org/ffmpeg。
测试如下:
ffmpeg -i test_mjpg.avi -threads 4 -vcodec libvpx-vp9 -cpu-used -8 -crf 10 -qmax 60 -deadline realtime test.webm
实测:19M压缩为1.6M
三、图片序列转视频
VideoWriter(const string& filename, int fourcc, double fps,
Size frameSize, bool isColor=true);
各参数含义如下:
- filename: 输出视频文件的名称
- fourcc:four character code,四个字符用来表示压缩帧的编解码
- fps:帧率
- frameSize:每帧图片的大小
- isColor: 默认非零,编码器将得到彩色帧并进行编码
第二个参数OpenCV提供的格式是未经过压缩的,目前支持的格式如下
- CV_FOURCC(‘P’, ‘I’, ‘M’, ‘1’) = MPEG-1 codec
- CV_FOURCC(‘M’, ‘J’, ‘P’, ‘G’) = motion-jpeg codec
- CV_FOURCC(‘M’, ‘P’, ‘4’, ‘2’) = MPEG-4.2 codec
- CV_FOURCC(‘D’, ‘I’, ‘V’, ‘3’) = MPEG-4.3 codec
- CV_FOURCC(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4 codec
- CV_FOURCC(‘U’, ‘2’, ‘6’, ‘3’) = H263 codec
- CV_FOURCC(‘I’, ‘2’, ‘6’, ‘3’) = H263I codec
- CV_FOURCC(‘F’, ‘L’, ‘V’, ‘1’) = FLV1 codec
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(){
Mat src=imread("/home/xxx/cam0/0.png",1);
char image_name[100];
int isColor = 1;
int fps = 10;
int frameWidth = src.cols;
int frameHeight = src.rows;
VideoWriter writer("test.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, Size(frameWidth, frameHeight), 0);
cout << "info:" << endl
<< "test.avi" << endl
<< "Size:" << frameWidth << "*" << frameHeight << endl
<< "fps:" << fps << endl;
for (int i = 0; i < 1000; i++)
{
sprintf(image_name, "/home/xxx/cam0/%d.png",i);
cout<<image_name<<endl;
src = imread(image_name, 1);
if (src.empty())
{
cout<<"全部图像加载完成!"<<endl;
break;
}
writer<<src;
if (cvWaitKey(5) > 0)
break;
}
writer.release();
destroyAllWindows();
return 0;
}
参考其他博客:
https://www.fourcc.org/fourcc.php
https://brucedone.com/archives/1194
https://blog.csdn.net/cow_boy001/article/details/8294403?locationNum=1&fps=1