Ubuntuには標準で「Cheese」と言うWebカメラのソフトが付属しています。
「Cheese」の「設定」メニューで、接続されているデバイスが確認できます。
WebカメラをUSBポートに差していない場合は、ノートPC内蔵のカメラが /dev/video0 として認識されました。
その後、1台目のWebカメラをUSBポートに差すと /dev/video1 として認識されました。
(ただし、解像度を合わせて、一旦アプリを閉じて再起動しないと画像は表示されませんでした。)
さらに、2台目のWebカメラをUSBポートに差すと /dev/video2 として認識されました。
(やはり、途中でデバイス追加だと、再起動が必要でした。)
Ubuntuソフトウェアセンターから「Kamoso」をインストール。
このソフトは、解像度に関係なく、画面上部のプルダウンリストでカメラの切り替えができるので、とりあえずの動作確認には便利でした。
・・・ただ、デバイス名(/dev/video1とか)を表示してくれないのが残念。
「Cheese」にしても「Kamoso」にしても、今回目的のインターバル撮影の機能はもっていないようなので、また別のソフトを利用します。
Ubuntuソフトウェアセンターから「motion」をインストール。
動体検知もできるライブカメラソフトとして定番のようなので試してみました。
これはGUIはなく、コマンドラインで使うものなので、少し扱いにくいのでは???・・・と不安があったが、やってみたら意外と簡単に動作してくれたので拍子抜けでした。
(「Cheese」や「Kamoso」などのソフトを終了しておくこと。)
端末でmotionの共通部分を設定
$ sudo nano /etc/motion/motion.conf
# ↓thread1.conf、theread2.confで指定するのでコメントアウト #videodevice /dev/video0 input 8 # ←USBカメラの場合は8 #width 320 width 640 # ←横ピクセル数 #height 240 height 480 # ←縦ピクセル数 #output_normal on output_normal off # ←動体感知しても画像を保存しない #ffmpeg_cap_new on ffmpeg_cap_new off # ←動体感知しても動画を作成をしない #snapshot_interval 0 snapshot_interval 60 # ←インターバル撮影の間隔を秒で指定(60=1分) #snapshot_filename %v-%Y%m%d%H%M%S-snapshot snapshot_filename %Y%m%d-%H:%M:%S-snapshot # ←保存ファイル名の形式 #webcam_port 8081 webcam_port 0 # ←Web Camサーバー未使用 #control_port 8080 control_port 0 # ←HTTPベースで制御しない ; thread /usr/local/etc/thread1.conf thread /etc/motion/thread1.conf # ←1台目のWebカメラ用設定 ; thread /usr/local/etc/thread2.conf thread /etc/motion/thread2.conf # ←2台目のWebカメラ用設定 ; thread /usr/local/etc/thread3.conf ; thread /usr/local/etc/thread4.conf
スレッド1の設定ファイルを編集
$ sudo nano /etc/motion/thread1.conf
#videodevice /dev/video0 videodevice /dev/video1 # ←1台目のWebカメラを指定 input 8 # ←USBカメラの場合は8 # ↓撮影した写真の保存先 #target_dir /usr/local/apache2/htdocs/cam1 target_dir /media/satoh163/Acer/_WebCam/_Ubuntu_Cam1 #webcam_port 8081 webcam_port 0 # ←Live Web Camサーバー未使用 #on_picture_save /usr/local/motion-extras/camparse2.pl on_picture_save # ←未使用 #on_movie_end /usr/local/motion-extras/mpegparse2.pl on_movie_end # ←未使用
スレッド2の設定ファイルを編集
$ sudo nano /etc/motion/thread2.conf
#videodevice /dev/video1 videodevice /dev/video2 # ←2台目のWebカメラを指定 #input 1 input 8 # ←USBカメラの場合は8 # ↓撮影した写真の保存先 #target_dir /usr/local/apache2/htdocs/cam2 target_dir /media/satoh163/Acer/_WebCam/_Ubuntu_Cam2 #webcam_port 8082 webcam_port 0 # ←Live Web Camサーバー未使用 #on_picture_save /usr/local/motion-extras/camparse2.pl on_picture_save # ←未使用 #on_movie_end /usr/local/motion-extras/mpegparse2.pl on_movie_end # ←未使用
今回、ノートPCに2つのWebカメラをUSB接続しました。/dev/video0が液晶上部の内蔵カメラ、/dev/video1が最初にUSBポートに差したWebカメラ、/dev/video2が後でUSBポートに差したWebカメラとなりました。
ちなみに、Webカメラは、UVC(USB Video Device Class)に対応していれば良いらしく、千円以下の数年前の型落ち品でも充分です。
端末で「motion」を起動します。
$ sudo motion
1分毎にファイルが保存されています。
終了する場合は「Ctrl」+「C」で。
(ノートPCもUbuntuをメインに使用中です)
Ubuntuソフトウェアセンターから「Thunar」(Xfceのファイルマネージャー)をインストール
インターバル撮影した静止画像の内、使用するものを選択し、フォルダーに移動。
・・・慎重に行うなら、移動ではなくコピーするか、シンボリックリンクを作成しても良いかも・・・。
「Ctrl」+「A」でファイルを全て選択し、右クリックで「名前の変更(R)…」を選択し「複数のファイル名を変更します」画面を表示。
画面のように「番号付け」、「名前と拡張子」を選び、番号の形式で「0001,0002,0003,…」を選び、開始番号に「1」を指定し、テキストの形式で「番号 – テキスト」を選び、テキストに「.jpg」を指定したら、「ファイル名を変更する」ボタンを押して、ファイル名を連番で一括リネームします。
・・・以下の静止画→動画変換で、ファイル名がゼロ埋めされた連番でないといけないらしく、前処理です。
動画&音声の変換ソフト「ffmpeg」をインストール
sudo apt-add-repository ppa:mc3man/trusty-media sudo apt-get update sudo apt-get install ffmpeg
今回は複数枚の静止画ファイルを連結し、一つの動画ファイルに変換します。
$ ffmpeg -i %04d.jpg -r 25 -s 320x240 out2.mpg
-i は入力ファイルの指定で、%04dがファイル名の、0000~9999までの4桁の数字に相当します。
-r はフレームレートで標準が25フレーム/秒です。
-s は出力サイズで、今回は横320ピクセル×縦240ピクセルに縮小しました。
out2.mpgは出力ファイル名です。
以下は、mpeg4で出力する場合の記述例。出力解像度は変更。
$ ffmpeg -i %04d.jpg -r 25 -s 640x480 -vcodec libx264 -f mp4 out2.mp4
上記のコマンドで出力した動画です。
飛行場なら少しは見るべきところもあったのでしょうが、ただ雲の流れがわかるだけ。
天候もパッとせず、Webカメラの性能が低いので、あまりキレイな動画にはなりませんでした。
Windowsを使用していたときは、まともなWebカメラ用のフリーソフトがなくて、有償ソフトを購入したりもしました。・・・もっと早くからLinuxを活用していれば・・・。
インターバル撮影をしたいなら、その機能が付いたデジカメもありますが、ノートPC(Ubuntu)+Webカメラ(格安ウェブカム)+「motion」で事足ります。
花の開花や、昆虫の羽化、潮の満ち引き、太陽や月の運行なども、インターバル撮影をしてみたら面白そう。
動体検知を生かして、防犯カメラにするのも意外と簡単なのでしょうね。