实现原理:
首先理解一下,什么是视频:视频实际是由一张一张的连续图片拼接而成,在一秒中播放的图片数量越多,则视频连续性越卡(即帧率)
那么录屏功能,可以理解为:连续的快速截图,再将图片组合为一个视频。
实际开发:
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