「スクリーンキャプチャ」の版間の差分
(→Wayland: 誤訳) |
(→Wayland: 訳を修正) |
||
301行目: | 301行目: | ||
== Wayland == |
== Wayland == |
||
− | + | Wlroots ベースのコンポジタでは、{{Pkg|grim}} や {{AUR|grimshot}} ({{Pkg|sway}} パッケージも {{ic|/usr/share/sway/scripts/}} 内に ''grimshot'' を提供しています) でスクリーンショットを撮ることができます。動画は、{{Pkg|wf-recorder}} (または {{AUR|wf-recorder-git}}) で撮ることができます。さらに、{{AUR|wlrobs-hg}} は、wlroot ベースのコンポジタでのスクリーンキャプチャーを可能にする {{Pkg|obs-studio}}プラグインです。また任意で、{{Pkg|slurp}} をキャプチャする画面領域を選択するために使用できます。GPU が [[vaapi]] エンコードをサポートしている場合、{{Pkg|wf-recorder}} の代わりに {{AUR|wl-screenrec-git}} を使えば、より高速に動作するかもしれません。 |
|
− | 画面全体のスクリーンショットを撮 |
+ | 画面全体のスクリーンショットを撮る: |
$ grim screenshot.png |
$ grim screenshot.png |
||
− | 現在のウィンドウのスクリーンショットを撮る |
+ | Sway で現在のウィンドウのスクリーンショットを撮る: |
− | $ |
+ | $ swaymsg -t get_tree | jq -r '.. | select(.focused?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | grim -g - screenshot.png |
− | + | [[Hyprland]] で現在のウィンドウのスクリーンショットを撮る: |
|
− | $ |
+ | $ hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - screenshot.png |
− | 画面の一部のスクリーンショットを |
+ | 画面の一部のスクリーンショットを撮る: |
− | $ grim -g |
+ | $ slurp | grim -g - screenshot.png |
+ | 画面の一部のスクリーンショットを攝り、{{Pkg|wl-clipboard}} を使ってクリップボートに貼り付ける: |
||
− | 画面全体のビデオをキャプチャする。 |
||
+ | |||
+ | $ slurp | grim -g - - | wl-copy |
||
+ | |||
+ | 画面全体の動画を撮る: |
||
$ wf-recorder -f recording.mp4 |
$ wf-recorder -f recording.mp4 |
||
− | 画面の一部の |
+ | 画面の一部の動画を撮る: |
$ wf-recorder -g "$(slurp)" |
$ wf-recorder -g "$(slurp)" |
||
{{Tip| |
{{Tip| |
||
− | * [https://github.com/de-arl/slurpshot slurpshot] は、{{Pkg|bemenu}} を使用 |
+ | * [https://github.com/de-arl/slurpshot slurpshot] は、{{Pkg|bemenu}} を使用するインタラクティブなスクリーンショットスクリプトです。 |
− | * {{Pkg|swappy}} |
+ | * {{Pkg|swappy}} などの、スクリーンショット後に画像の編集・描画ツールを使うには: {{ic|grim -g "$(slurp)" - {{!}} swappy -f -}} |
}} |
}} |
||
− | また、上記の一部のプログラムは Wayland (例:{{Pkg|ksnip}}、{{AUR|green-recorder}}) |
+ | また、上記の一部のプログラムは Wayland でのみ動作します (例: {{Pkg|ksnip}}、{{AUR|green-recorder}})。 |
− | ===スクリーンキャスト=== |
+ | === スクリーンキャスト === |
− | ==== GNOME |
+ | ==== GNOME screencast を使う ==== |
− | {{AUR|green-recorder}}、{{AUR|obs-gnome-screencast}}、 |
+ | {{AUR|green-recorder}}、{{AUR|obs-gnome-screencast}}、及び {{Pkg|obs-studio}} は、GNOME screencast 機能を使用した Wayland での画面録画をサポートしています。 |
+ | ==== Hyprland を使う ==== |
||
− | ==== 仮想 Web カメラのビデオフィード経由 ==== |
||
+ | |||
+ | [[Hyprland]] ウィンドウマネージャでは、{{Pkg|xdg-desktop-portal-hyprland}} を使用している場合、[[OBS]] でスクリーンキャストと録画を行うことができます (個々のウィンドウやワークスペースの選択も可)。[https://wiki.hyprland.org/Useful-Utilities/Screen-Sharing/] |
||
+ | |||
+ | ==== 仮想 Web カメラのビデオフィードを使う ==== |
||
+ | |||
+ | [[v4l2loopback#wf-recorder を使って Wayland をキャストする]] を参照してください。 |
||
{{Tip| |
{{Tip| |
||
− | * この |
+ | * この方法は、{{AUR|zoom}} デスクトップクライアントを {{Pkg|xorg-xwayland}} で動作させたケースと、[https://bigbluebutton.org/ BigBlueButton] を {{Pkg|chromium}} 内で動作させたケース ({{Pkg|firefox}} では解像度が低い) でテストされました。{{AUR|skypeforlinux-stable-bin}} は、仮想ビデオデバイス {{ic|VirtualVideoDevice}} を検出しますが、空の画面しか出力しません。 |
− | * この例では {{ic|wf-recorder}} を使用していますが、出力を仮想デバイスに |
+ | * この例では {{ic|wf-recorder}} を使用していますが、その他のソフトウェアも使用できます。単に出力を仮想デバイスに流すだけです。 |
+ | }} |
||
− | {{Pkg|wf-recorder}} (または {{AUR|wf-recorder-git}}) および {{Pkg|v4l2loopback-dkms}} をインストールし |
+ | {{Pkg|wf-recorder}} (または {{AUR|wf-recorder-git}}) および {{Pkg|v4l2loopback-dkms}} をインストールしてください。そして、以下のパラメータを指定して {{ic|v4l2loopback}} カーネルモジュールをロードしてください: |
# modprobe v4l2loopback exclusive_caps=1 card_label=VirtualVideoDevice |
# modprobe v4l2loopback exclusive_caps=1 card_label=VirtualVideoDevice |
||
− | 新しい仮想ビデオデバイス {{ic|VirtualVideoDevice}} が作成されたことを確認し |
+ | 新しい仮想ビデオデバイス {{ic|VirtualVideoDevice}} が作成されたことを確認してください: |
{{hc|$ v4l2-ctl --list-devices| |
{{hc|$ v4l2-ctl --list-devices| |
||
359行目: | 370行目: | ||
}} |
}} |
||
− | {{ic|wf-recorder}} |
+ | {{ic|wf-recorder}} で画面の録画を開始し、{{ic|v4l2loopback}} によって作成された新しい仮想ビデオデバイス {{ic|VirtualVideoDevice}} に出力を送ってください: |
$ wf-recorder --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p |
$ wf-recorder --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p |
||
− | + | ここで {{ic|yuv420p}} 色空間を使用しているのは、映像出力に Zoom との互換性を持たせるためです。[https://github.com/ammen99/wf-recorder/pull/43] |
|
+ | {{Tip|{{ic|Unknown V4L2 pixel format equivalent for rgb0}} というエラーが発生する場合は、{{ic|--force-yuv}} または {{ic|-t}} を付けて {{ic|wf-recorder}} を実行して、データを GPU に送る前に強制的に yuv フォーマットに変換してください。[https://github.com/ammen99/wf-recorder/issues/164]}} |
||
− | 上記の仮想ビデオデバイスをビデオ通話/ビデオ会議アプリケーションの "ウェブカメラ" として選択できるようになりました (デバイスの名前は {{ic|VirtualVideoDevice}}) {{ic|ffplay}} ({{Pkg|ffmpeg}}の一部) 、{{Pkg|mpv}}、または {{ic|gst-launch}} ({{Pkg|gstreamer}} の一部) を使用して、仮想ビデオデバイスが実際にスクリーン共有を出力していることを確認できます。 |
||
+ | |||
+ | これで、先の仮想ビデオデバイスをビデオ通話/ビデオ会議アプリケーションで "ウェブカメラ" として選択できるようになりました (デバイスは {{ic|VirtualVideoDevice}} という名前です)。仮想ビデオデバイスがきちんとスクリーン共有を出力していることは、{{ic|ffplay}} ({{Pkg|ffmpeg}} の一部) や {{Pkg|mpv}}、{{ic|gst-launch}} ({{Pkg|gstreamer}} の一部) を使用して確認できます: |
||
$ ffplay /dev/video2 |
$ ffplay /dev/video2 |
||
373行目: | 386行目: | ||
$ gst-launch-1.0 -v v4l2src device=/dev/video2 ! glimagesink |
$ gst-launch-1.0 -v v4l2src device=/dev/video2 ! glimagesink |
||
− | Firefox がビデオストリームを読み取ることができず、"AbortError: Starting video failed" のようなメッセージを出力する場合 |
+ | Firefox がビデオストリームを読み取ることができず、"AbortError: Starting video failed" のようなメッセージを出力する場合、{{ic|v4l2compat.so}} をプリロードしてみてください: |
+ | |||
$ LD_PRELOAD=/usr/lib/v4l1compat.so firefox |
$ LD_PRELOAD=/usr/lib/v4l1compat.so firefox |
||
===== 個々のアプリケーションの共有 ===== |
===== 個々のアプリケーションの共有 ===== |
||
− | {{Warning|ウィンドウ |
+ | {{Warning|この方法では、ウィンドウがリサイズされても共有される領域は変わらないため、個々のウィンドウの共有の適切な実装とは言えません。}} |
− | + | 先に説明した通り、{{ic|wf-recorder}} は、{{Pkg|slurp}} で事前に選択した画面領域のみを録画することができます。この機能を使って、特定の領域/アプリケーションウィンドウを共有して仮想ビデオデバイスに出力を流すには、以下のコマンドで画面の録画を開始してください: |
|
$ wf-recorder '''-g "$(slurp)"''' --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p |
$ wf-recorder '''-g "$(slurp)"''' --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p |
||
− | 画面の領域を選択 |
+ | 画面の領域を選択したら、先に説明したように仮想ビデオデバイス {{ic|/dev/video2}} 経由でビデオフィードにアクセスできるようになります。 |
− | ==== WebRTC プロトコル |
+ | ==== WebRTC プロトコルを使う ==== |
− | {{ |
+ | {{Note|この方法では出力全体しか共有できず、個々のアプリケーションを共有することはできません。[https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ#will-this-let-me-share-individual-windows]}} |
− | + | [[PipeWire#WebRTC 画面共有]] を参照してください。 |
|
− | + | Chromium と Firefox は画面共有にアクセスできるはずです。[https://mozilla.github.io/webrtc-landing/gum_test.html Mozilla の getUserMedia / getDisplayMedia テストページ]でテストできます。 |
|
== ターミナル == |
== ターミナル == |
2023年10月15日 (日) 16:33時点における版
関連記事
この記事では、スクリーンショットとスクリーンキャストのソフトウェアを一覧にして解説しています。
スクリーンショットソフトウェア
専用のソフトウェア
- CoreShot — X11 用のシンプルで軽量なスクリーンキャプチャユーティリティ。C-Suite
- Deepin Screenshot — とても使いやすいスクリーンショットツール。機能: スクリーンショットツールを発動するホットキー、選択した領域のスクリーンショットの取得、スクリーンショットに文章や線画を簡単に追加。Python/Qt5 ベース。
- Escrotum — pygtk を使用して画面をキャプチャ。scrot の影響を受けています。
- Flameshot — インタラクティブにスクリーンショットを取得できる Qt5 ベースのソフトウェア。取得したいエリアを選択して様々なツールで落書きしたりカスタマイズする機能があります。
- gnome-screenshot — dconf, gtk3, libcanberra にしか依存しないため GNOME 以外でも使えます。
- gscreenshot — シンプルな GTK スクリーンショットユーティリティ。遅延時間を設定したり範囲選択・クリップボードにコピーする機能があります。
- imgur-screenshot — スクリーンショットを取得して imgur にアップロードするツール。
- KShare — ShareX の影響を受けているクロスプラットフォームのユーティリティ。Qt で書かれています。
- Lightscreen — 退屈なスクリーンショットの保存とカタログ化を自動化するシンプルなツール。表には現れないバックグラウンドプロセスとして動作し、(複数の) ホットキーで呼び出してスクリーンショットファイルをユーザーの設定にあわせてディスクに保存する。
- maim — スクリーンショットを取得するシンプルなコマンドラインユーティリティ。scrot を置き換えるものとして様々な点で scrot よりも優れています。
- screencloud — 画面全体のスクリーンショットや領域を選択して撮影し、imgur+auth にスクリーンショットをアップロードできるツール。プラグインとシステムトレイが付属。
- screengrab — スクリーンショットを手軽に取得するためのクロスプラットフォームのアプリケーション (Qt)。
- Scrot — X 向けのシンプルなコマンドラインスクリーンショットユーティリティ。
- Shutter — リッチなスクリーンショット・編集プログラム。
- Spectacle — スクリーンショットを撮るための KDE のアプリケーション。デスクトップ全体、単一のウィンドウ、ウィンドウの一部、四角形またはフリーハンドで指定した領域の画面をキャプチャすることができます。kdegraphics[リンク切れ: パッケージが存在しません] に含まれています。
- Xfce4 Screenshooter — 画面全体、アクティブウィンドウ、または選択領域のキャプチャを行えます。スクリーンショットを撮るまでの待機時間とスクリーンショットを撮った後の動作を設定できます: PNG ファイルに保存、クリップボードにコピー、別のアプリケーションで開く、無料の画像ホスティングサービスである Imgur や ZimageZ にアップロード。xfce4-goodies に含まれています。
- xwd — X Window System イメージダンプユーティリティ。
xwd
xwd(1) is provided by xorg-xwd.
ルートウィンドウのスクリーンショットを撮るには:
$ xwd -root -out screenshot.xwd
scrot
scrot を使用すると、CLI からスクリーンショットを取得できるようになり、ユーザー定義可能な遅延時間などの機能が提供されます。特に指示がない限り、ファイルは現在の作業ディレクトリに保存されます。
$ scrot -t 20 -d 5
上記のコマンドは、Web 投稿用にサムネイル (元の 20%) とともに日付付きの .png ファイルを保存します。この場合、キャプチャする前に 5 秒の遅延を発生させます。
ファイルに保存するときに、標準の日付と時刻の書式設定を使用することもできます。例えば、
$ scrot ~/screenshots/%Y-%m-%d-%T-screenshot.png
スクリーンショットを現在の年、月、日、時、分、秒を含むファイル名でホーム ディレクトリ内の "screenshots" というフォルダーに保存します。
詳細については、scrot(1) を参照してください。
escrotum
escrotum-gitAUR scrot からインスピレーションを得た、PyGTK を使用した画面キャプチャ
ウィンドウを更新して選択モードを使用すると scrot に不具合が生じるため作成されました。
コマンドラインインターフェイスは scrot とほぼ同じなので、代替として使用できます。
maim
maim は、改善された scrot であることを目指しています。
全画面をファイルに保存します。
$ maim filename
選択を求めてからファイルに保存します。
$ maim --select filename
xdotool がインストールされていると仮定して、アクティブなウィンドウをファイルに保存します。
$ maim --window $(xdotool getactivewindow) filename
xclip がインストールされていると仮定して、選択を求め、カーソルを使用せずに保存し、クリップボードに保存します。
$ maim -s | xclip -selection clipboard -t image/png -i
デスクトップ環境による方法
Spectacle
KDE を使っている場合、Spectacle
を使用すると良いでしょう。Prnt Scr
で使うことができます。
Spectacle は spectacle に入っています。
Xfce Screenshooter
Xfce を使っている場合 xfce4-screenshooter をインストールしてキーボードバインディングを追加することができます:
Xfce Menu > Settings > Keyboard > Application Shortcuts
Screenshot プロンプトをスキップしたい場合は、オプションのターミナルに $ xfce4-screenshooter -h
と入力してください。
GNOME
GNOME ユーザーは Prnt Scr
を押すか Apps > Accessories > Take Screenshot でスクリーンショットが取れます。gnome-screenshot をインストールする必要があります。
Cinnamon
Cinnamon はデフォルトでスクリーンショットユーティリティがインストールされません。gnome-screenshot をインストールするとスクリーンショットが有効になり、Menu > Accessories > Screenshot または Prnt Scr
を押すことで撮影できるようになります。
他のデスクトップ環境やウィンドウマネージャ
LXDE などのデスクトップ環境や Openbox や Compiz などのウィンドウマネージャの場合、上述のコマンドをホットキーに追加してスクリーンショットを撮影することができます。例えば:
$ import -window root ~/Pictures/$(date '+%Y%m%d-%H%M%S').png
上のコマンドを Prnt Scr
キーに追加すれば Compiz でスクリーンショットを取得して Pictures フォルダに日付を付けて保存できます。Openbox の rc.xml
ファイルではコンマを使えないので、Openbox でこのコマンドを Prnt Scr
キーに指定するには、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>
上記の Print
が動作しない場合、特別なキーボードキーをみて、別のキーシムやキーコードを使って下さい。
LXDE などのデスクトップ環境や Openbox や Compiz などのウィンドウマネージャの場合、上述のコマンドをホットキーに追加してスクリーンショットを撮影することができます。例えば:
$ import -window root ~/Pictures/$(date '+%Y%m%d-%H%M%S').png
上のコマンドを Prnt Scr
キーに追加すれば Compiz でスクリーンショットを取得して Pictures フォルダに日付を付けて保存できます。Openbox の rc.xml
ファイルではコンマを使えないので、Openbox でこのコマンドを Prnt Scr
キーに指定するには、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>
上記の Print
が動作しない場合、特別なキーボードキーをみて、別のキーシムやキーコードを使って下さい。
スクリーンショットユーティリティが含まれているパッケージ
ImageMagick/GraphicsMagick
See ImageMagick#Screenshot taking.
GIMP
GIMP を使ってスクリーンショットを取得することもできます (File > Create > Screenshot...)。
imlib2
imlib2 にはスクリーンショットを取得するためのバイナリ imlib2_grab
が含まれています。フルスクリーンのスクリーンショットを取得するには、次を入力:
$ imlib2_grab screenshot.png
FFmpeg
一般的な方法
ImageMagick/GraphicsMagick
import
コマンドを使うことで現在のシステムのスクリーンショットを簡単に取得できます:
$ import -window root screenshot.jpg
import
は imagemagick パッケージに入っています。
-window
オプションを付けずに import
を実行するとウィンドウや任意の領域をインタラクティブに選択することが可能です。
複数の X 画面のスクリーンショット
twinview または dualhead で使っている場合、2回スクリーンショットを取得して imagemagick
を使って貼り付けます:
import -window root -display :0.0 -screen /tmp/0.png import -window root -display :0.1 -screen /tmp/1.png convert +append /tmp/0.png /tmp/1.png screenshot.png rm /tmp/{0,1}.png
Xinerama ヘッドのスクリーンショット
Xinerama による multi-head セットアップでは仮想スクリーンが一つしかありません。物理的なスクリーンの高さに違いがあると、スクリーンショットにデッドスペースが出来てしまいます。こういう場合、それぞれの物理的なスクリーンごとにスクリーンショットを取得すると良いでしょう。Xinerama の情報が X サーバーから取り出せていれば、以下のスクリプトが動作します:
#!/bin/sh xdpyinfo -ext XINERAMA | sed '/^ head #/!d;s///' | while IFS=' :x@,' read i w h x y; do import -window root -crop ${w}x$h+$x+$y head_$i.png done
アクティブなウィンドウ/フォーカスしたウィンドウのスクリーンショット
以下のスクリプトは現在フォーカスされているウィンドウのスクリーンショットを取得します。EWMH/NetWM 準拠の X ウィンドウマネージャで動作します。スクリーンショットを上書きしないように、ファイル名に取得時刻を使っています。
#!/bin/sh activeWinLine=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)") activeWinId=${activeWinLine:40} import -window "$activeWinId" /tmp/$(date +%F_%H%M%S_%N).png
もしくは、次のコマンドは EWMH をサポートしているかどうかに関わらず動作します:
$ import -window "$(xdotool getwindowfocus -f)" /tmp/$(date +%F_%H%M%S_%N).png
xwd
ルートウィンドウのスクリーンショットを取得:
$ xwd -root -out screenshot.xwd
scrot
scrot を使えば CLI からスクリーンショットを撮ることができ、シャッターを押すまでの待機時間をユーザーが定義できるなどの機能があります。特に指定がなければ、カレントディレクトリにファイルが保存されます。
$ scrot -t 20 -d 5
上記のコマンドは日付が入った .png
ファイルが作成され、ウェブ投稿用にサムネイルも作られます (元の画像の 20%)。上の例ではキャプチャするまで5秒間待ちます。
ファイルに保存するときに標準的な日付のフォーマットを使うこともできます、例えば:
$ scrot ~/screenshots/%Y-%m-%d-%T-screenshot.png
このコマンドではホームディレクトリの "screenshots" という名前のフォルダに、現在の年・月・日・時間・分・秒がファイル名のスクリーンショットが保存されます。
詳しくは scrot(1) を見て下さい。[1] のようにファイルのアップロードを自動化することもできます。
escrotum
escrotum-gitAUR は pygtk を使って画面をキャプチャします。scrot にインスパイアされています。
選択モードを使った時に scrot ではウィンドウのリフレッシュでバグが発生するので開発されました。
コマンドラインインターフェースは scrot とほぼ同じなので、そのまま同じように使うことができます。
maim
maim は scrot の向上版を目指しています。
scrot の欠点を補っており slop で領域のスクリーンショットを取得します。
FFmpeg
FFmpeg は X11 のスクリーンをキャプチャできる x11grab デバイスを提供しています。
ディスプレイの横幅x高さを指定してスクリーンショットを取得:
$ ffmpeg -f x11grab -video_size widthxheight -i $DISPLAY -vframes 1 screen.png
上記のコマンドでは PNG コーデック (ロスレスでスクリーンショットに向いている) を使っていますが、他の画像コーデックも使うことができます。
同じデバイスを使ってスクリーンキャストも可能です (ディスプレイのリフレッシュレートを rate HZ で指定):
$ ffmpeg -f x11grab -video_size widthxheight -framerate rate -i $DISPLAY -c:v libx264 -preset ultrafast cast.mkv
上記のコマンドでは、エンコード速度が一番高速な x264 コーデックを使っていますが、他のコーデックも使えます。ただし (ディスクのパフォーマンスが足りなかったりエンコードが遅かったりして) フレームの書き込みが遅すぎると、フレームが抜け落ちて出力された動画は飛び飛びになります。
Weston
Wayland のコンポジットマネージャである Weston では、Super+s
を押すことでスクリーンショットを撮影することができ、Weston の現在の作業ディレクトリに保存されます。スクリーンキャストもサポートされています。録画の開始と停止は Super+r
を押すことで行われ、Weston の現在の作業ディレクトリに capture.wcap
という名前のファイルが作成されます。wcap-decode --yuv4mpeg2 capture.wcap
を実行することでキャプチャを YUV フォーマットにデコードできます。このコマンドの出力をファイルに書き込んだり、FFmpeg にパイプして更に処理を加えることもできます。
スクリーンキャスト ソフトウェア
FFmpeg#スクリーンキャプチャ と Wikipedia:Comparison of screencasting software も参照してください。
スクリーンキャストユーティリティは、デスクトップや個々のウィンドウのビデオを作成することができます。
- Byzanz — GIF アニメーションを作成するシンプルなスクリーンキャストツール。
- Deepin Screen Recorder — Deepin デスクトップ用のスクリーンレコーダーアプリケーション。
- FFcast — Bash で書かれた FFmpeg ベースのスクリーンキャストツール。
- Gpu Screen Recorder — Nvidia ShadowPlay に匹敵する、パフォーマンスを大幅に向上させるためだけに GPU でビデオをキャプチャするスクリーンレコーダー。ライブストリーミングとリプレイバッファもサポートします。現在は NVIDIA に限定されています。
- Green Recorder — Linux システム用のシンプルかつ機能的なデスクトップレコーダー。
- Kazam — デザインを念頭に置いたスクリーンキャストプログラム。マルチスクリーン設定を処理します。
- Kooha — 最小限の GTK インターフェースを備えたシンプルなスクリーンレコーダー。
- menyoki — コマンドラインでスクリーンショット {ショット、キャスト} を実行し、ImageOpsを実行します。
- Open Broadcaster Software — ビデオ録画およびライブストリーミングアプリケーション。
- https://obsproject.com/ || obs-studio
- obs-gnome-screencastAUR – GNOME スクリーンキャスト機能用のプラグイン、Wayland をサポート
- Peek — GIF、APNG、WebM、または MP4 アニメーションを生成するシンプルなスクリーンキャストツール。
- RecApp — GTK で書かれたユーザーフレンドリーなスクリーンキャスター。無料の GStreamer モジュールを使用し、FFmpeg に依存しません。
- RecordItNow — KDE 4 用のプラグインベースのデスクトップレコーダー。
- RecordMyDesktop — CLI、GTK、または Qt インターフェイスを使用してデスクトップを ogg 形式に記録する使いやすいユーティリティです。(開発はアクティブではありません)
- http://recordmydesktop.sourceforge.net/ || CLI: recordmydesktop, GTK: gtk-recordmydesktopAUR, Qt: qt-recordmydesktopAUR
- screencast — FFmpeg を使用して X11 デスクトップを記録するためのコマンドラインインターフェイス。オフライン記録とライブストリーミングをサポートします。
- Screencast — 基本的な OS 向けに設計されたシンプルなスクリーンキャストレコーダー。
- SimpleScreenRecorder — X11 および OpenGL をサポートする C++/Qt5 で書かれた機能豊富なスクリーンレコーダー。
- Spectacle — スクリーン {ショット,キャスト} 用の KDE アプリケーション。Wayland 上のデスクトップ全体、単一の画面、または単一のウィンドウのビデオ (音声なし) をキャプチャできます。kde-graphics の一部。
- VokoScreen — GStreamer を使用したシンプルなスクリーンキャスト GUI ツール。
- Wayfarer — GNOME / Wayland / Pipewire 用の GTK4 スクリーンレコーダー。
- XVidCap — X Window System の画面出力を音声ナレーション付きでスクリーンキャストまたはデジタル録音するためのアプリケーション。
Wayland
Wlroots ベースのコンポジタでは、grim や grimshotAUR (sway パッケージも /usr/share/sway/scripts/
内に grimshot を提供しています) でスクリーンショットを撮ることができます。動画は、wf-recorder (または wf-recorder-gitAUR) で撮ることができます。さらに、wlrobs-hgAUR は、wlroot ベースのコンポジタでのスクリーンキャプチャーを可能にする obs-studioプラグインです。また任意で、slurp をキャプチャする画面領域を選択するために使用できます。GPU が vaapi エンコードをサポートしている場合、wf-recorder の代わりに wl-screenrec-gitAUR を使えば、より高速に動作するかもしれません。
画面全体のスクリーンショットを撮る:
$ grim screenshot.png
Sway で現在のウィンドウのスクリーンショットを撮る:
$ swaymsg -t get_tree | jq -r '.. | select(.focused?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | grim -g - screenshot.png
Hyprland で現在のウィンドウのスクリーンショットを撮る:
$ hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - screenshot.png
画面の一部のスクリーンショットを撮る:
$ slurp | grim -g - screenshot.png
画面の一部のスクリーンショットを攝り、wl-clipboard を使ってクリップボートに貼り付ける:
$ slurp | grim -g - - | wl-copy
画面全体の動画を撮る:
$ wf-recorder -f recording.mp4
画面の一部の動画を撮る:
$ wf-recorder -g "$(slurp)"
また、上記の一部のプログラムは Wayland でのみ動作します (例: ksnip、green-recorderAUR)。
スクリーンキャスト
GNOME screencast を使う
green-recorderAUR、obs-gnome-screencastAUR、及び obs-studio は、GNOME screencast 機能を使用した Wayland での画面録画をサポートしています。
Hyprland を使う
Hyprland ウィンドウマネージャでは、xdg-desktop-portal-hyprland を使用している場合、OBS でスクリーンキャストと録画を行うことができます (個々のウィンドウやワークスペースの選択も可)。[2]
仮想 Web カメラのビデオフィードを使う
v4l2loopback#wf-recorder を使って Wayland をキャストする を参照してください。
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
ここで yuv420p
色空間を使用しているのは、映像出力に Zoom との互換性を持たせるためです。[3]
これで、先の仮想ビデオデバイスをビデオ通話/ビデオ会議アプリケーションで "ウェブカメラ" として選択できるようになりました (デバイスは VirtualVideoDevice
という名前です)。仮想ビデオデバイスがきちんとスクリーン共有を出力していることは、ffplay
(ffmpeg の一部) や mpv、gst-launch
(gstreamer の一部) を使用して確認できます:
$ 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 プロトコルを使う
PipeWire#WebRTC 画面共有 を参照してください。
Chromium と Firefox は画面共有にアクセスできるはずです。Mozilla の getUserMedia / getDisplayMedia テストページでテストできます。
ターミナル
ansi コードで出力
util-linux パッケージに含まれている、script
コマンドを使うことができます。$ script
と入力すればその瞬間から、全ての出力は (ansi コードを含めて) typescript
ファイルに保存されるようになります。
終わったら、exit
と入力するだけで typescript
が作成されます。作成されたファイルは AUR の ansi2htmlAUR パッケージを使って html に変換できます。
typescript
ファイルを typescript.html
に変換するには、次を実行:
$ ansi2html --bg=dark < typescript > typescript.html
また、コマンドによっては直接 ansi2html にパイプで渡すこともできます:
$ ls --color|ansi2html --bg=dark >output.html
どんなコマンドでも使えるというわけではないので、その場合は、script
を使う必要があります。
フレームバッファ
フレームバッファをインストールして、fbgrab か fbdump を使用して、スクリーンショットを撮ります。
仮想コンソール
Uvesafb をインストールして fbgrab または fbdump を使ってスクリーンショットを取得してください。
単にコンソールの文章を取得したいだけで画像は要らない場合、util-linux パッケージに含まれている setterm
を使うことができます。以下のコマンドは仮想コンソール 1 のテキストをカレントディレクトリの screen.dump ファイルに保存します:
# setterm -dump 1 -file screen.dump
/dev/vcs1
の中身を読まないといけないので root 権限が必要です。