如何使用 C# .Net 将屏幕捕获为视频?
Posted
技术标签:
【中文标题】如何使用 C# .Net 将屏幕捕获为视频?【英文标题】:How to capture screen to be video using C# .Net? 【发布时间】:2011-09-29 08:55:30 【问题描述】:我知道有很多这样的问题。
但是我不想用Windows media encoder 9,因为拿到一个有问题,然后就不再支持了。
我知道,一种可能性是捕获大量屏幕截图并使用 ffmpeg
创建视频,但我不想使用第三方可执行文件。
有没有 .net
唯一的解决方案?
【问题讨论】:
您可以使用 Silverlight 4 来完成此任务,但不确定这是否适合您。 如果它可能是 .net 3.5 并且只有 winforms 我用的是Win7,但是软件应该在XP、Vista和W7下运行。目前我正在尝试 MS Expression Encoder 4 你检查过这个codeproject.com/kb/dotnet/wiascriptingdotnet.aspx 吗?它仅适用于 XP,但未在较新的操作系统上进行测试 我认为这仅适用于网络摄像头等外部设备?我想在桌面上捕获用户交互 【参考方案1】:答案是Microsoft Expression Encoder。在我看来,这是在 vista 和 windows 7 上录制内容的最简单方法
private void CaptureMoni()
try
Rectangle _screenRectangle = Screen.PrimaryScreen.Bounds;
_screenCaptureJob = new ScreenCaptureJob();
_screenCaptureJob.CaptureRectangle = _screenRectangle;
_screenCaptureJob.ShowFlashingBoundary = true;
_screenCaptureJob.ScreenCaptureVideoProfile.FrameRate = 20;
_screenCaptureJob.CaptureMouseCursor = true;
_screenCaptureJob.OutputScreenCaptureFileName = string.Format(@"C:\test.wmv");
if (File.Exists(_screenCaptureJob.OutputScreenCaptureFileName))
File.Delete(_screenCaptureJob.OutputScreenCaptureFileName);
_screenCaptureJob.Start();
catch(Exception e)
【讨论】:
旧帖子,但我觉得我应该提一下,如果您想录制持续时间超过 10 分钟的视频,使用 Expression Encoder 需要专业许可证,而 GPU 编码也需要专业许可证。 (就我个人而言,没有 GPU 编码我无法得到任何输出) 感谢@masterchris_99 的回答。我也想使用 MEE,但得到以下错误; PCba.Tests.Repository.dll 中出现“System.IO.FileNotFoundException”类型的异常,但未在用户代码中处理其他信息:无法加载文件或程序集“Microsoft.Expression.Encoder,版本=4.0.0.0,文化=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。系统找不到指定的文件。【参考方案2】:根据评论反馈进行编辑:
名为 baSSiLL 的开发人员慷慨地分享了一个存储库,其中包含一个屏幕录制 c# 库以及一个 c# 示例项目,展示了如何使用它来捕获屏幕和麦克风。
使用示例代码开始截屏非常简单:
recorder = new Recorder(_filePath,
KnownFourCCs.Codecs.X264, quality,
0, SupportedWaveFormat.WAVE_FORMAT_44S16, true, 160);
_filePath 是我要将视频保存到的文件的路径。
您可以传入各种编解码器,包括 AVI、MotionJPEG、X264 等。对于 x264,我必须先在我的机器上安装编解码器,但 AVI 开箱即用。
只有在使用 AVI 或 MotionJPEG 时,质量才会发挥作用。 x264 编解码器管理自己的质量设置。
上面的 0 是我想使用的音频设备。默认为零。
目前支持 2 种波形格式。 44100 16 位立体声或单声道。
true 参数表示我希望将音频编码为 mp3 格式。我相信在选择 x264 时这是必需的,因为在 .mp4 文件中组合的未压缩音频不会为我播放。
160 是编码音频的比特率。
~~~~~
要停止录制,您只需
recorder.Dispose();
recorder = null;
一切都是开源的,因此您可以编辑记录器类并更改尺寸、每秒帧数等。
~~~~
要启动并运行此库,您需要从下面的 github/codeplex 库下载或拉取。你也可以使用 NuGet:
安装包 SharpAvi
原帖:
夏普 AVI: https://sharpavi.codeplex.com/ 要么 https://github.com/baSSiLL/SharpAvi
该库中有一个示例项目,其中包含一个很棒的屏幕录像机以及用于设置/等的菜单。
我首先从这个 *** 问题的另一个答案中找到了 Screna,但我遇到了几个问题,涉及让 Mp3 Lame 编码器正常工作。 Screna 是 SharpAVI 的包装器。我发现通过删除 Screna 并关闭 SharpAvi 的样本,我的运气会更好。
【讨论】:
已经有一段时间了,但我相信 SharpAVI 有一个我无法重新创建的 LameEncoder 版本。我忘记了确切的问题,但认为每当我构建 LameEncoder 时,它都会丢失一些函数或者它是不同的方法名称等。我在 SharpAVI 中找到了实际的 DLL 文件,并且一旦我使用它就很顺利。 当我尝试将 Lame dll 文件与 Screna 一起使用时,方法中出现了匹配错误。就好像 Screna 使用的是不同版本的 lame。而且我无法重新创建所需的蹩脚 dll。以上是关于如何使用 C# .Net 将屏幕捕获为视频?的主要内容,如果未能解决你的问题,请参考以下文章
视频捕获 + 上传 + 处理 + 流回 - .NET & C#