c#生成AVI自动设置压缩格式,不调用AVISaveOptions

工作中遇到生成AVI视频的项目,代码中会调用AVISaveOptions来设置压缩格式,针对单个文件还好说,但是批量生成视频的时候,每一个都要设置格式,

体验不是很好,经过查询资料问题得到解决

最开始的代码:

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);

  修改后的代码

 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模式下,跟踪设置完压缩格式后

AVICOMPRESSOPTIONS结构体中各元素的值,其中lpParms需要利用
Marshal.AllocHGlobal(sizeof(int))来获取,其余根据监视的值设定即可

转载于:https://www.cnblogs.com/niuge/p/3758053.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值