跳转到内容

屏幕捕获

来自 Arch Linux 中文维基

本文列出并描述了截屏录屏软件。

截屏软件[编辑 | 编辑源代码]

专用于截图的软件[编辑 | 编辑源代码]

应用程序列表[编辑 | 编辑源代码]

https://cubocore.gitlab.io/ || coreshotAUR
  • Escrotum — 受 scrot 启发的屏幕捕获工具,使用 PyGTK,可替代 scrot。
https://github.com/Roger/escrotum || escrotum-gitAUR
https://github.com/lupoDharkael/flameshot || flameshot
https://gitlab.gnome.org/GNOME/gnome-screenshot/ || gnome-screenshot
https://sr.ht/~emersion/grim/ || grim
  • gscreenshot — 支持多种截图后端(如 scrot、ImageMagickPILimlib2 和 grim)的 GTK 前端工具,支持延时、选区及复制到剪贴板功能。
https://github.com/thenaterhood/gscreenshot || gscreenshotAUR
  • HotShots — 屏幕捕获工具,支持多种图像格式保存,并可添加注释和图形标注(箭头、线条、文字等)。
https://github.com/obiwankennedy/HotShots || hotshots-gitAUR
  • imgur-screenshot — 截取选区并上传至 imgur,支持更多扩展功能。
https://github.com/jomo/imgur-screenshot || imgur-screenshotAUR
  • ksnip — 基于 Qt 的跨平台截图工具,提供多种标注功能、基本的图像编辑功能,并支持远程存储(到 FTP、imgur 或通过自定义脚本)。
https://github.com/ksnip/ksnip || ksnip
  • Lightscreen — 自动保存和管理截图的工具,以隐藏后台进程运行,通过快捷键触发并按用户偏好保存截图。
https://lightscreen.com.ar || lightscreenAUR
  • LXImage-Qt — LXImage 的 Qt 移植版,含图像查看和截图功能(通过 lximage-qt --screenshot 运行)。
https://github.com/lxde/lximage-qt || lximage-qt
  • maim — 旨在替代 scrot 的命令行截图工具,在多方面表现得比 scrot 更好。
https://github.com/naelstrof/maim || maim
  • MATE 截图工具MATE 桌面环境的截图工具。
https://mate-desktop.org || mate-utils
  • menyoki — 命令行截图与屏幕录制工具,支持图像处理操作。
https://github.com/orhun/menyoki || menyoki
  • mss — 基于 xrandr 的 Python 截图模块,提供了极简的命令行界面。
https://pypi.org/project/mss/ || python-mss
  • Pantheon 截图工具 — 专为 elementary OS 设计的截图工具。
https://github.com/elementary/screenshot || pantheon-screenshot
  • ScreenCloud — 全屏或选区截图并上传至 imgur,支持身份验证、插件及系统托盘。
https://screencloud.net/ || screencloudAUR
  • ScreenGrab — 基于 Qt 的快速截图工具(已停止开发)。
https://github.com/DOOMer/screengrab || screengrab
  • scrot — 简单的 X 命令行截图工具。
https://github.com/resurrecting-open-source-projects/scrot || scrot
  • Shotgun — 用 Rust 编写的极简 X 截图工具(作者称其速度比 maim 快一倍)。
https://github.com/neXromancers/shotgun || shotgun
  • Shutter — 功能丰富的截图与编辑工具(支持延时截图)。
https://shutter-project.org/ || shutter
  • SpectacleKDE 的屏幕捕获工具,支持捕获整个桌面、单个窗口、窗口区域、矩形选区或自由选区;属于 kde-graphics包组
https://apps.kde.org/spectacle/ || spectacle
  • Xfce4 截图工具 — 包括应用及 Xfce 面板插件,支持全屏、活动窗口或选区截图;属于 xfce4-goodies包组
https://docs.xfce.org/apps/screenshooter/start || xfce4-screenshooter
https://www.x.org/ || xorg-xwd

使用方式[编辑 | 编辑源代码]

本文或本章节的语言、语法或风格需要改进。参考:帮助:风格

