[常見問與答] 如何在Raspberry Pi上擷取畫面?

如果是在 X Window 下,最簡單的方式是安裝 shutter,但這有兩個缺點,就是 shutter 相依的套件太多,所以光是截圖這個小功能就需要安裝將近 90MB 的套件,並且執行起來很慢,但使用最容易。

步驟如下:
1. 先安裝必要套件

 

2. 從主要功能選單(main-menu)叫起來

3. 執行區域性的截圖、或是全螢幕的截圖等功能

如果覺的 shutter 不適合,還可以用 scrot + openbox,之後就可以按 PrtSc 直接做 snapshot。有關 scrot 的使用方式可以參考這篇

步驟如下:
1. 先安裝必要套件

2. 增加按鍵的繫結(key binding),將 keybind 的定義放在 <keyboard> 和 </keyboard> 之間

3. 進到桌面環境下,按 PrtSc 做 snapshot,擷取畫面的預設路徑是放在家目錄 (/home/pi) 下。

 

如果是在 console 底下 可以透過 cat /dev/fb0 > snapshot.rawframebuffer 的資料轉存為 RGB565 的 raw 檔。但如果要用 Eye 等看圖軟體讀取,就需要將 raw 檔透過 FFmpeg 等軟體先轉為 PNG 或是 BMP 等格式。

幸運的是,我們也可以透過 vc_dispmanx_snapshot 這個函式取得目前螢幕的狀態。
Andrew Duncan 已經寫成成執行檔,下載後編譯就可以在 console 底下隨時擷取螢幕畫面。

步驟如下:
1. 先安裝必要套件

2. 下載原始碼

3. 編譯

4. 使用,不加任何參數時預設是存成 png 格式的檔案

可用的參數有以下幾種,當然這指令也可以在X Window下執行。

最後,我們最喜歡用的其實是同一個作者的 fb2png。這程式可以讀取 framebuffer 並直接儲存成 png 格式的檔案。

步驟如下:
1. 先安裝必要套件

2. 下載原始碼

3. 編譯

4. 使用

最後比較一下 raspi2png 和 fb2png,底下是相同時間的擷取結果,可以發現 raspi2png 是根據 VideoCore API 的 vc_dispmanx_display_get_info 傳回螢幕解析度,因此雖我們已經將 framebuffer 的解析度調整成 800×600,但是因為我們用的螢幕解析度是 1280×800,因此最後還是抓下 1280×800 的截圖。

而 fb2png 則是開啟 /dev/fb0 的裝置檔,並根據 fb_var_screeninfo 回傳 framebuffer 的 xres 和 yres,因此最後截圖結果會是 800×600 的解析度,比較符合我們想要的結果。

相關教學

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

補貨通知我 我們將會在商品到貨的時候通知您。請在下方留下有效的Email。
Email 數量 我們不會將你的Email 告知任何人。