使用Accord.Net实现屏幕录制

实现原理:

首先理解一下,什么是视频:视频实际是由一张一张的连续图片拼接而成,在一秒中播放的图片数量越多,则视频连续性越卡(即帧率)

那么录屏功能,可以理解为:连续的快速截图,再将图片组合为一个视频。

实际开发:

Accord是一个机器学习一个非常完成的库,如果需要详细了解,可以跳转至官方http://accord-framework.net/进行详细了解

但是本文只应用其中的Video功能实现录屏功能。

首先在NuGet的管理器中添加相关的包:Accord,Accord.Video,Accord.Video.FFMPEG.x64(PS:应为本人项目为64位,所以专门引用了64位,32位的为Accord.Video.FFMPEG)

    

需要使用其中的功能:1、屏幕截图功能;2、图片转视频

    

/// <summary>
/// 截屏工具
/// </summary>
Accord.Video.ScreenCaptureStream screenShot;

/// <summary>
/// 截屏转视频工具
/// </summary>
Accord.Video.FFMPEG.VideoFileWriter videoWriter;
/*初始化屏幕截图工具,尺寸设置为全屏录制*/
screenShot = new Accord.Video.ScreenCaptureStream(new Rectangle(0, 0, Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height));
/*初始化视频写入工具*/
videoWriter = new Accord.Video.FFMPEG.VideoFileWriter();
/*创建视频文件,并设置相关尺寸、帧率、视频格式、码率(影响清晰度)*/
videoWriter.Open("c:/temp.avi", Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height, 25, VideoCodec.MSMPEG4v3, 4000 * 1024);

/*截屏的频率,单位毫秒*/
screenShot.FrameInterval = 40;
/*截屏成功后写入视频*/
screenShot.NewFrame += (s, e1) =>
{
    videoWriter.WriteVideoFrame(e1.Frame);
};
/*开始截屏*/
screenShot.Start();
/*停止截屏*/
screenShot.Stop();
/*停止视频写入*/
videoWriter.Close();

 

DEMO下载

链接:https://pan.baidu.com/s/1O7_cAaTB08bfUQgWupl_MA 密码:1fai

 


遇到一个问题:

Q:在某学校使用的品牌机中,调用的时候出现了如下的错误文件信息

****************************异常文本****************************
【出现时间】:2018/10/24 星期三 上午 10:56:20
【异常类型】:TypeInitializationException
【异常信息】:“<Module>”的类型初始值设定项引发异常。
【堆栈调用】:   在 ScreenShot.ScreenVideoForm..ctor()
   在 ScreenShot.Program.Main() 位置 d:\documents\visual studio 2015\Projects\ScreenShot\ScreenShot\Program.cs:行号 30
***************************************************************

实际现象:Accord.Video.ScreenCaptureStream 对象无法实例化,实例化的时候就报错(具体原因未知)

A1:使用AForge.NET,官方网站(NUGET):http://www.aforgenet.com/framework/。但是没有找到64位的支持。
使用方式与Accord.NET完全一致。

A2:使用SharpAvi,官方地址(NUGET):https://github.com/baSSiLL/SharpAvi。我封装一个帮助类,直接可调用。
百度云盘,链接:https://pan.baidu.com/s/1-os5ODEBHMS3KquWavS7iQ  提取码:ha2f 
 

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值