原因:建议将仅含简要说明的小节(如 #Escrotum)合并至前述应用列表的对应条目,并为其他内容创建独立维基页面。(在en:Talk:Screen capture讨论)

maim[编辑 | 编辑源代码]

maim 旨在成为 scrot 的改进版。

截取全屏并保存至文件:

$ maim 文件名

交互式选择矩形区域,截取后保存至文件:

$ maim --select 文件名

截取当前活动窗口并保存至文件(需安装 xdotool):

$ maim --window $(xdotool getactivewindow) 文件名

选区截屏(不包含光标)并存入剪贴板(需安装 xclip):

$ maim -s | xclip -selection clipboard -t image/png -i

scrot[编辑 | 编辑源代码]

scrot 支持通过命令行截图,并提供自定义延时等功能。默认将文件保存在当前工作目录。

$ scrot -t 20 -d 5

上述的命令会在 5 秒延时后保存一个带日期的 .png 文件及一个适用于网页发布的缩略图(大小为原图的 20%)。

也可使用标准日期时间格式保存,例如使用命令

$ scrot ~/截屏/%Y-%m-%d-%T-截屏.png

将截图以包含年-月-日-时间的文件名保存至主目录的“截屏”文件夹。

详见 scrot(1)


注意:在某些窗口管理器(如 dwmAURxmonad)中,通过快捷键直接运行 scrot -s 时选区功能可能异常,可通过添加短暂延时解决:sleep 0.2; scrot -s

不同桌面环境的截图工具[编辑 | 编辑源代码]

Budgie[编辑 | 编辑源代码]

Budgie 自带名为 BudgieScreenshot 的截图工具。

可以通过 PrintScreen 键捕获整个屏幕、活动窗口或选区。具体操作的快捷键请参阅Shortcuts

Cinnamon[编辑 | 编辑源代码]

默认安装的 Cinnamon 不提供截图工具。安装 gnome-screenshot 后可通过 菜单 > 附件 > 截图 或按 PrintScreen 键进行截图。

GNOME[编辑 | 编辑源代码]

GNOME 用户可按 PrintScreen 键或点击系统菜单中的相机图标截图。也可选择安装 gnome-screenshot 并通过 应用 > 附件 > 截图 使用。

GNOME 内置的屏幕录制功能需在安装 gst-plugin-pipewiregst-plugins-good 后使用,其快捷键为 Ctrl+Shift+Alt+r。录制时屏幕右下角会显示红点;录制完成后,文件保存在 Videos 目录下的 Screencast from %d%u-%c.webm

KDE[编辑 | 编辑源代码]

若使用 KDE,推荐使用 Spectacle。

Spectacle 由 spectacle 提供。

Xfce[编辑 | 编辑源代码]

若使用 Xfce,可安装 xfce4-screenshooter 并添加键盘绑定:

Xfce 菜单 > 设置 > 键盘 > 应用程序快捷键

若需跳过截图提示框,可在终端输入 xfce4-screenshooter -h 查看选项。

其他桌面环境/窗口管理器[编辑 | 编辑源代码]

对于 LXDE 等桌面环境或 OpenboxCompiz 等窗口管理器,可通过添加快捷键调用截图命令。例如:

$ import -window root ~/Pictures/$(date '+%Y%m%d-%H%M%S').png

注意 import 工具来自 imagemagick。在 Compiz 中将上述命令绑定至 PrintScreen 键可实现按日期时间保存截图至图片文件夹。

需注意 Openbox 的 rc.xml 文件不支持逗号,因此若要在 Openbox 中绑定 PrintScreen 键,需在 rc.xml 文件的键盘章节添加如下内容:

rc.xml
<!-- Screenshot -->
    <keybind key="Print">
      <action name="Execute">
        <command>sh -c "import -window root ~/Pictures/$(date '+%Y%m%d-%H%M%S').png"</command>
      </action>
    </keybind>

若上述的 PrintScreen 键无法使用,请参阅键盘输入使用不同的键符(keysym)或键码(keycode)。

其它含有截屏工具的软件包[编辑 | 编辑源代码]

ImageMagick/GraphicsMagick[编辑 | 编辑源代码]

详见 ImageMagick#截屏

GIMP[编辑 | 编辑源代码]

可通过 GIMP 截图(文件 > 创建 > 截图...)。

imlib2[编辑 | 编辑源代码]

imlib2 提供 imlib2_grab 工具进行截图。全屏截图命令:

$ imlib2_grab screenshot.png

FFmpeg[编辑 | 编辑源代码]

详见 FFmpeg#屏幕捕获

录屏软件[编辑 | 编辑源代码]

另见 FFmpeg#屏幕捕获Wikipedia:Comparison of screencasting software

屏幕录制工具可捕获桌面或单个窗口的视频流。

  • 深度录屏 — 深度桌面环境的录屏工具。
https://www.deepin.org/zh/original/deepin-screen-recorder/ || deepin-screen-recorder
  • FFcast — 基于 FFmpeg 的 Bash 脚本录屏工具。
https://github.com/lolilolicon/FFcast || ffcastAUR
  • GPU Screen Recorder GTK — GPU 加速录屏工具,性能媲美 NVIDIA ShadowPlay,支持直播和回放缓冲。
https://git.dec05eba.com/gpu-screen-recorder-gtk/about/ || gpu-screen-recorder-gtkAUR
  • Green Recorder — 简洁实用的 Linux 桌面录屏工具。
https://github.com/dvershinin/green-recorder || green-recorderAUR
  • Kazam — 支持多屏配置的录屏程序。
https://launchpad.net/kazam || kazamAUR
  • Kooha — 极简 GTK 界面录屏工具。
https://github.com/SeaDve/Kooha || kooha
  • menyoki — 命令行屏幕捕获及图像处理工具(目前仅支持 X11,Wayland 开发中)。
https://github.com/orhun/menyoki || menyoki
  • OBS — 专业视频录制与直播软件。
https://obsproject.com/ || obs-studio
  • Peek — 生成 GIF/APNG/WebM/MP4 动画的简易录屏工具(2023 年 1 月起停止开发)。
https://github.com/phw/peek || peek
  • RecApp — 基于 GStreamer 模块的 GTK 录屏工具(不依赖 FFmpeg,已停止开发)
https://github.com/amikha1lov/RecApp || recappAUR
https://recordmydesktop.sourceforge.net/ || 命令行界面:recordmydesktop;GTK2 界面:gtk-recordmydesktopAUR
  • screencast — 基于 FFmpeg 的 X11 命令行录屏工具,支持离线录制与直播推流。
https://github.com/dbermond/screencast/ || screencastAUR
  • Screencast — 专为 elementary OS 设计的简易录屏工具。
https://github.com/artemanufrij/screencast || pantheon-screencastAUR
https://www.maartenbaert.be/simplescreenrecorder/ || simplescreenrecorderAUR
  • SpectacleKDE 屏幕捕获工具,支持 Wayland 下所有屏幕、单屏幕、单窗口和矩形选区视频录制(无音频),属于 kde-graphics包组(使用时需要 kwin,无法与其他窗口管理器共用)。
https://apps.kde.org/spectacle/ || spectacle
  • VokoScreen — 基于 GStreamer 的强力录屏工具,支持多编解码器、音视频采集、内外设备输入和区域缩放高亮(Wayland 支持有限)。
https://linuxecke.volkoh.de/vokoscreen/vokoscreen.html || vokoscreen
  • Wayfarer — 适用于 Wayland(基于 Pipewire)和 Xorg 的 GTK4 录屏工具。
https://github.com/stronnag/wayfarer || wayfarerAUR

Wayland[编辑 | 编辑源代码]

要在基于 Wlroots 的混成器上捕获屏幕,截屏可以使用 grim 或来自 sway-contrib 中的 grimshot;录屏可以使用 wf-recorder(或 wf-recorder-gitAUR)。obs-studio 的插件 wlrobs-hgAUR 可用于支持在基于 Wlroots 的合成器上进行屏幕捕捉。可选使用 slurp 选择截屏区域。如果 GPU 支持 vaapi 编码,wl-screenrec-gitAUR 可以作为 wf-recorder 的更高效替代方案。

对整个屏幕截屏:

$ grim 截屏.png

在 Sway 中对当前窗口截屏:

$ swaymsg -t get_tree | jq -r '.. | select(.focused?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | grim -g - 截屏.png

Hyprland 中对当前窗口截屏:

$ hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - 截屏.png

对选区截屏:

$ slurp | grim -g - 截屏.png

对选区截屏并使用 wl-clipboard 将结果存入剪贴板:

$ slurp | grim -g - - | wl-copy

对整个屏幕录屏:

$ wf-recorder -f recording.mp4

对选区录屏:

$ wf-recorder -g "$(slurp)"
提示:
  • 使用 bemenu 的交互式脚本 slurpshot 可用于截图。
  • 可以在截屏后使用截屏编辑工具,如 swappygrim -g "$(slurp)" -
提示:

此外,部分前文提到的程序也支持在Wayland环境下工作,例如 ksnipgreen-recorderAUR

屏幕录制[编辑 | 编辑源代码]

通过 GNOME 屏幕录制功能[编辑 | 编辑源代码]

green-recorderAURobs-gnome-screencastAURobs-studio 支持使用 GNOME 屏幕录制功能在 Wayland 环境下进行录屏。

通过 Hyprland[编辑 | 编辑源代码]

在搭配 xdg-desktop-portal-hyprland 使用时,Hyprland 窗口管理器允许通过 OBS 进行屏幕投射和录制(包括选择单个窗口和工作区),详见 [1]

使用虚拟摄像头推流[编辑 | 编辑源代码]

参见 v4l2loopback#使用 wf-recorder 投射 Wayland 屏幕英语v4l2loopback#Casting Wayland using wf-recorder

提示:
  • 此方法已在 zoomAUR(桌面客户端,运行于 xorg-xwayland)和 chromium 中运行的 BigBlueButton(在 firefox 中分辨率极低)测试通过;skypeforlinux-binAUR 能检测到虚拟视频设备 VirtualVideoDevice,但输出黑屏。
  • 示例使用 wf-recorder,也可以用其他软件,只需将输出导向虚拟设备即可。

安装 wf-recorder(或 wf-recorder-gitAUR)和 v4l2loopback-dkms。指定以下参数加载 v4l2loopback 内核模块:

# modprobe v4l2loopback exclusive_caps=1 card_label=VirtualVideoDevice

验证是否已创建名为 VirtualVideoDevice 的新虚拟视频设备:

$ v4l2-ctl --list-devices
...
VirtualVideoDevice (platform:v4l2loopback-000):
	/dev/video2
...

使用 wf-recorder 开始录制屏幕,并将输出导向 v4l2loopback 创建的虚拟视频设备 VirtualVideoDevice

$ wf-recorder --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p

为了确保视频输出与 Zoom 兼容,必须使用 yuv420p 色彩空间 [2]

提示:若遇到 Unknown V4L2 pixel format equivalent for rgb0 错误,可在运行 wf-recorder 时添加 --force-yuv-t 参数,强制将数据转换为 yuv 格式后再发送至 GPU [3]

然后可以在视频通话/会议应用中选择上述虚拟视频设备作为“摄像头”(设备名为 VirtualVideoDevice)。您可使用 ffplayffmpeg 的组件)、mpvgst-launchgstreamer 的组件)验证虚拟设备是否正常输出屏幕内容:

