[ PC系セットアップ覚書 Top]

PC系セットアップ覚書

2011年まで「俺的な非 UN*X 環境をめざして」という題でしたが、 「UNIX系」と「非UNIX系」の区別がだんだん難しくなってきましたので、 あれこれ区別しないことにしました(^_^;


[前] curlでFTPS 2017/11a

Webcam で定点観測的な? 2017/03b

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

ロジクール C270 グレー&ブラック HD Webcam
価格:1188円(税込、送料別) (2017/3/6時点)


USB接続のWebカメラを固定して一定周期ごとにシャッターを切りたい、と思いました。 つまり定点観測的なことをしたいなー、と。さらに撮影するのは動画ではなく、もっぱら静止画で、 あわよくばどっかの自前のWebサイトに定期的に送りたい。

 どういうソフトを使えばいいのか? ‥ いろいろ見てみましたけど、いまいち良いのが見つかりません。というか探しても なんか古めのものしか見当たらないんですよね。んー。

 んで、探してる途中でなんか面倒くさくなってきましたので、なんか調べたら FFmpeg を使えばそこからWebカメラのデータは取れることはわかりましたので、 自分でFFmpegを使ったバッチファイル等を書いて、それで対処したいと思います。

[Table of Contents]

バッチファイルからシャッターを切る(FFmpeg)

 FFmpeg というのは 「動画や音声の変換用ツール」の定番となっているもので、フリーな動画変換アプリなどの 最重要なコア部分として使われてることも多く、それゆえ知名度以上に 世界中で使われているツールなんだろうと思います。ただ高機能多機能すぎて、 フツーの人が普通に使うにはちょっと手に余るツールなのが難点かも‥。 Windows用バイナリは [ ここ ] から ゲットできるみたいです。 Version は Release Build の(私がゲットしたときは 3.2.2 と書いてる)ほう、 Architecture は 32-bit のほう(このツールを Win10 (32bit) の DG-STK3 でも使うかも? と考えて) (64bit OS上でも32bit版は だいたい普通に使えます。 多少動作速度は落ちる‥のかな?)、また Linking のところは USBメモリなどで持ち運ぶことを考えて Static を選択しました。 そして「Download FFmpeg」をクリック、zip ファイルを解凍して ffmpeg.exe を取り出します。

まずWebカムがちゃんと接続されてるかを確認します。Webカムを接続して、 Win10 の「カメラ」アプリを起動してカメラがちゃんと動作することを確認します。 確認が終わったら「カメラ」アプリを終了して、さあ、ここからです。

 まず ffmpeg を使って、カメラがどういう名前でPCに接続されてるかを確認します。 このへんのことは [ ffmpegでwebカメラの映像を録画してみる(Windows) ] というブログを参考にしました。

ffmpeg -list_devices true -f dshow -i nul 2> mydevs.txt
こうやると良いみたいです。すると確かに mydevs.txt に DirectShow (DShow) の デバイス一覧が入っています。私の場合:
[dshow @ 037f7a00] "Logicool HD Webcam C270"
こんな感じの名前になってました。今回の目的は静止画撮影に限定してますので、 マイクの方は無視してます。

 こうして自分が使ってるカメラの Windows 上の名前を確認したら、こんな感じの コマンドを書いてみます。

ffmpeg -f dshow -i video="Logicool HD Webcam C270" -vframes 1 -f image2 out%%02d.jpg
これで out01.jpg という名前のファイルができたらOK! やった!! (^o^)

 ただこんな複雑なオプションは覚えきれませんので、バッチファイルにしておきます。 ファイル名はここでは my-snapshot.bat としましょう。

set Videon="Logicool HD Webcam C270"
set time2=%time: =0%
set HHMM=%time2:~0,2%XX
ffmpeg -f dshow -i video=%Videon% -vframes 1 -f image2 spool/out%HHMM%-%%02d.jpg
exit/b
さらにバッチファイルを手直しして、とりあえずこんな感じにしました。 spool というデータ保存用フォルダを あらかじめ別途 作っておき、そこにデータが保存されるようにした訳です。

 それとあとファイル名には撮影時刻の「時」部分だけ、付けるようにしました。このへんのことは [ Tech TIPS: Windowsのバッチファイル中で日付をファイル名に使用する (1/2) ] を参考にしました。 Win2000 あたりから使える技のようですね。

[Table of Contents]

撮影時刻を書き込む

ついでに ImageMagickを使って、 撮影した写真に現在時刻などを埋め込んでみましょう。 ImageMagick については既に [ [memo] favicon.ico の作りかた 2013/04a ] などで 紹介してますが、それを使います。

 この ImageMagick にある convert.exe を使って文字の書き込みを行います。 上で作成した my-snapshot.bat の下(といっても exit/b の上)に、 以下のようなコマンドを追記します:

set convert=convert.exe
set ImgTxt="%date%:%time:~0,5%"
copy spool\out%HHMM%-01.jpg spool\temp-img.jpg
%convert% -font Comic-Sans-MS-Bold -pointsize 32 -gravity northeast -annotate 0x0+10+10 %ImgTxt% -fill yellow spool/temp-img.jpg spool/out%HHMM%-01.jpg
del spool\temp-img.jpg

exit/b
convertコマンドを実行して「オプションが違います」的なエラーメッセージが日本語で出たときは、 ImageMagick の convert.exe ではなく Windows 標準装備の convert という (名前は同じだが、動作内容は全然ちがう)コマンドが 実行されている可能性が非常に高いです。そんなときは set convert=convert.exe のところを フルパス指定するなどしてください。
set convert=C:\Applications\ImageMagick\6.2\bin\convert.exe
こんな感じ?

[Table of Contents]

画像ファイルをWebサーバに送る(FTP)

こうして撮影した画像ファイルをFTPを使って自動的にWebサーバに送りたい! ‥ についてはすでに [ [memo] CUIなFTPコマンド 2015/05a ] に メモってましたので、それと同じ方法を使えば行けます。やった!

[Table of Contents]

一定時間ごとに撮影・ファイル送信したい

(つづく

‥‥予定でしたけど、Win10 だとなんか勝手にOSのセキュリティアップデートが かかるからなのか、試している途中で 決まった時間の自動起動設定とかカメラのアクセス設定が いつのまにかリセットされて使えなくなっていることが何度も起きるため、 いちいちいろいろ設定しなおすのが面倒になり放置放棄してしまいました)



[次] DG-STK3 とEthernetアダプタ 2017/03a