這裡介紹許多可以在 Raspberry Pi 中擷取螢幕畫面的工具,除了 X Window 視窗環境之外,終端機介面的畫面也可以直接儲存下來。
X Window 視窗環境
首先介紹在 X Window 視窗環境下的畫面擷取工具。
Shutter
Shutter 是一個在 X Window 下多功能的視窗畫面擷取工具,不過由於它整個程式很大,相依套件也很多,在 Raspberry Pi 這樣的硬體上執行會有點慢,不過對於不熟悉指令的人來說,也算是一個不錯的工具。
Shutter 可以透過 apt 直接安裝:
sudo apt-get install shutter
安裝完成後,就可以在系統的選單中看到 Shutter 這個軟體了。
Shutter 的介面很容易上手,自己玩一下就知道怎麼使用了。
Shutter 在執行之後,在系統圖示列會出現一個 Shutter 的圖示,可以方便使用者快速擷取畫面,您可以把主視窗關掉,透過這個選單來擷取畫面。
Scrot
Scrot 是一個小巧的畫面擷取工具,不會佔用系統太多的資源,又可以快速擷取畫面。
Scrot 也可以利用 apt 安裝:
sudo apt-get install scrot
安裝好之後,直接執行就會將目前的螢幕畫面照下來:
scrot
而照下來的圖檔預設會放在家目錄中(也就是 /home/pi/
中),依照日期與時間來命名。
scrot
指令常用的參數如下:
-b
或--border
:當擷取單一視窗時,連同視窗框邊一併擷取。-c
或--count
:擷取畫面之前,顯示倒數數字。-d
或--delay NUM
:指定延遲擷取的秒數。-e
或--exec APP
:指定後續處理擷取圖檔的程式。-q
或--quality NUM
:指定圖片的品質(壓縮程度),可用的值為1
到100
,預設為75
。-m
或--multidisp
:啟用多螢幕擷取(擷取多個螢幕的畫面後,再將其合併為一張圖)。-s
或--select
:使用滑鼠指定要擷取的視窗或是範圍。-u
或--focused
:擷取目前作用中的視窗。-t
或--thumb NUM
:自動產生縮圖,NUM
可指定為百分比或是實際縮圖大小(如50x60
)。
終端機(Console)環境
在終端機下我們也可以靠著一些指令工具來擷取目前的畫面。
使用 /dev/fb0
與 ffmpeg
在 Linux 系統中我們可以直接透過 framebuffer(/dev/fb0
)來擷取目前的畫面內容:
cat /dev/fb0 > fb.raw
不過這裡面的資料擷取下來之後,還要再經過 ffmpeg
轉檔之後才能使用,使用前要先安裝一下 ffmpeg
:
sudo apt-get install ffmpeg
再將剛剛擷取的 fb.raw
轉為 png 檔:
ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt rgb565le -s 1232x992 -i fb.raw -f image2 -vcodec png screen.png
這裡產生的 screen.png
圖檔內容就是剛剛擷取的畫面。下面這張是我裁切過圖,這比起用相機照的照片清楚得多了。
這裡要注意一點,ffmpeg
在轉檔時需要使用 -s
參數指定螢幕的解析度(以這個例子來說是 1232x992
),這個部分請依照您的系統設定自己更改,如果不知道自己的螢幕解析度,可以使用 fbset
來查看:
fbset -i
它的輸出會像這樣
mode “1232×992”
geometry 1232 992 1232 992 16
timings 0 0 0 0 0 0 0
rgba 5/11,6/5,5/0,0/16
endmode
Frame buffer device information:
Name : BCM2708 FB
Address : 0x1c006000
Size : 2444288
Type : PACKED PIXELS
Visual : TRUECOLOR
XPanStep : 1
YPanStep : 1
YWrapStep : 0
LineLength : 2464
Accelerator : No
從這裡就可以看出螢幕的解析度為何。
raspi2png
raspi2png
是 Andrew Duncan 開發的小工具,可以透過 vc_dispmanx_snapshot 擷取畫面。
首先安裝 png 函式庫:
sudo apt-get install libpng12-dev
從 GitHub 下載 raspi2png
的原始碼:
git clone https://github.com/AndrewFromMelbourne/raspi2png.git
編譯 raspi2png
:
cd raspi2png make
編譯完成後,會產生 raspi2png
這個可執行檔,直接執行它就可以擷取目前的畫面:
./raspi2png
raspi2png
指令可用的參數有:
--pngname <name>
:指定輸出的 png 檔名,預設為snapshot.png
。--height <height>
:指定圖片高度,預設為螢幕畫面高度。--width <width>
:指定圖片寬度,預設為螢幕畫面寬度。--delay <delay>
:指定延遲秒數,預設為0
秒。--stdout
:輸出至標準輸出(stdout
)。--help
:顯示說明訊息。
fb2png
fb2png
跟 raspi2png
類似,不過他是直接從 framebuffer 擷取畫面的。
首先安裝 png 函式庫:
sudo apt-get install libpng12-dev
從 GitHub 下載 fb2png
的原始碼:
git clone https://github.com/AndrewFromMelbourne/fb2png.git
編譯 fb2png
:
cd fb2png make
編譯完成後,會產生 fb2png
這個可執行檔,直接執行它就可以擷取目前的畫面:
./fb2png
fb2png
指令可用的參數有:
-p <name>
:指定輸出的 png 檔名,預設為fb.png
。-d <device>
:指定擷取的設備。
如果您對於樹莓派的應用有興趣,建議您可以繼續閱讀物聯網的相關文章。
參考資料:Raspberry Pi Spy、台灣樹莓派