$ ffplay /dev/video2
$ mpv av://v4l2:/dev/video2
$ gst-launch-1.0 -v v4l2src device=/dev/video2 ! glimagesink

若 Firefox 无法读取视频流并显示类似“AbortError: Starting video failed”的信息,可尝试预加载 v4l2compat.so

$ LD_PRELOAD=/usr/lib/v4l1compat.so firefox
仅共享屏幕的一部分[编辑 | 编辑源代码]
警告:此方法并不是真正的单个应用程序共享实现,因为所共享的区域在调整窗口大小后不会发生变化。

如上所述,wf-recorder 可以通过 slurp 选择一个区域,从而仅录制屏幕的一部分。要利用此功能向虚拟摄像头发送特定区域/应用程序窗口,可以使用以下修改后的命令开始录制屏幕:

$ wf-recorder -g "$(slurp)" --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p

在选择屏幕区域后,即可通过虚拟摄像头 /dev/video2 访问视频流。

使用 WebRTC 协议[编辑 | 编辑源代码]

注意:此方法仅允许共享整个屏幕,而不能仅共享屏幕的一部分 [4]

参见 PipeWire#WebRTC 屏幕共享

Chromium 和 Firefox 现在应该可以访问屏幕共享。可以通过 Mozilla 的 getUserMedia/getDisplayMedia 测试页面进行验证。

