C++编程导出XVID编码的AVI视频
2014-04-04 21:28
232 查看
C++编程导出XVID编码的AVI视频
今天着实感受到了开源的魅力~~ 今天遇到了一个问题,在利用VS编程导出AVI视频时,只能使用无压缩和MSVC的codec,无压缩生成的avi太大了,而MSVC清晰度太差。我迫切的希望找到一种codec能编程支持。结果发现XVID的codec是开源的,于是占用空间小并且清晰度高的avi就‘诞生’了。下面就叙述一下,如何借用开源的XVID在VS环境下导出XVID编码的avi视频。
我希望使用XVID的视频压缩来实现占用空间小且清晰度高的目的。
在此附上,将单文档视图内容导成一段avi的简单程序:http://download.csdn.net/detail/u011442652/7147779 ,以作参考。视图使用GDI+绘制。主要代码在View类中。运行后,点击菜单Export->AVI
会生成一段100帧的无压缩视频,视频内容为数字1到100的连播。
2. 下载完后,我要编译VS环境下的工程。我使用VS2005编译,现在打开xvidcore-1.3.2\xvidcore\build\win32下的libxvidcore.sln。
3. 因为xvid的部分程序是用汇编写的,所以要下载安装nasm汇编器:http://sourceforge.net/projects/nasm/ 。完成安装后(如安装在C:/NASM下),
打开VS2005的Tools->Opitions对话框,选择Projects and Solutions->VC++ Directories,Executable files 添加 C:/NASM 。
4. 现在build project “libxvidcore”,就在xvidcore-1.3.2\xvidcore\build\win32\bin下生成了xvidcore.dll ,将这个dll拷贝到vs安装路径下的VC/bin下,就可以使用mmioFOURCC('X','V','I','D'),成功导出XVID编码的视频了。
5. 在build project “xvid_encraw” 时,可能会出现一个错误:error C2065: 'COINIT_MULTITHREADED' : undeclared identifier ,解决方法:可以在xvid_encraw.c 开头加入:
6. 下面附上一份我编译好的工程:http://download.csdn.net/detail/u011442652/7147821
7. 在使用时会出现一个Xvid Status 对话框:
![](http://img.blog.csdn.net/20140404215439453?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTQ0MjY1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如果想默认不出现这个对话框,可以在xvidcore-1.3.2\xvidcore\vfw\src\config.c中更改以下代码:
为:
今天着实感受到了开源的魅力~~ 今天遇到了一个问题,在利用VS编程导出AVI视频时,只能使用无压缩和MSVC的codec,无压缩生成的avi太大了,而MSVC清晰度太差。我迫切的希望找到一种codec能编程支持。结果发现XVID的codec是开源的,于是占用空间小并且清晰度高的avi就‘诞生’了。下面就叙述一下,如何借用开源的XVID在VS环境下导出XVID编码的avi视频。
1.MFC中生成AVI视频
我的目的是将MFC单文档视图显示的内容,导出生成一段AVI。由于不同时间点显示的内容不同,所以希望将这些显示内容连成一段视频。我借助了Gopalakrishna Palem写的CAviFile类实现的: http://www.codeproject.com/Articles/5055/Create-a-movie-from-an-HBitmap 。该类可以实现将HBITMAP连接成avi视频。 其使用方法为:CAviFile *m_avifile; int playrate=1;//帧率 DWORD dwCodec;//视频压缩编码器 //dwCodec=0;//无压缩 //dwCodec=mmioFOURC('M','S','V','C'); dwCodec=mmioFOURCC('X','V','I','D'); m_avifile=new CAviFile(“output.avi”,dwCodec, playrate);
我希望使用XVID的视频压缩来实现占用空间小且清晰度高的目的。
在此附上,将单文档视图内容导成一段avi的简单程序:http://download.csdn.net/detail/u011442652/7147779 ,以作参考。视图使用GDI+绘制。主要代码在View类中。运行后,点击菜单Export->AVI
会生成一段100帧的无压缩视频,视频内容为数字1到100的连播。
2. XVID的使用
1. Xvid是一个开放源代码的视频编解码器。可以从官网http://www.xvid.org/ 下开源代码。2. 下载完后,我要编译VS环境下的工程。我使用VS2005编译,现在打开xvidcore-1.3.2\xvidcore\build\win32下的libxvidcore.sln。
3. 因为xvid的部分程序是用汇编写的,所以要下载安装nasm汇编器:http://sourceforge.net/projects/nasm/ 。完成安装后(如安装在C:/NASM下),
打开VS2005的Tools->Opitions对话框,选择Projects and Solutions->VC++ Directories,Executable files 添加 C:/NASM 。
4. 现在build project “libxvidcore”,就在xvidcore-1.3.2\xvidcore\build\win32\bin下生成了xvidcore.dll ,将这个dll拷贝到vs安装路径下的VC/bin下,就可以使用mmioFOURCC('X','V','I','D'),成功导出XVID编码的视频了。
5. 在build project “xvid_encraw” 时,可能会出现一个错误:error C2065: 'COINIT_MULTITHREADED' : undeclared identifier ,解决方法:可以在xvid_encraw.c 开头加入:
#define _WIN32_WINNT 0x0400 #include <objbase.h> #pragma comment(lib, "ole32.lib")
6. 下面附上一份我编译好的工程:http://download.csdn.net/detail/u011442652/7147821
7. 在使用时会出现一个Xvid Status 对话框:
如果想默认不出现这个对话框,可以在xvidcore-1.3.2\xvidcore\vfw\src\config.c中更改以下代码:
{"display_status", ®.display_status, 1}
为:
{"display_status", ®.display_status, 0}更改完后,再重新编译生成新的dll文件。
相关文章推荐
- C++模板学习
- 从B树、B+树、B*树谈到R 树
- include<stdio.h>
- e10-1.c
- C语言中main( int argc, char *argv[] )和getopt()函数学习
- C++多态
- Java语言与C++语言的差异总结
- 3. 函数升级(上)
- 如何在C++中创建可被Blueprint调用的全局函数
- 为什么C和C++牛人多?
- C++之继承和动态内存分配
- C++之继承和动态内存分配
- C++专题之实现信息系统(抽象类、继承、链表)
- NEUOJ 1302: 最大子序列(双向dp)
- 每天学一点c++:#if #ifdef #ifndef #elif #else #endif的用法
- C++ UTF8 UrlEncode(宽字符)
- WRT 下 C++ wstring, string, String^ 互转
- 黑马程序员-IOS-C语言预处理指令及杂项小计
- C语言格式输出函数printf()详解
- C++ 习题 输出日期时间--友元函数