樹莓派 Raspberry Pi 與 USB 網路攝影機,自製縮時攝影設備教學

設備安裝

這個自製的旅行縮時攝影設備只需要一張樹莓派開發板與一個 USB 網路攝影機。

raspberry-pi-time-lapse-using-motion-and-avconv-20161122-06

樹莓派與 USB 網路攝影機

因為這一組設備我想要直接放在車上,所以就選一張舊的樹莓派來用,這一張是第一代的 Raspberry Pi Model B+ V1.2,CPU 只有 700 MHz,這個速度當作 PC 用的話通常不太夠,但放在車上用剛好,既省電又不會太熱。

raspberry-pi-time-lapse-using-motion-and-avconv-20161122-05

樹莓派 Raspberry Pi Model B+ V1.2

電源的部分就使用一般車用的 USB 充電器就可以了,建議挑選有 2A 以上給平板用的那種。

raspberry-pi-time-lapse-using-motion-and-avconv-20161122-02

車用 USB 充電器

將設定好的樹莓派接上 USB 網路攝影機與電源,正常的話不用一分鐘就會自動啟動攝影機,開始拍攝縮時攝影了。

raspberry-pi-time-lapse-using-motion-and-avconv-20161122-01

樹莓派

網路攝影機就看自己喜歡放在哪個角度,通常掛在車內後照鏡上。

raspberry-pi-time-lapse-using-motion-and-avconv-20161122-03

USB 網路攝影機(webcam)

在車上安裝攝影機的鏡頭時,最常見的問題就是沒有螢幕,看不到鏡頭拍攝的角度,這時候我們就可以拿出手機,連線至樹莓派的 WiFi 熱點,接著用瀏覽器打開樹莓派的 8081 連接埠,就可以看到串流影像了,以我的例子來說,樹莓派的 IP 位址我設定為 192.168.50.1,就用瀏覽器開啟這個網址:

http://192.168.50.1:8081/

串流的畫面看起來就像這樣:

raspberry-pi-time-lapse-using-motion-and-avconv-20161123-02

影像串流畫面

這樣我們就可以看著手機上鏡頭的畫面,輕鬆調整鏡頭的角度了。

raspberry-pi-time-lapse-using-motion-and-avconv-20161123-01

樹莓派與影像串流畫面

這個串流畫面會有幾秒鐘的延遲,這可能跟樹莓派的處理速度有關係,不過實際操作上影響不大,只是在調整攝影機角度時,要稍微等個兩、三秒,再看看畫面是否合適。

raspberry-pi-time-lapse-using-motion-and-avconv-20161123-05

影像串流畫面

調整好網路攝影機的角度之後,就可以開始使用這個自己打造的縮時攝影機了,也就是說接下來樹莓派就會以每秒一張的速度,將畫面拍攝下來,儲存在儲存媒體中。

樹莓派的 8080 連接埠還有 motion 提供的網頁操作介面,如果需要對 motion 進行各種控制,就可以透過這個方式。

raspberry-pi-time-lapse-using-motion-and-avconv-20161123-04

motion 網頁控制介面

就我個人的使用狀況而言,在使用的過程中車內有開冷氣的狀態下,樹莓派的溫度都在攝氏四十幾度左右,下面這張圖是我用手機的 RasPi Check App 查看樹莓派的狀態資訊快照。

raspberry-pi-time-lapse-using-motion-and-avconv-20161122-09

樹莓派狀態資訊

舊版樹莓派的好處就是省電、溫度非常低,但是缺點就是 CPU 運算速度不夠快,如果想要製作更高畫質或拍攝頻率更高的影片,可以考慮使用新的樹莓派板子。

如果您是使用比較新版的樹莓派,散熱的問題可能就要注意,例如夏天不要放在陽光下直曬,或是放在冷氣口散熱。

raspberry-pi-time-lapse-using-motion-and-avconv-20161122-04

樹莓派