通过 X11 应用程序投射 Wayland 屏幕[编辑 | 编辑源代码]

原生 Wayland 窗口(或整个屏幕/工作区)可以共享到 X11 应用程序。为此,你需要使用 xwaylandvideobridge。详情请参见修复 Wayland:Xwayland 屏幕投射

终端[编辑 | 编辑源代码]

使用 ANSI 代码捕获[编辑 | 编辑源代码]

可以使用 util-linux 软件包中的 script(1) 命令。运行 script 后,所有终端输出(包括 ANSI 代码)将自动保存至 typescript 文件。

操作完成后,运行 exit 结束录制,此时 typescript 文件即生成完毕。可使用 ansi2htmlAUR 包(注意与 python-ansi2html 的 ansi2html 区分)将文件转换为 HTML 格式。

typescript 转换为 typescript.html

$ ansi2html --bg=dark < typescript > typescript.html

实际上,部分命令的输出可直接通过管道传递给 ansi2html:

$ ls --color|ansi2html --bg=dark >output.html

但此方法并非通用,若遇到不兼容情况,仍需使用 script 进行录制。

通过帧缓冲区[编辑 | 编辑源代码]

安装 framebuffer 后,使用 fbgrabfbdumpAUR 捕获屏幕图像。

虚拟控制台[编辑 | 编辑源代码]

