Time Lapse(インターバル撮影)を撮っていると避けて通れないフリッカー(つまりは画面のちらつき)の問題対策についてです。(特に日の出と夕暮れ)
ネット上ではいろいろな対策方法の情報があり、時間を見つけては目ぼしいものを試しているので、防忘録として書いておこうかと思っています。
今回はTimeLapseDFというAviSynth用のフリーのTimeLapse専用フリッカー低減プラグインで、想像していたより(万能ではないが)良好な結果を得られたので、詳細を書いてみようかと。
プラグインとドキュメントは以下から
http://bit.ly/M0TG7o
プラグインだけでは動かないので本体のAviSynthも
http://bit.ly/12X1sA
更にAviSynthも単独では動かないのでホストアプリとして例えばVirtualDubを使用
http://bit.ly/113xbG
まずはVirtualDubとAviSynthをそれぞれのサイトを参照にしながらインストール。AviSynthは通常C:\WINDOWS\system32にdllがインストールされるので、VirtualDubから認識するには、そこにパスが通っている必要があります。
更にTimeLapseDFをC:\Program Files\AviSynth 2.5\plugins\に置く。
以上で準備は終了です。
[TimeLapseDFの概要]
AVG、CDF、MFRの3種類のモード(アルゴリズム)を持っているようで、それぞれ一長一短があります。それぞれのモード細かいパラメータを設定できるようになっています。
特に重要なのがAVGとCDFモードで使用するgradientパラメータとなり、trueだと最初と最後のフレームの輝度に合わせて輝度を増減、falseだと輝度がずっと一定になります。
[TimeLapseDFのスクリプト]
まずはテキストエディタで以下のようにhoge.avsというスクリプトを作成。
PluginDir = "C:\Program Files\AviSynth 2.5\plugins\"
LoadPlugin(PluginDir + "TimeLapseDF.dll")
clip = ImageSource("D:\Pictures\image\IMG_%04d.JPG", 0, 2000, 30 )
clip.ConvertToYUY2()
TimeLapseDF(mode="CDF",gradient=true, lpf=0.3)
return last
ここでImageSource関数で加工する元画像を指定します。この例では%04dが0000~2000という文字に置き換わったファイルを処理します。つまりIMG_0000.JPG,IMG_0001.JPG.....IMG_2000.JPGという按配。
TimeLapseDF関数ではモードと詳細パラメータを指定します。ここではCDFモードでgradient=trueを指定しています。
残りの部分はとりあえずオマジナイと思ってください。
[スクリプトを実行]
VirtualDubを起動。File->Open video fileで上のhoge.avsを開く。すると元の絵のシーケンスが表示される(MFRモードだと表示に少々時間がかかるようです。)
次に以下のようにして、加工後の絵を書き出す。
File->Export->Image Sequenceでどこかのフォルダを指定して書き出し。
以上で加工されたイメージシーケンスが保存されているはずなので、これを動画編集ソフトに読み込んで動画に直せば完成です。
youtubeに実験映像をアップロードしましたので、ご覧ください。デジタル一眼を購入した直後の頃に西伊豆の田子で夕暮れをインタバール撮影したものです。 この頃はまだカメラの使い勝手が分からずに、ひどいちらつきになっているので、それぞれのモードでの効果がわかりやすいかと思います。
動画はかなりの場所で破綻しているのがわかるかと思いますが、きちんと撮ったTimeLapseではここまでひどいちらつきのある元画像にはならないと思いますので、通常では十分実用になるかと思います。
動画は以下のパラメータで実験したものをつなぎ合わせています。
オリジナル
TimeLapseDF(mode="AVG",gradient=true, lpf=0.3)
TimeLapseDF(mode="AVG",gradient=false, lpf=0.3)
TimeLapseDF(mode="MFR"lpf=0.3、)
TimeLapseDF(mode="CDF",gradient=true, lpf=0.3)
TimeLapseDF(mode="CDF",gradient=false, lpf=0.3)