CHDK & Eye-fi Connect X2 その3

CHDK Eye-Fi Timelapse Movie

Eye-fi Connect X2のエンドレスモードなのですが、今のところ、CHDKではうまく機能してくれないようです。となれば、カードによる処理はあきらめて、CHDKでファイルの削除をすればいいいわけでして、Luaなら可能なあたりまでの調べはついていたんです。
ただ、古いファイルから削除するのがなかなか面倒だな…と放置してしまって、GoProHDなどで遊んでいたら、あっという間に1年…。

で、きっと誰かが何とかしてくれているだろうと思って色々とみていたら、2chに前回の記事へのリンクが…やっぱり、Eye-fiとCHDKという組み合わせのユーザーは少ないのでしょうか。

ということで、自分で何とかしてみるかと、久々にLuaとにらめっこ。

ただ、0からだと大変なので、本家のフォーラムをいろいろと探してみたところ、こんな記事を発見しました。

Eye-Fi – Motion Detect – Auto Delete

なるほどな~ということで、参考にしてMinimalistic Intervalometer改に組み込んでテストを開始。ひとまず、順調に動いているように見えたのですが…2000枚の罠にはまり、スクリプトが停止。テストに使っているA570ISでは、2000枚で次のフォルダへ移動するなんて仕様は気にもしていませんでしたので…。

となると、2000枚以上の撮影を考えるならば、フォルダーも追いかけなければなりません。

Luaを今ひとつ使いこなせていないので、いろいろと適当なことをやりながら、なんとかでっち上げたのが今回のスクリプトです。なので、処理はかなり無理矢理になっています。

また、自分の用途に合わせて作ってあるので、仕様はこんな感じになっています。
使おうという方がもしもいらっしゃるのなら、適当にいじってください。

  • フォーカスは無限遠に固定しています
  • メニューのStock Filesで指定したファイル数を超えると、シャッターを切るごとに一番古いファイルを削除するようにしています。
  • DCIMのディレクトリには、空の「100CANON」がある状態からスタート
  • カメラ側の設定は、フォルダの自動作成はオフ、画像番号はオートリセットで動作を確認しています

また、インターバルの精度が高いMinimalistic Intervalometerをベースにしているため、get_tick_count()によるカメラを起動してからの時間を使った処理を行っています。そのため、長期の撮影では問題が発生する可能性があります。問題が発生するようであれば、精度は犠牲にして、単純にsleepで処理させれば大丈夫だと思いますが。

A570ISを使ったテストは、10秒のインターバルで6000枚を超えるところまでは確認しました。容量としては約24ギガのデータ量ですので、カードの容量を超える撮影はクリアできました。

ディスプレーをオフにできるようにしなければなぁ~と思うものの、それはまたの機会に。


--[[
@title Minimalistic Intervalometer with Auto Delete
@param a Shooting interval, min
@default a 0
@param b ...sec
@default b 5
@param c Delay 1st sequence (min)
@default c 0
@param d Delay 1st sequence (sec)
@default d 5
@param e Stock files
@default e 5
--]]

interval = a*60000 + b*1000
delay = c*60000 +d*1000
count = 0
dircount = 100

-- focas > infinity

set_prop(6,3)
sleep(2000)

set_aflock(1)
sleep(500)

--

function TakePicture()
press("shoot_half")
repeat sleep(50) until get_shooting() == true
press("shoot_full")
release("shoot_full")
repeat sleep(50) until get_shooting() == false
release "shoot_half"
end

-- main

sleep(delay)

repeat
StartTick = get_tick_count()
TakePicture()

count = count + 1
print(count)

if count > e then

while true do

path = "A/DCIM/"..dircount.."CANON"

files, msg = os.listdir(path, false)
if not files[1] then
dircount = dircount + 1
else
break
end

end

os.remove(path.."/"..files[1])

end

sleep(interval - (get_tick_count() - StartTick))

until false

set_aflock(0)
sleep(500)

2011年6月22日 Posted by staff_u | コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

トラックバックURL: http://blog.kuromatsunai.info/chdk-eye-fi-connect-x2-%e3%81%9d%e3%81%ae%ef%bc%93-2/trackback/