首页 > 代码库 > c#生成AVI自动设置压缩格式,不调用AVISaveOptions
c#生成AVI自动设置压缩格式,不调用AVISaveOptions
工作中遇到生成AVI视频的项目,代码中会调用AVISaveOptions来设置压缩格式,针对单个文件还好说,但是批量生成视频的时候,每一个都要设置格式,
体验不是很好,经过查询资料问题得到解决
最开始的代码:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | AVICOMPRESSOPTIONS opts = new AVICOMPRESSOPTIONS(); opts.fccType = _fccType; opts.fccHandler = 0; opts.dwKeyFrameEvery = 0; opts.dwQuality = 0; opts.dwFlags = 0; opts.dwBytesPerSecond = 0; opts.lpFormat = new IntPtr(0); opts.cbFormat = 0; opts.lpParms = new IntPtr(0); opts.cbParms = 0; opts.dwInterleaveEvery = 0; AVICOMPRESSOPTIONS* p = &opts; AVICOMPRESSOPTIONS** pp = &p; IntPtr x = _ps; IntPtr* ptr_ps = &x; AVISaveOptions(0, 0, 1, ptr_ps, pp); int hr = AVIMakeCompressedStream( out _psCompressed, _ps, ref opts, 0); |
修改后的代码
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | opts.fccType = 0; opts.fccHandler = ( int )0x6376736d; opts.dwKeyFrameEvery = 0; opts.dwQuality = 10000; opts.dwFlags = 8; opts.dwBytesPerSecond = 0; opts.lpFormat = new IntPtr(0); opts.cbFormat = 0; opts.lpParms = new IntPtr(0); opts.cbParms = 4; opts.dwInterleaveEvery = 0; AVICOMPRESSOPTIONS* p = &opts; AVICOMPRESSOPTIONS** pp = &p; IntPtr x = _ps; IntPtr* ptr_ps = &x; opts.lpParms = Marshal.AllocHGlobal( sizeof ( int )); //AVISaveOptions(0, 0, 1, ptr_ps, pp); int hr = AVIMakeCompressedStream( out _psCompressed, _ps, ref opts, 0); |
思路就是,Debug模式下,跟踪设置完压缩格式后
?
1 | AVICOMPRESSOPTIONS结构体中各元素的值,其中lpParms需要利用 |
?
1 | Marshal.AllocHGlobal( sizeof ( int ))来获取,其余根据监视的值设定即可 |
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。