几种Windows录屏技巧

PPT录屏,这个法子很微软、很正宗,虽然听上去很野。PPT 2016及之后版本都支持,支持长时间录屏,我录过一个小时的。此法兼容性相当好,不依赖Microsoft Store,在LTSB版Win10中也能用,在远程桌面(RDP)中同样可以视音双录,如遇幺蛾子,参看

《PPT 2016录屏指南》
https://scz.617.cn/windows/202106171210.txt

PPT录屏最大的好处是,大概率你已经拥有它,不需要安装其他东西。

ZoomIt也支持录屏,但没有音频,这种适合教学展示,不适合听网课场景,不知Mark Russinovich会不会考虑支持音频。这是微软的绿色工具,非野生。

《Sysinternals ZoomIt 6.0支持录屏》https://scz.617.cn/windows/202207201035.txt

有Microsoft Store的Windows,可以装”Xbox Game Bar”,这玩意儿能录屏。Win-G呼出,Win-Alt-R开始录屏,再次Win-Alt-R结束录屏,缺省情况下自动保存到%USERPROFILE%\Videos\Captures\

对于常打游戏的人来说,”Xbox Game Bar”用起来还算顺手,不打游戏的,碰上这种软件,可能并不顺畅。一般来说,它以单个应用为单位进行录屏,先对焦到目标应用,就是让目标应用处于前台,再Win-G呼出”Xbox Game Bar”。缺省有个”捕获”浮动界面,若无,可从主界面点击”捕获”,之后就出来了。”捕获”界面上有几个钮,依次是截屏、录制最后30秒、录制、录制时打开麦克风,我们只关心左起第三个钮,录制。这个有快捷键,Win-Alt-R,按一次是录,再按一次是停,来回切换都是同一快捷键。有些文章会说Win-Alt-G,那是录制最后30秒的快捷键,不要与呼出主界面的Win-G搞混了。

离开主界面有两种办法,再按一次Win-G,或者按ESC。

“Xbox Game Bar”录屏时的目标应用不能是桌面或资源管理器,否则会在试图录屏时提示「游戏功能不可用于Windows桌面或文件资源管理器」,应该是对explorer.exe有限制,底层机理不明。这个限制及其提示,对非IT人士太不友好了,不少人测试失败均缘于此,最终弃用之。目标应用是CMD、RDP都没问题。

“Xbox Game Bar”主界面最右侧是”设置”,最好都过一遍。”常规”里有两条

. 当我开始游戏时显示提示
. 记住这是一款游戏

不录游戏不用管这个,若目标应用被标识成游戏,下次打开目标应用可能会自动呼叫”Xbox Game Bar”,我瞎猜的。主界面中的设置不全,在”Windows设置-游戏-摄像”处另有录屏设置,可调整音频质量、视频帧速率、视频质量等等,缺省值不是最高值。

最坑的是,录屏结果默认保存位置在C盘,若录制码率设成最高,生成的MP4会很大。可以修改位置,但不能简单修改。官方提供的邪门步骤是,在资源管理器中剪切前述”Captures”目录到任意位置,之后录屏保存位置自动跟随过去,explorer.exe对此操作有特殊跟踪处理。对于中文版Win10,你看到的目录名可能被转换成”摄像”,不必犹疑,照切不误。但”摄像”一旦离开原位置,粘贴他处时目录名就还原成”Captures”。

参看

《在Windows上调整捕获设置》
https://support.xbox.com/zh-CN/help/games-apps/game-setup-and-play/adjust-capture-settings-windows-10

Win10右下角托盘区域有时会出现个小地球,提示”无法连接到Internet”,即使你正欢快地上着公网,仍有一定几率看到这个提示。一般来说不用理会,也不影响啥。但是,出现该提示时,你的Microsoft Store就废了,无法下载安装应用、无法登录、提示0x800704cf错误码等等。此时你是装不了”Xbox Game Bar”的,微软的智障设计终究影响了你。这是另一个话题,不在此展开。

前述三种软件都算微软的,第三方软件就多了去了。录屏软件千千万,我是没这需求,也没深入对比测试过。很多工具,用哪个不用哪个,都是很个人的选择,好坏更是偏主观的判断。

前面PPT录屏已经很神奇了,但是,接下来的操作更神奇。

网友UID(5418532260)提到,有很多「在线录屏网站」,浏览器有捕获画面的API,打开网站就能录,比如

https://recordscreen.io/

我在虚拟机中用Chrome试了一下,可用,只需要浏览器本身,无需安装其他东西,即可进行录屏,神奇。点击”RECORD!”,有两种,”Screen+Cam”与”Screen Only”,前者应该同时采集摄像头,一般选后者好了。点击”START RECORDING”,会弹出一个界面,问你想分享什么,其实就是问你录哪个窗口。该界面有三种选择,Chrome标签页、窗口、整个屏幕,英文版这几项是Chrome Tab、Window、Entire screen,望文生义即可,可以录指定的Chrome标签页、桌面应用程序或者全屏。录桌面应用程序时,可以选资源管理器、远程桌面、Chrome、CMD等等。这个选择界面是Chrome展示的,不是js展示的,该过程就是授权过程,用户必须显式选择录制目标,否则不会录制,这将
阻止恶意网页利用该技术偷录。

