C++编程导出XVID编码的AVI视频

   C++编程导出XVID编码的AVI视频

 今天着实感受到了开源的魅力~~ 今天遇到了一个问题,在利用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",			&reg.display_status,			1}

为:

{"display_status",			&reg.display_status,			0}
更改完后,再重新编译生成新的dll文件。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值