截取文本[编辑 | 编辑源代码]

若仅需捕获控制台文本而非图像,可使用 util-linux 中的 setterm 命令。使用以下命令将虚拟控制台 1 的文本内容转储至当前目录的 screen.dump 文件:

# setterm -dump 1 -file screen.dump

这需要 root 权限,因为需要读取 /dev/vcs1 设备的内容。

录制文本[编辑 | 编辑源代码]

asciinema 允许录制整个终端会话活动,并将其保存为自身的开放格式文件。该文件可以使用此工具或其 HTML5 版本进行播放,并可上传到 asciinema.org 官方网站或托管在自己的 HTML 版本中。

使用方法:asciinema(1)asciinema --help

  • 使用 asciinema rec 输出.cast 录制会话,按 Ctrl+\ 可暂停/恢复录制,按 Ctrl-d 或退出会话将停止录制,可以不指定输出文件名。

录制时的常用参数:

  • -c 命令 仅录制特定命令的执行过程和输出
  • -i 1.2 录制 1.2 秒
  • -t "多么好的标题啊" 为终端录制文件添加标题

除录制外的其他功能:

  • asciinema play 文件.cast 播放 asciinema 录制文件
  • asciinema upload 文件.cast 将文件上传至 asciinema.org 以便共享
  • asciinema auth 管理 asciinema.org 账户的录制内容

问题解决[编辑 | 编辑源代码]

截图使用旧的屏幕状态[编辑 | 编辑源代码]

参见 KDE#Spectacle 使用旧的屏幕状态截图

NVIDIA 录制背景被裁剪[编辑 | 编辑源代码]

如果正在使用 nvidia 专有驱动程序,并且屏幕录制时背景出现裁剪问题,请启用 ForceCompositionPipeline 设置。详情请参见 NVIDIA/故障排除#避免屏幕撕裂