使用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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章