avi视频 及其压缩
2007-12-05 15:24
253 查看
#include<windows.h>
#include <vfw.h>
#pragma comment(lib,"vfw32.lib")
int main(int argc, char* argv[])
{
int m_ImageWidth , m_ImageHeight ;
int frames = 1 ;
m_ImageWidth = 100 ;
m_ImageHeight = 100 ;
char buffer[100*100*4] ;
memset(buffer,1,sizeof(buffer));
***IFileInit(); //初始化
P***IFILE pAviFile;
char fileName[]="a.avi" ;
P***ISTREAM pVideoStream;
if( ***IFileOpen(&pAviFile,fileName,OF_CREATE|OF_WRITE,NULL) )
{
MessageBox(NULL,"AviFileOpen error","error",MB_OK);
return 0;
}
***ISTREAMINFO aviStreamInfow;
memset(&aviStreamInfow,0,sizeof(aviStreamInfow));
aviStreamInfow.fccType = streamtypeVIDEO;
aviStreamInfow.dwRate = 1 ;
aviStreamInfow.dwScale = 1 ;
aviStreamInfow.dwSuggestedBufferSize = m_ImageHeight * m_ImageWidth *32 ;
aviStreamInfow.rcFrame.bottom = m_ImageHeight ;
aviStreamInfow.rcFrame.right = m_ImageWidth ;
strcpy(aviStreamInfow.szName,fileName);
***IFileCreateStream(pAviFile,&pVideoStream,&aviStreamInfow);
***ICOMPRESSOPTIONS options;
***ICOMPRESSOPTIONS * aoptions[1] = {&options};
memset(&options,0,sizeof(options));
// ***ISaveOptions(NULL,0,1,&pVideoStream,aoptions);
DWORD params = 75;
// char a[4];
// memcpy(a,&options.fccHandler,4);
options.fccType = ICTYPE_VIDEO ;
options.fccHandler = mmioFOURCC('i','v','4','1');//mmioFOURCC('i','v','4','1');
options.dwQuality = 2000;
options.dwFlags = 8 ;
options.lpParms = 0;
options.cbParms = 0 ;
P***ISTREAM pCompressedStream;
***IMakeCompressedStream(&pCompressedStream,pVideoStream,aoptions[0],NULL);
BITMAPINFOHEADER bmpInfoHeader;
memset(&bmpInfoHeader,0,sizeof(bmpInfoHeader));
bmpInfoHeader.biSize = sizeof(bmpInfoHeader);
bmpInfoHeader.biHeight = m_ImageHeight;
bmpInfoHeader.biWidth = m_ImageWidth ;
bmpInfoHeader.biBitCount = 32 ;
bmpInfoHeader.biCompression = BI_RGB ;
bmpInfoHeader.biPlanes = 1 ;
if(0 != ***IStreamSetFormat(pCompressedStream,0,&bmpInfoHeader,sizeof(bmpInfoHeader)))
{
MessageBox(NULL,"setformat","a;lsdkf",MB_OK);
return 0;
}
// ***IStreamSetFormat(pVideoStream,0,&bmpInfoHeader,sizeof(bmpInfoHeader));
for( int i = 0 ;i < 1000 ;i++)
{
// ***IStreamWrite(pVideoStream,frames*5,1,buffer,sizeof(buffer),***IIF_KEYFRAME,NULL,NULL);
***IStreamWrite(pCompressedStream,frames,1,buffer,sizeof(buffer),***IIF_KEYFRAME,NULL,NULL);
memset(buffer,i*20+50,sizeof(buffer));
frames++ ;
}
// pCompressedStream->Release();
if(pVideoStream)
{
pVideoStream->Release();
pVideoStream = NULL;
}
if(pAviFile)
{
***IFileClose(pAviFile);
pAviFile->Release();
pAviFile = NULL;
}
***IFileExit(); //释放库
return 0;
}
此中 options.fccHandler 的设定与视频的窗口的大小有很到的关系,如果比例失调,就回出现设定format时,出现非法访问,或者视频保存的文件大小是0,调试了一天了,才发现这个问题所在,郁闷啊。fccHandler的值的设定可以根据***ISaveOptions中获得的值fccHandler,然后转成一个4字符数组,就容易理解了。呵呵!
现在还不理解ICXX系列函数如何压缩视频的
#include <vfw.h>
#pragma comment(lib,"vfw32.lib")
int main(int argc, char* argv[])
{
int m_ImageWidth , m_ImageHeight ;
int frames = 1 ;
m_ImageWidth = 100 ;
m_ImageHeight = 100 ;
char buffer[100*100*4] ;
memset(buffer,1,sizeof(buffer));
***IFileInit(); //初始化
P***IFILE pAviFile;
char fileName[]="a.avi" ;
P***ISTREAM pVideoStream;
if( ***IFileOpen(&pAviFile,fileName,OF_CREATE|OF_WRITE,NULL) )
{
MessageBox(NULL,"AviFileOpen error","error",MB_OK);
return 0;
}
***ISTREAMINFO aviStreamInfow;
memset(&aviStreamInfow,0,sizeof(aviStreamInfow));
aviStreamInfow.fccType = streamtypeVIDEO;
aviStreamInfow.dwRate = 1 ;
aviStreamInfow.dwScale = 1 ;
aviStreamInfow.dwSuggestedBufferSize = m_ImageHeight * m_ImageWidth *32 ;
aviStreamInfow.rcFrame.bottom = m_ImageHeight ;
aviStreamInfow.rcFrame.right = m_ImageWidth ;
strcpy(aviStreamInfow.szName,fileName);
***IFileCreateStream(pAviFile,&pVideoStream,&aviStreamInfow);
***ICOMPRESSOPTIONS options;
***ICOMPRESSOPTIONS * aoptions[1] = {&options};
memset(&options,0,sizeof(options));
// ***ISaveOptions(NULL,0,1,&pVideoStream,aoptions);
DWORD params = 75;
// char a[4];
// memcpy(a,&options.fccHandler,4);
options.fccType = ICTYPE_VIDEO ;
options.fccHandler = mmioFOURCC('i','v','4','1');//mmioFOURCC('i','v','4','1');
options.dwQuality = 2000;
options.dwFlags = 8 ;
options.lpParms = 0;
options.cbParms = 0 ;
P***ISTREAM pCompressedStream;
***IMakeCompressedStream(&pCompressedStream,pVideoStream,aoptions[0],NULL);
BITMAPINFOHEADER bmpInfoHeader;
memset(&bmpInfoHeader,0,sizeof(bmpInfoHeader));
bmpInfoHeader.biSize = sizeof(bmpInfoHeader);
bmpInfoHeader.biHeight = m_ImageHeight;
bmpInfoHeader.biWidth = m_ImageWidth ;
bmpInfoHeader.biBitCount = 32 ;
bmpInfoHeader.biCompression = BI_RGB ;
bmpInfoHeader.biPlanes = 1 ;
if(0 != ***IStreamSetFormat(pCompressedStream,0,&bmpInfoHeader,sizeof(bmpInfoHeader)))
{
MessageBox(NULL,"setformat","a;lsdkf",MB_OK);
return 0;
}
// ***IStreamSetFormat(pVideoStream,0,&bmpInfoHeader,sizeof(bmpInfoHeader));
for( int i = 0 ;i < 1000 ;i++)
{
// ***IStreamWrite(pVideoStream,frames*5,1,buffer,sizeof(buffer),***IIF_KEYFRAME,NULL,NULL);
***IStreamWrite(pCompressedStream,frames,1,buffer,sizeof(buffer),***IIF_KEYFRAME,NULL,NULL);
memset(buffer,i*20+50,sizeof(buffer));
frames++ ;
}
// pCompressedStream->Release();
if(pVideoStream)
{
pVideoStream->Release();
pVideoStream = NULL;
}
if(pAviFile)
{
***IFileClose(pAviFile);
pAviFile->Release();
pAviFile = NULL;
}
***IFileExit(); //释放库
return 0;
}
此中 options.fccHandler 的设定与视频的窗口的大小有很到的关系,如果比例失调,就回出现设定format时,出现非法访问,或者视频保存的文件大小是0,调试了一天了,才发现这个问题所在,郁闷啊。fccHandler的值的设定可以根据***ISaveOptions中获得的值fccHandler,然后转成一个4字符数组,就容易理解了。呵呵!
现在还不理解ICXX系列函数如何压缩视频的
相关文章推荐
- avi视频 及其压缩
- avi视频 及其压缩 2
- 利用vfw库将一系列bmp图转换为压缩的avi视频
- 下一代压缩视频标准性能及其技术特征
- 视频压缩标准的技术原理及其发展
- 视频压缩标准的技术原理及其发展
- BMP to AVI 及其压缩的实现
- # ffmpeg 将多幅图片压缩成视频 h264 avi
- 将图像文件制作成AVI视频
- asp.net播放mp3,wma, avi音频视频
- openframeworks播放mp4,avi的视频格式
- 利用FFmpeg玩转Android视频录制与压缩(一)章
- 从图片文件夹下读取图片并写入AVI视频
- 用Opencv保存视频文件avi(转)
- 矩阵及其压缩存储
- 记一次FFMPEG转avi视频保存到ftp服务器的失败尝试
- 【示例教程】LEADTOOLS中如何用H.264压缩视频创建DICOM文件
- VFW实例程序。简单 “视频捕获”,没有压缩、线程、保存、等更多的功能
- 基于ambarella安霸H.264编解码芯片的视频采集压缩系统
- FFmpeg 视频旋转和压缩