选中录制目标后,点击”分享”,就是开始录制。之后有个悬浮窗,其中有”停止共享”,点击它就结束录制。出现新界面,可在线观看录屏结果,点击”DOWNLOAD VIDEO”下载video.webm,系统自带Windows Media Player就能放。不喜欢该格式的,自己本地转换。该在线屏录网站,对系统性能影响显著,不能指定录制码率什么的,但胜在「零安装可用」,应急时上佳选择。

有很多利用这种技术的Chrome录屏插件,但我一个也没试,参看

20+ Best Screen Recorder Chrome Extensions in 2023 – Tanoy Chowdhury [2023-04-27]

20+ Best Screen Recorder Chrome Extensions in 2023

对WEB前端一窍不通,不明觉厉中。简单研究了一下,参看

Using the Screen Capture API
https://developer.mozilla.org/en-US/docs/Web/API/Screen_Capture_API/Using_Screen_Capture

简单点说,Chrome从版本49开始有一套API可以录屏,js可以调它们。严格来说,不是js录屏,是本地桌面应用程序Chrome录屏,只不过Chrome未在GUI中暴露此功能,目前可由js间接使用之。明白原理后,玄幻色彩淡了许多。Chrome录屏并非必须访问摄像头、麦克风,视你想录什么而定,不要为了录屏盲目允许访问摄像头、麦克风。

单说录屏,与WebRTC无关,只需js在浏览器中执行即可,无需服务端代码配合,无需各种「在线录屏网站」。这些随网页而来的js或者Chrome录屏插件,一般会回传录制结果到服务端,录全屏时,服务端不就看到任务栏、标签页了么,要万分谨慎,别给自己挖坑。

下面是简版演示文件,screenrecord.html,本地打开,进行Chrome录屏,本地保存录制结果。

————————————————————————–
<html>
<head>
<title>Screen Recording</title>
<meta charset=”UTF-8″ />
<style>
body {
text-align: center;
}

button {
display: inline-block;
margin: 1em 1em;
font-size: 2em;
cursor: pointer;
}

video {
border: 1px solid lightgray;
width: 100%;
background-color: #eee;
}
</style>
</head>

<body>
<button id =”Start”>Start Recording</button>
<button id =”Stop”>Stop Recording</button>
<video autoplay />
<script>
let start = document.getElementById(“Start”),
stop = document.getElementById(“Stop”),
video = document.querySelector(“video”),
recorder, stream;

async function startRecording() {
stream = await navigator.mediaDevices.getDisplayMedia({
audio: true,
video: true
});

recorder = new MediaRecorder(stream);

const chunks = [];
recorder.ondataavailable = e => chunks.push(e.data);

recorder.onstop = e => {
const completeBlob = new Blob(chunks, { type: chunks[0].type });
video.src = URL.createObjectURL(completeBlob);
const downloadLink = document.createElement(“a”);
downloadLink.href = URL.createObjectURL(completeBlob);
downloadLink.download = “capture.webm”;
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
};

recorder.start();
}

start.addEventListener(“click”, () => {
start.setAttribute(“disabled”, true);
stop.removeAttribute(“disabled”);
startRecording();
});

stop.addEventListener(“click”, () => {
stop.setAttribute(“disabled”, true);
start.removeAttribute(“disabled”);
recorder.stop();
stream.getVideoTracks()[0].stop();
});
</script>
</body>
</html>
————————————————————————–

给个在线版方便测试,并不回传服务器,只在本地运行,录制效果还可以。

https://scz.617.cn/windows/screenrecord.html

录制标签页时,缺省勾选了”分享标签页中的音频”,视音双录没问题。录全屏时,缺省未勾选”分享系统中的音频”,必须手工勾选才能视音双录,否则不录音频。录制桌面应用程序时,没有类似的音频复选框,用媒体播放器测的,我这儿死活只录到视频录不到音频。尝试给audio指定具体音频输出设备,未如愿,若谁修改成功,望不吝赐教。是不是这种情况就不支持录音频?

————————————————————————–
stream = await navigator.mediaDevices.getDisplayMedia({
audio: { mediaSource: “Speakers (Realtek(R) Audio)” },
video: { mediaSource: “screen” }
});
————————————————————————–

screenrecord.html采集数据后暂时存放在chunks中,实际消耗Chrome的内存,若录制时间过长,内存吃不消,只是原型演示版。那些在线录屏网站可以分段回传chunks,由服务端代码拼装完整并存储到硬盘。单就长时间录屏时数据存储而言,或许不得不回传服务器,我瞎说的,不懂WEB前端开发。注意,回传操作本身消耗带宽。

Spread the word. Share this post!

Meet The Author

C/ASM程序员