這裡介紹許多可以在 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、台灣樹莓派


