2014/02/05(水) [n年前の日記]
#1 [nitijyou] めちゃ寒い
予想では、一日中氷点下になるらしく。道理で寒いわけで…。
[ ツッコむ ]
#2 [cg_tools] GIMP 2.6 + GAPで火の玉のループアニメを作ろうとして四苦八苦
GAP(Gimp Animation Package)の使い方を完全に忘れてる…。とりあえず、Windows7 + GIMP 2.6 + GAP で作業。
火の玉画像は、 _Prominence で作成。連番pngで書き出した。このままではループアニメになってないので、ループアニメにするために、何か手を加えないといけない。
GIMP上での、ショートカットキーの割り当て方は以下の通り。
火の玉画像は、 _Prominence で作成。連番pngで書き出した。このままではループアニメになってないので、ループアニメにするために、何か手を加えないといけない。
◎ GAPで連番pngを扱う前準備について。 :
GIMP + GAPを使って、連番pngを、連番xcfにして保存する手順をメモ。もっと簡単な手順があるかもしれないけど、今現在分かってるやり方は、このくらい。
- ファイル → 開く → 連番pngの一番最初の画像を開く。
- ファイル → レイヤーとして開く → 残りの連番png画像を全て開く。各連番pngが、レイヤーになっている画像ができる。(膨大なレイヤー数になる…)
- frame.xcf として保存。
- Video → Split Image to Frames を選ぶ。連番xcfとして、frame_*.xcf が保存できる。保存先フォルダは、先ほど frame.xcf を保存した場所が勝手に設定されてしまう模様。
- frame_*.xcf ができたら、frame.xcf は閉じていい。後は、frame_*.xcf に対して作業をしていく。
◎ 頻繁に使うコマンドについて。 :
- Video → Go To → Next Frame で、次のフレームに移動できる。(frame_000001.xcf を開いていたら、frame_000002.xcf が開かれる)
- Video → Go To → Previous Frame で、前のフレームに移動できる。(frame_000002.xcf を開いていたら、frame_000001.xcf が開かれる)
GIMP上での、ショートカットキーの割り当て方は以下の通り。
- 編集 → 環境設定 → ユーザーインターフェイス → 「動的なキーボードショートカットを使用」「終了時にキーボードショートカットを保存」にチェックを入れておく。各メニューを表示、かつ、項目にマウスカーソルを合わせた状態でキーを押すと、その項目に対して、そのキーが、ショートカットキーとして割り当てられるようになる。
- あるいは、編集 → キーボードショートカット、でも割り当てができる。検索欄に、目的の機能に関係ありそうな単語を打ち込めば、リストの絞り込みをしてくれる。ただ、時々、似たような名前の関係ない機能に間違って割り当ててしまうことがあったので、個人的にはこっちはあまり使ってなかったり。
◎ ちと上手く行かない点が。 :
前後のフレームに移動しながら、レイヤーを追加したり、編集等をして。最後に動画なり、連番画像として保存したいわけだけど。ここが上手く行かない…。各フレーム ―― frame_*.xcf が複数レイヤーを持っている状態で、フレーム→レイヤー変換をしたら、GIMPが固まってしまった。
一応、Video → Frames Flatten を選べば、全フレームに対して、全レイヤーを画像統合してくれる。この状態なら ―― 各フレームが、レイヤーを1つしか含まない状態なら、Video → Frames to Image で、フレーム→レイヤー変換ができるのだけど。
しかし、Frames Flatten を選んだ時点で、各フレームのアルファチャンネルが無くなってしまって、背景色でベタ塗りされた状態になってしまう。ゲーム用の画像を作りたい場合、コレはちょっと困るわけで。
仕方ないので、複数レイヤーがあるフレームは、手作業で「可視レイヤーの統合」をしていったけど…。どう考えてもこのあたり、自動化できそうな気がする。
ちなみに、GIMPを使って、全レイヤーを連番画像として保存するには、 _continuous-save が使える、はず。ありがたや。
_Layer Export GIMP Script - Uzebox で、sg-save-all-layers.scm なるスクリプトも紹介されてた。英語圏ではこっちのほうが知られてるっぽい? スクリプト名が分かりやすいのかしら…。
一応、Video → Frames Flatten を選べば、全フレームに対して、全レイヤーを画像統合してくれる。この状態なら ―― 各フレームが、レイヤーを1つしか含まない状態なら、Video → Frames to Image で、フレーム→レイヤー変換ができるのだけど。
しかし、Frames Flatten を選んだ時点で、各フレームのアルファチャンネルが無くなってしまって、背景色でベタ塗りされた状態になってしまう。ゲーム用の画像を作りたい場合、コレはちょっと困るわけで。
仕方ないので、複数レイヤーがあるフレームは、手作業で「可視レイヤーの統合」をしていったけど…。どう考えてもこのあたり、自動化できそうな気がする。
ちなみに、GIMPを使って、全レイヤーを連番画像として保存するには、 _continuous-save が使える、はず。ありがたや。
_Layer Export GIMP Script - Uzebox で、sg-save-all-layers.scm なるスクリプトも紹介されてた。英語圏ではこっちのほうが知られてるっぽい? スクリプト名が分かりやすいのかしら…。
◎ GAPの他の操作についてメモ。 :
昔は、GAPのメニューを日本語にしてくれるファイルがあったような記憶もあるのだけど…。
ちなみに、GAPのコマンドはUndoがほとんど効かない・元に戻すことができないので、何かクリティカルな変更をする場合は、frame_*.xcf をバックアップしてから行うべし。
もしかして、Frames Modify 使って、可視レイヤー統合もできるのかな? 試してみたら、できたっぽい。Function → Merge Layers → どれかしらを選んで、Layer Selection は All visible を選択。
Frames Convert を使えば、フレームを連番pngで保存できる。拡張子に「.png」を入力して、Flatten のチェックを外せば、アルファチャンネルを残したまま連番pngになった。ただし、各フレームが複数レイヤーを含んでいると、1枚保存するたびに「可視レイヤー統合するか、画像統合するか?」と尋ねてくるので鬱陶しい、というか面倒臭い。100フレームあったら、100回尋ねてくる予感。
メニュー項目(Video → xxxx) | 処理内容 |
---|---|
Split Image to Frames | 一つの画像(多数のレイヤーを含む)を、多数のフレーム(frame_*.xcf)にする。 |
Frames to Image | 多数のフレーム(frame_*.xcf)を、一つの画像(多数のレイヤーを含む)にする。 |
VCR Navigator | 動画テスト再生。開いたウインドウの下のほうにある再生ボタンをクリックすれば再生確認ができる。ただし、デフォルトではサムネイル画像を使って再生するので画像が荒い。チェックボックスにチェックを入れれば、フルサイズ画像で再生もできるけど、めっちゃ重い。 |
Delete Frames | 現在開いているフレームから、指定フレームまで、フレームを削除する。 |
Duplicate Frames | フレームを増やす・複製する。何も描いてないフレームを用意してから、そのフレームを複製すれば、好きなだけフレームが作れる。 |
Frames Layer Delete | 指定範囲のフレームに対して、特定レイヤーだけを削除する。 |
Frames Flatten | 指定範囲のフレームに対して「画像統合」をする。アルファチャンネルが無くなって、透明部分は背景色になる。 |
Frames Modify | 指定範囲のフレームに対して、レイヤーマスクをつけたり、選択範囲をアレしたり…色々できるっぽい。Functionボタンをクリックして処理を選べる。 |
Frames Convert | フレーム(連番xcf)を、別フォーマットの連番画像で保存。 |
Split Video into Frames | 動画ファイル(.mpg等)を読み込み。 |
もしかして、Frames Modify 使って、可視レイヤー統合もできるのかな? 試してみたら、できたっぽい。Function → Merge Layers → どれかしらを選んで、Layer Selection は All visible を選択。
Frames Convert を使えば、フレームを連番pngで保存できる。拡張子に「.png」を入力して、Flatten のチェックを外せば、アルファチャンネルを残したまま連番pngになった。ただし、各フレームが複数レイヤーを含んでいると、1枚保存するたびに「可視レイヤー統合するか、画像統合するか?」と尋ねてくるので鬱陶しい、というか面倒臭い。100フレームあったら、100回尋ねてくる予感。
◎ GAPで動画ファイルの読み込み。 :
_How to use Gimp Gap (Gimp Animation Package) - YouTube
を眺めると、動画ファイルをいきなり読み込んで、GIFアニメに変換するところまで、GIMP + GAPだけで実現できているらしい。Video → Split Video into Frames → Extract Videorange を選ぶ模様。
試してみたら、巨大なファイルサイズのaviは無理だったけど(動画の解析ができない)、数MBのaviなら、たしかに読み込めた。
まあ、動画からGIFアニメに変換したいなら、専用ソフト使ったほうが速いでしょうけど。それでも一応、GIMP + GAP で、動画をいきなり読むことも(状況によっては)可能と分かったから良し。
試してみたら、巨大なファイルサイズのaviは無理だったけど(動画の解析ができない)、数MBのaviなら、たしかに読み込めた。
まあ、動画からGIFアニメに変換したいなら、専用ソフト使ったほうが速いでしょうけど。それでも一応、GIMP + GAP で、動画をいきなり読むことも(状況によっては)可能と分かったから良し。
◎ 簡単なデータで試したらGIMPがフリーズしなかった。 :
Frames to Image のオプション指定を変えたら GIMPが固まらずに済むのかな、と気になったので、簡単なデータを作って試してみたのだけど。複数のレイヤーがあっても、固まらずに処理が終わった。どうやら、必ず固まるというわけではなくて、固まる場合と固まらない場合・何か不具合が起きる条件があるらしい。
[ ツッコむ ]
#3 [cg_tools][unity][dxruby] ループする火の玉画像を作成
GIMP + GAP でどうにかできないかとアレコレ試してたけど。結局、ImageMagick でなんとかしてしまったり。
案としては、ループしてない連番画像のうち、最後の数フレームを、最初の数フレームに、割合を変えながら合成したら、ループしてるように見えないかなと。
とりあえず、ループしてない元画像はこんな感じ。20フレーム。
最後のフレームから最初のフレームに変わる際に、「ガクッ」となってる。
これを、最後の4フレーム分だけ、最初の4フレームに合成して、16フレームにした。結果はこんな感じ。
違いが分かる…かなあ…。どうなんだろう。それなりに改善できたように思っているのだけど。
合成には、以下のようなbatファイルを書いた。実験用なので、べた書きだけど。
_comp.bat
最初は、合成する際の2つの画像を、合成する際の割合? アルファ値?を、20:80 とか 40:60 等にして試したのだけど。それだと、合成してるフレームだけ、全体的に半透明になってしまって、よろしくなくて。なので、片方を下地画像として、その上にもう片方の画像をうっすら載せていく、てな感じの合成をしてみたところ、合成してるフレームも不透明度が維持できたように見えた。ただ、元々半透明だったところが濃くなったりもして、完璧な結果が得られたわけでもなく。
ImageMagick (composite) に与えるパラメータについては、 _Compose -- IM v6 Examples - Dissolve One Image Over Another を参考にした。もしかして、dissolve じゃなくて、blend を与えたほうがいいのだろうか。
案としては、ループしてない連番画像のうち、最後の数フレームを、最初の数フレームに、割合を変えながら合成したら、ループしてるように見えないかなと。
とりあえず、ループしてない元画像はこんな感じ。20フレーム。
これを、最後の4フレーム分だけ、最初の4フレームに合成して、16フレームにした。結果はこんな感じ。
合成には、以下のようなbatファイルを書いた。実験用なので、べた書きだけど。
_comp.bat
@echo off rem ImageMagickを使って、ループしてない連番画像をループアニメにしてみる rem ImageMagickのフォルダパスを指定 set IMPATH=C:\Prog\ImageMagick-6.8.7-Q16 rem 元画像フォルダ set SRC=src rem 出力フォルダ set DST=dst rem 連番画像の終わりの方を、最初のほうに合成する @echo on %IMPATH%\composite -dissolve 30 %SRC%\0001.png %SRC%\0017.png -alpha Set %DST%\0001.png %IMPATH%\composite -dissolve 60 %SRC%\0002.png %SRC%\0018.png -alpha Set %DST%\0002.png %IMPATH%\composite -dissolve 60 %SRC%\0019.png %SRC%\0003.png -alpha Set %DST%\0003.png %IMPATH%\composite -dissolve 30 %SRC%\0020.png %SRC%\0004.png -alpha Set %DST%\0004.png @echo off copy /Y %SRC%\0005.png %DST% copy /Y %SRC%\0006.png %DST% copy /Y %SRC%\0007.png %DST% copy /Y %SRC%\0008.png %DST% copy /Y %SRC%\0009.png %DST% copy /Y %SRC%\0010.png %DST% copy /Y %SRC%\0011.png %DST% copy /Y %SRC%\0012.png %DST% copy /Y %SRC%\0013.png %DST% copy /Y %SRC%\0014.png %DST% copy /Y %SRC%\0015.png %DST% copy /Y %SRC%\0016.png %DST% :ENDsrc\ 以下に元画像20フレーム分の連番画像を入れといて、dst\ 以下に出力する、みたいな。
最初は、合成する際の2つの画像を、合成する際の割合? アルファ値?を、20:80 とか 40:60 等にして試したのだけど。それだと、合成してるフレームだけ、全体的に半透明になってしまって、よろしくなくて。なので、片方を下地画像として、その上にもう片方の画像をうっすら載せていく、てな感じの合成をしてみたところ、合成してるフレームも不透明度が維持できたように見えた。ただ、元々半透明だったところが濃くなったりもして、完璧な結果が得られたわけでもなく。
ImageMagick (composite) に与えるパラメータについては、 _Compose -- IM v6 Examples - Dissolve One Image Over Another を参考にした。もしかして、dissolve じゃなくて、blend を与えたほうがいいのだろうか。
◎ 成果物を置いときます。 :
[ ツッコむ ]
#4 [web][windows] IEって、まだGIFアニメの再生速度がおかしいの?
この手のGIFアニメを載せる際、昔は、「IEだけが0.06秒より少ないウェイト値(ディレイ)を無視しちゃうぞ」って話があったので、仕方なく今でも0.06秒のウェイト値を入れてたりするのですが。
今も、IEって、そのあたりの仕様は、そのままなのかな…? IE11等も、未だに進歩してないのですかねえ…?
そのへん気になって、巷の検証用ページを、Windows7 + IE11 で確認してみたのだけど。さすがに IE11 は、0.06秒より少ないウェイト値も ―― 0.05秒〜0.02秒までのウェイト値を、ちゃんと反映してるようで。
まあ、0.01秒のウェイト値は、IE11も、Firefoxも、反映できてないみたいだけど。
さて、こうなると、IEのシェアが今現在どうなっているかで、このあたりの対応も変えたほうが良さそうだなと。しかし、どのバージョンから改善されたのかな。ググってみても、そのあたりの情報に遭遇しないのですが…。IE9,IE10,IE11の変更点について、MSのサイトを眺めても書いてないし…。修正・改善してくれるのはありがたいのだけど、黙ったまま、だとしたら、それはそれで困る…。
今も、IEって、そのあたりの仕様は、そのままなのかな…? IE11等も、未だに進歩してないのですかねえ…?
そのへん気になって、巷の検証用ページを、Windows7 + IE11 で確認してみたのだけど。さすがに IE11 は、0.06秒より少ないウェイト値も ―― 0.05秒〜0.02秒までのウェイト値を、ちゃんと反映してるようで。
まあ、0.01秒のウェイト値は、IE11も、Firefoxも、反映できてないみたいだけど。
さて、こうなると、IEのシェアが今現在どうなっているかで、このあたりの対応も変えたほうが良さそうだなと。しかし、どのバージョンから改善されたのかな。ググってみても、そのあたりの情報に遭遇しないのですが…。IE9,IE10,IE11の変更点について、MSのサイトを眺めても書いてないし…。修正・改善してくれるのはありがたいのだけど、黙ったまま、だとしたら、それはそれで困る…。
[ ツッコむ ]
以上、1 日分です。