原則上來說,USB 網路攝影機並沒有特別一定要使用哪一款,只要是樹莓派支援的 USB 網路攝影機都可以使用,除了本文中的這個網路攝影機,我也用過羅技的 C170 這一個網路攝影機,使用方式都完全一樣。Embedded Linux Wiki 有一張 RPi USB Webcams 表格可以參考。

raspberry-pi-time-lapse-using-motion-and-avconv-20161122-07

在車子到達目的地時,先把車子停好之後,在車子熄火之前,使用 RasPi Check 這類的手機 App 控制樹莓派正常關機,確保所有的照片都正常寫入儲存媒體,接著再將汽車熄火。

raspberry-pi-time-lapse-using-motion-and-avconv-20161123-03

RasPi Check 手機 App

當然如果不想那麼麻煩,也可以在停好車等個幾秒鐘(或是幾十秒)之後,直接將汽車熄火,通常照片也是可以正常寫入的,只是沒那麼保險。

製作影片

縮時攝影的照片拍攝完成後,可以將樹莓派的記憶卡取下來,放在 Linux 的個人電腦中掛載起來讀取照片。

所有拍攝的照片預設會儲存在 /var/lib/motion 目錄中,檔案名稱會類似 01-20161121023805-snapshot.jpg 這樣以日期來編碼的檔名。在製作影片之前,可以先自己篩選一下照片,把一些 NG 的照片刪掉。

接著把所有要用來製作影片的照片放在同一個目錄中,如果您想要把照片分組,製作多個影片,就把照片分別放在多個不同的目錄中,這樣比較方便處理。

在含有照片的目錄中,執行以下這段指令稿,將所有的照片依照順序重新以數字命名:

/bin/ls *.jpg | perl -ne 'chomp;printf "mv $_ %04d.jpg\n",$i++' | sh

這樣的作用是方便把所有的照片一次交給 ffmpeg 處理,接著呼叫 ffmpeg 製作影片:

ffmpeg -r 20 -i %04d.jpg output.mp4

如果在比較新的 Linux 發行版中,ffmpeg 可能會被 avconv 取代,不過指令大同小異:

avconv -r 20 -i %04d.jpg output.mp4

這樣產生出來的 output.mp4 就是縮時攝影的結果了。下面這段影片是我在下雨天拍攝的旅行縮時攝影。

紀錄日期與時間

樹莓派的硬體中並沒有實時時鐘(RTC)的配備,也就是說樹莓派在斷電的狀態下是沒有辦法紀錄正確的時間的,如果有網路的話,我們可以在開機時透過 ntp 網路校時的方式取得正確的時間,但若是沒有網路的話(例如裝在汽車上),樹莓派是無法得知正確的時間的,所以在前面的示範教學中,在設定 motion 時,直接將照片中的時間戳記改為一般的文字,因為沒有正確的時間資訊,寫上去的時間也是錯的。

若想要在沒有網路的環境下,又可以保有正確的時間,可以在樹莓派上加裝一個 DS3231 RTC,這樣樹莓派在開機時就可以從這個 RTC 取得正確的時間,之後在拍攝縮時攝影照片時,就可以將正確的時間打在照片上。

加裝了 DS3231 RTC,有了正確的時間之後,接著再修改 /etc/motion/motion.conf 設定檔,將右下方的文字改為時間戳記:

#text_right %Y-%m-%d\n%T-%q
#text_right "G.T.Wang"
text_right %Y-%m-%d\n%T

這裡我用的時間戳記是年-月-日加上時間,這個格式可以自行調整,如果您設定一秒拍攝一張以上的畫面,可以再加上 %q 這個 frame 的編號。

加上時間戳記之後,拍攝出來的照片就會記錄下拍攝的時間,讓旅程的紀錄更完整。

raspberry-pi-time-lapse-using-motion-and-avconv-20161123-06

時間戳記

以下就是加上時間戳記的縮時攝影。

