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

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

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

pi@raspberrypi:~$ sudo apt-get install shutter

2. 從主要功能選單(main-menu)叫起來
shutter_shortcut
3. 執行區域性的截圖、或是全螢幕的截圖等功能
shutter_capture_window

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

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

pi@raspberrypi:~$ sudo apt-get install scrot

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

pi@raspberrypi:~$ vi ~/.config/openbox/lxde-rc.xml
  <keybind key="Print">
      <action name="Execute">
          <command>scrot</command>
      </action>
  </keybind>

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

 

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

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

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

pi@raspberrypi:~$ sudo apt-get install libpng12-dev

2. 下載原始碼

pi@raspberrypi:~$ git clone https://github.com/AndrewFromMelbourne/raspi2png.git

3. 編譯

pi@raspberrypi:~$ cd raspi2png
pi@raspberrypi:~$ make

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

pi@raspberrypi:~$ ./raspi2png

console

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

--pngname - 抓圖後的存檔名稱(預設是 snapshot.png )
--verbose - 顯示完整資訊
--height - 圖片高度(預設是螢幕的高度)
--width - 圖片寬度(預設是螢幕的寬度)
--type - 圖片的色彩格式,可用的格式為 RGB565 RGB888 RGBA16 RGBA32
--delay - 多久後擷取(預設是0,立刻執行)

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

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

pi@raspberrypi:~$ sudo apt-get install libpng12-dev

2. 下載原始碼

pi@raspberrypi:~$ git clone https://github.com/AndrewFromMelbourne/fb2png.git

3. 編譯

pi@raspberrypi:~$ cd fb2png
pi@raspberrypi:~$ make

4. 使用

pi@raspberrypi:~$ ./fb2png

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *