http://hi.baidu.com/xulei1143/blog/item/ed443ef44908b363dcc4742d.html
网上转载的,我测试成功了。
我是win7下面,程序有不少问题,有些需要修改的地方。
微软的wmencoder sdk支持将图片/视频转换成标准的WMV文件.可以通过其提供的简单功能制作简单的视频.唯一遗憾的是SDK不提供转场效果,要做切换效果只能想别的办 法了。该SDK支持VB,C++,C#的编码.
环境: windows media encoder sdk,可在微软网站下载
C#实现:
using ...;
using WMEncoderLib;
using WMPREVIEWLib;
private void MyEncoder() {
try
{
// 创建一个Windows Media Encoder对象.
WMEncoder Encoder = new WMEncoder();
//获取一个源的集合.
IWMEncSourceGroupCollection SrcGrpColl = Encoder.SourceGroupCollection;
//创建一个源"SG_1"
IWMEncSourceGroup2 SrcGrp = (IWMEncSourceGroup2)SrcGrpColl.Add("SG_1");
//创建一个音频和视频的源
IWMEncVideoSource2 SrcVid = (IWMEncVideoSource2)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);
IWMEncSource SrcAud = SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);
//指定源文件
SrcAud.SetInput("C://jintian.mp3", "", "");//MP3
SrcVid.SetInput("C://result.wmv", "", "");//视频,可换成图片
//裁剪场景
SrcVid.CroppingBottomMargin = 25;
SrcVid.CroppingLeftMargin = 25;
SrcVid.CroppingRightMargin = 25;
SrcVid.CroppingTopMargin = 25;
//预览
IWMEncDataViewCollection DVColl_Postview;
DVColl_Postview = SrcVid.PostviewCollection;
WMEncDataView Postview;
Postview = new WMEncDataView();
int lPostviewStream;
lPostviewStream = DVColl_Postview.Add(Postview);
IWMEncProfileCollection ProColl = Encoder.ProfileCollection;
WMEncProfile2 Pro;
Pro = new WMEncProfile2();
//定义配置文件profile.具体的请看media encoder中的设置
/*for (int i = 0; i < ProColl.Count; i++)
{
Pro = ProColl.Item(i);
if (Pro.Name == "屏幕视频 - 高(CBR)")
{*/
Pro.LoadFromFile("myPrx.prx");
SrcGrp.set_Profile(Pro);
/*break;
}
}*/
//输出到目的文件
IWMEncFile2 File = (IWMEncFile2)Encoder.File;
File.LocalFileName = "C://test.wmv";
//如果源是图片则需要取消如下的注释。因为图片是静止的,本身不会播放.开启广播模式将会使图片进行不间断广播,从而实现连续的录制
/*Encoder.PrepareToEncode(true);
IWMEncBroadcast Brdcst = Encoder.Broadcast;
Brdcst.set_PortNumber(WMENC_BROADCAST_PROTOCOL.WMENC_PROTOCOL_HTTP, 8080);
*/
Encoder.Start();//录制开始
Postview.SetViewProperties(lPostviewStream, (int)panel2.Handle);
Postview.StartView(lPostviewStream);
MessageBox.Show("ok.");
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}