FFmpeg捕获窗口时如何避免鼠标指针闪烁?

Mit*_*a M 5 c++ windows ffmpeg video-capture

我使用 gdigrab 来捕获窗口。效果很好,但是鼠标指针闪烁。(特别是当窗口尺寸较大时)

我的命令(c#):

 Process FFProc= new Process();
 FFProc.StartInfo.FileName = "cmd.exe";
 FFProc.StartInfo.Arguments="/C ffmpeg -y -f gdigrab -framerate 25 -i title=\"MyWin\" out.mpg";
 FFProc.Start();
Run Code Online (Sandbox Code Playgroud)

或(c++):

 system("ffmpeg -y -f gdigrab -framerate 25 -i title=\"MyWin\" out.mpg");
Run Code Online (Sandbox Code Playgroud)

请告诉我如何通过 FFmpeg 捕获窗口时避免鼠标指针闪烁?

FFmpeg = 最新的Zeranoe版本

操作系统 = MS Windows 8.1

小智 3

很久以前,在 Windows 3.x 中,鼠标光标是在软件中渲染的,当协作多任务操作系统繁忙时,它会闪烁、卡住,并且在其他方​​面非常有限。

后来,在 Windows 95 推出之前,引入了视频卡来“加速”Windows 操作。这些显卡支持硬件加速 bitblt 和硬件鼠标光标。鼠标的反应非常流畅,并且支持阴影。

显卡经历了多次演变,3D 加速变得更加重要。2D 硬件被放弃,取而代之的是更通用的 3D 支持,带有轨迹的鼠标光标和/或 alpha 混合阴影变得流行。

这意味着事情又回到了原点,鼠标光标再次由软件呈现,但对于多任务操作系统来说,没有第一次的缺点。

但是,由于鼠标实际上是渲染到显示器上的,因此为了捕获干净的屏幕截图,必须移除鼠标光标。光标现在或曾经被实现为分层窗口。

所有这一切的结果是,如果您获取窗口的 DC(通过 GetDCEx)并从中复制而不隐藏光标,您将在生成的屏幕截图中获得光标。

要捕获屏幕而不使光标闪烁,您需要切换到硬件光标,我只是认为不再支持它。