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

 

 

 

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