上面這段影片中,中間大約在 1:03 左右的地方我開進加油站加油,這一次我沒有讓樹莓派正常關機就直接熄火,導致熄火前十幾秒的畫面圖檔都沒有寫入儲存媒體(那些檔案的大小都是零),所以中間這一段就漏掉了。所以如果是要錄製重要的畫面,記得要讓樹莓派正常關機。

參考資料:Programmatic PonderingsEmbedded Linux Wiki

樹莓派, 物聯網

13 留言

  1. elephant

    請問若是要放在家中當監視器可以從手機即時觀看
    是不是可以設定樹莓派連上家中wifi
    就不用設定一個虛擬IP
    手機在進入那組IP就可以觀看?

    • G. T. Wang

      若在家中讓手機與樹莓派都連上同一個無線 AP,
      就不需要自己建立 AP,
      直接使用家裡無線 AP 的 DHCP 配發的 IP 位址即可使用。
      建議您先研究基本的網路知識再來實作。

  2. Jimmy

    你好,請問如果是放在家中當監示器,但在公司要用手機觀看,有哪些方式可以達到呢??是不是一定要架個server??MQTT可以嗎?

    • G. T. Wang

      是一定要有 server,架設方式有很多種,但是一言難盡。

      MQTT 只是簡單的訊息傳輸協定,在這裡用不到。

      • Jimmy

        1. 謝謝回覆,我查到這個網頁可以設定從外部網路連回來,好像不用架server,還是我對server的理解錯誤?以為架server就是要另一台PC去架設,或是用網路免費的server。
        https://pimylifeup.com/raspberry-pi-security-camera/
        2. 若我想從公司經由樹莓派控制家裡的電器,可以用MQTT的軟體嗎?還是MQTT的軟體只適合區域網路嗎?

        • G. T. Wang

          1. 這裡的 server 可以使用各種設備架設,不一定要是 PC,通常網路上最常見的實作是使用樹莓派本身作為 server,您提供的連結就是一例。
          2. 從公司經由樹莓派控制家裡的電器,用 MQTT 很適合,它跟網路環境沒有直接關係,只不過要把路由相關的問題處理好,讓外部的連線可以進的來。(不過如果只是非常簡單的開關控制,用 MQTT 是殺雞用牛刀)

          • Jimmy

            1. 我看你另一篇”樹莓派架設 RTMP 串流(Streaming)伺服器,傳送即時攝影機影像”,可以知道Nginx是server。但我反覆再看我貼的那個網頁,仍不清楚哪個地方是在安裝server,還是motion就有server的功能??
            2. https://pimylifeup.com/raspberry-pi-webcam-server/
            這篇是同網站的另一篇教學,他是設定路由器就可以由外部網路連線,你這篇是不是也可以經由設定路由器讓外部網路連線??
            3. 如果只是非常簡單的開關控制,用 MQTT 是殺雞用牛刀,有建議的殺雞刀嗎??
            不好意思…不太懂…所以問題有點多

          • G. T. Wang

            1. motion 本身就有 server 的功能。
            2. 是。
            3. 沒有建議的,通常選自己喜歡的。

            我想您應該先從基本的觀念學起,這樣問應該是很難弄懂的。

  3. Jimmy

    再請問一下,如果要從公司連到家裡的樹莓派,家裡的網路是不是要有固定IP?如果家裡的網路是用4G訊號來分享的是不是就沒有固定IP?

    • G. T. Wang

      固定 IP 是最方便,浮動 IP 可配合 DDNS,若是虛擬 IP 可能就只能用 ssh tunnel 之類的方式了。

      4G 通常是沒有實體 IP 的吧?

  4. Petere

    這邊樹莓派要做熱點使用應該還需要一張網卡吧?

  5. Petere

    沒事我沒看到第一頁

  6. xin

    如果我想將樹梅派利用自己寫的python程式opencv顯示攝影機畫面時,可以透過手機或是電腦觀看影像,請問要如何辦到

Leave a Reply