使用FFmpeg将多幅图像压缩为H264视频流
2016-06-25 15:58
316 查看
使用FFmpeg是进行视频或图像处理开发的利器,如何将多幅图像压缩成H264视频流是本文讨论的内容。FFmpeg配置请参照http://blog.csdn.net/wootengxjj/article/details/51758621。
本文参考了文章http://blog.csdn.net/weixinhum/article/details/37705253中的内容,根据FFmpeg的版本对其中的压缩类进行修改。
主函数的代码如下:
代码工程文件(2013):http://download.csdn.net/detail/wootengxjj/9559381。
本文参考了文章http://blog.csdn.net/weixinhum/article/details/37705253中的内容,根据FFmpeg的版本对其中的压缩类进行修改。
主函数的代码如下:
int _tmain(int argc, _TCHAR* argv[]) { MyEncoder myencoder; myencoder.Ffmpeg_Encoder_Init();//初始化编码器 myencoder.Ffmpeg_Encoder_Setpara(AV_CODEC_ID_H264, 800, 600);//设置编码器参数 //图象编码 FILE *f = NULL; char * filename = "myData.h264"; fopen_s(&f, filename, "wb");//打开文件存储编码完成数据 IplImage* img = NULL;//OpenCV图像数据结构指针 IplImage* resizeimg = NULL;//尺寸 int picturecount = 1; while (picturecount != 9) { /**此部分用的是OpenCV读入图像对象并取得图像的数据区,也可以用别的方法获得图像数据区**/ char chpicname[100]; sprintf(chpicname, "FishEye%d.jpg", picturecount);//获得图片路径 //sprintf(chpicname, "1.jpg", picturecount);//获得图片路径 img = cvLoadImage(chpicname, 1);//打开图像 //由于OpenCV图像数据区是以BGR排列的,所以要将其数据转换为正常的RGB排列才能做进一步的压缩,不然压出来的视频颜色会不正确 uchar* data = (uchar*)(img->imageData); uchar mid = 0; for (int row = 0; row < img->height; row++) for (int cols = 0; cols < img->width; cols++) { mid = data[row*img->widthStep / sizeof(uchar)+cols*img->nChannels + 0];//G data[row*img->widthStep / sizeof(uchar)+cols*img->nChannels + 0] = data[row*img->widthStep / sizeof(uchar)+cols*img->nChannels + 2]; data[row*img->widthStep / sizeof(uchar)+cols*img->nChannels + 2] = mid; } resizeimg = cvCreateImage(cvSize(800, 600), 8, 3); cvResize(img, resizeimg, CV_INTER_LINEAR);//调整图像大小 /**此部分用的是OpenCV读入图像对象并取得图像的数据区,也可以用别的方法获得图像数据区**/ myencoder.Ffmpeg_Encoder_Encode(f, (uchar*)resizeimg->imageData);//编码 cvReleaseImage(&img);//释放图像数据结构指针对像所指内容 cvReleaseImage(&resizeimg); picturecount++; } fclose(f); myencoder.Ffmpeg_Encoder_Close(); return 0; }
代码工程文件(2013):http://download.csdn.net/detail/wootengxjj/9559381。
相关文章推荐
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- Managed Media Aggregation using Rtsp and Rtp
- [总结]FFMPEG视音频编解码零基础学习方法
- 如何在 Ubuntu Linux 中使用 RAR 文件
- C#使用DeflateStream解压缩数据文件的方法
- C# 利用ICSharpCode.SharpZipLib实现在线压缩和解压缩
- C#使用WinRar命令进行压缩和解压缩操作的实现方法
- C#调用WinRar执行rar、zip压缩的方法
- C语言压缩文件和用MD5算法校验文件完整性的实例教程
- C#实现页面GZip或Deflate压缩的方法
- C#使用iCSharpcode进行文件压缩实现方法
- C#图片切割、图片压缩、缩略图生成代码汇总
- 利用Ffmpeg获得flv视频缩略图和视频时间的代码
- C#实现压缩HTML代码的方法
- Asp.net在线备份、压缩和修复Access数据库示例代码
- 使用UglifyJS合并/压缩JavaScript的方法
- 高性能WEB开发 JS、CSS的合并、压缩、缓存管理
- 脚本分析、压缩、混淆工具 JSA新版本发布,压缩效率提高大约10%
- 发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
- PHP实现图片压缩的两则实例