2023/05/25(木) [n年前の日記]
#1 [gimp] GIMPでモーフィングをしてみる手順をメモ
無料で利用できる画像編集ソフト GIMP を使って、モーフィング処理ができそうかどうか試してみたので、作業手順をメモ。
モーフィングと言うのは、2枚の異なる画像から、その中間の画像を生成する処理、という説明でいいのだろうか…?
_モーフィング - Wikipedia
GIMPの標準機能だけではモーフィングはできないけれど、以下の組み合わせならモーフィングが使える。
とりあえず今回は、GIMP 2.10.34 Portable + G'MIC 3.2.4 でモーフィングができるか試してみた。
環境は、Windows10 x64 22H2 + GIMP 2.10.34 Portable。CPU は AMD Ryzen 5 5600X。
モーフィングと言うのは、2枚の異なる画像から、その中間の画像を生成する処理、という説明でいいのだろうか…?
_モーフィング - Wikipedia
GIMPの標準機能だけではモーフィングはできないけれど、以下の組み合わせならモーフィングが使える。
- GIMP + G'MIC
- GIMP + GAP (GIMP Animation Package)
とりあえず今回は、GIMP 2.10.34 Portable + G'MIC 3.2.4 でモーフィングができるか試してみた。
環境は、Windows10 x64 22H2 + GIMP 2.10.34 Portable。CPU は AMD Ryzen 5 5600X。
◎ 必要なソフト :
GIMP と G'MIC が必要。
_GIMP Portable (image editor) | PortableApps.com
_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Download
_GIMP Portable (image editor) | PortableApps.com
_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Download
◎ 作業手順 :
まず、元になる2枚の画像を、レイヤーとして読み込んでおく。
フィルター → G'MIC-Qt を選択。
Deformations の中の、Morph [Interactive] を選択する。
この画面で、中間画像を何枚作るか指定できる。Number of Frames で、必要な枚数を指定。
また、この画面ではショートカットキーが説明されてる。一応、以下に引用しておく。OCRで読み取った結果なので、綴りが間違ってるかもしれんけど…。
基本的にはマウス操作で、制御点(キーポイント)の追加/移動/削除をしていく模様。
念のため、ざっくりと日本語でもメモしておく。
さておき。「OK」ボタンをクリックすると、2つのウインドウが表示される。
作業中は、G'MIC-Qtのウインドウの下のほうで、緑色の処理進行バーっぽいものがずっとアニメーションしてる。おそらく、「今現在 G'MIC が動いてますよ」と伝えてくれているのだと思う。
ソース/ターゲットウインドウは、ウインドウサイズを変更することもできるので、作業しやすい大きさに変更することを推奨。わざわざ小さいウインドウのままにしてチマチマと作業する必要はないです。
さて、ソース/ターゲットウインドウ上で、制御点(キーポイント)を追加していく。
この操作が、ちょっと説明しづらいのだけど…。
まあ、動画を見れば、なんとなくわかるだろうか…? 最初は戸惑うだろうけど、実際にやってみるとサクサク作業できるので、悪くない仕様だよなと…。
また、制御点を追加していくと、中間画像表示ウインドウ上の見た目がどんどん整っていくことが、上の動画でも分かるかと。
ちなみに、制御点を追加するたび、中間画像を全部生成し直しているようで…。制御点の数が増えてくると、目に見えて反応が遅くなってくる…。制御点を1つ追加するだけで数秒待たされる感じ…。
制御点を配置し終わったら、ソース/ターゲットウインドウの右上の閉じるボタンをクリックして、ウインドウを閉じる。すると、G'MICが中間画像を生成して、中間画像をGIMPのレイヤーとして追加してくれる。
この時、十数秒〜数十秒ほど待たされてしまうけど、ずっと計算処理をしている最中なので、フリーズしていると勘違いしないように。
GIMP上で、1フレーム=1レイヤーとして扱われている画像は、アニメーションを再生して様子を見ることができる。フィルター → アニメーション → 再生、を選択。
アニメーション再生ウインドウが開く。左上の再生ボタン(右向きの三角)をクリックすれば、再生される。
再生fpsを変更した場合は、上のほうの再読み込みボタンをクリックしないと反映されないので注意。
後は、アニメgifとして保存してもいいし、各レイヤーをエクスポートして連番画像にして動画編集ソフトに読み込んで使ってもいい。
ちなみに、各レイヤーをエクスポートできるプラグインは以下。何故か最初の一発目のpng保存でエラーが出て、再チャレンジすると正常にpng保存できるあたりが気になるけど…。
_Releases - kamilburda/gimp-export-layers
そんな感じで出来上がったアニメgifが以下になります。
頭のてっぺんのあたり、制御点の置き方を失敗している気がする…。そもそもこの元画像が、この手の処理のサンプル素材としては良くない気も…。でもまあ、これでモーフィングができることぐらいは分かるかなと。
フィルター → G'MIC-Qt を選択。
Deformations の中の、Morph [Interactive] を選択する。
この画面で、中間画像を何枚作るか指定できる。Number of Frames で、必要な枚数を指定。
また、この画面ではショートカットキーが説明されてる。一応、以下に引用しておく。OCRで読み取った結果なので、綴りが間違ってるかもしれんけど…。
Instructions: Use mouse buttons to add/move/remove correspondence keypoints over the interactive window that will appear, in order to create the morphing. Source/target window: - Left mouse button: Add new keypoint on current image and move it on the other one. - Right mouse button: Add/move keypoint on current image. - Key DELETE or middle mouse button: Delete keypoint. - Key SPACE or mouse wheel: Toggle source/target. In-between window: - Mouse wheel: Change morphing time, from 0 to 1. - Left mouse button: Reset morphing time to 0.5. Both windows: - Key TAB: Change keypoint radius. - Key ENTER Play/stop in-between animation. - Key R Reset keypoints. - Key K: Show/hide keypoints. - Keys ESC or Q: Process fullres and exit.
基本的にはマウス操作で、制御点(キーポイント)の追加/移動/削除をしていく模様。
念のため、ざっくりと日本語でもメモしておく。
ソース/ターゲットウインドウ : * 左ボタン : キーポイント追加、かつ、別画像に表示変更。 * 右ボタン : 現在画像上で、キーポイントの移動、もしくは追加。 * 中ボタン / Deleteキー : キーポイント削除。 * マウスホイール回転 / SPACEキー : ソースとターゲットの表示切替。 中間アニメーション表示ウインドウ : * マウスホイール : モーフィングタイム(現在表示中のフレーム)を、0から1の間で変更。 * 左ボタン : モーフィングタイムを0.5にリセット。 両方のウインドウ : * TABキー : キーポイントの半径(大きさ)を変更。 * Enterキー : 中間アニメーションの再生/停止。 * Rキー : キーポイントをリセット。全消去。 * Kキー : キーポイントの表示/非表示。 * Esc / Qキー : 処理をして終了。
さておき。「OK」ボタンをクリックすると、2つのウインドウが表示される。
- 1つが、ソース/ターゲットウインドウ。
- もう1つが、中間画像がどうなるかアニメーションで表示されるウインドウ。
作業中は、G'MIC-Qtのウインドウの下のほうで、緑色の処理進行バーっぽいものがずっとアニメーションしてる。おそらく、「今現在 G'MIC が動いてますよ」と伝えてくれているのだと思う。
ソース/ターゲットウインドウは、ウインドウサイズを変更することもできるので、作業しやすい大きさに変更することを推奨。わざわざ小さいウインドウのままにしてチマチマと作業する必要はないです。
さて、ソース/ターゲットウインドウ上で、制御点(キーポイント)を追加していく。
この操作が、ちょっと説明しづらいのだけど…。
- マウスの左ボタンを押した段階で、その位置に制御点が作られて、
- それと同時に、もう一つの画像に表示が切り替わるので、
- マウスの左ボタンを離さずにそのままドラッグして、
- 目標の位置に来たら、そこでようやく左ボタンを離す、
まあ、動画を見れば、なんとなくわかるだろうか…? 最初は戸惑うだろうけど、実際にやってみるとサクサク作業できるので、悪くない仕様だよなと…。
また、制御点を追加していくと、中間画像表示ウインドウ上の見た目がどんどん整っていくことが、上の動画でも分かるかと。
- マウスホイール回転、もしくは SPACEキーで、2枚の画像の表示を切り替えて様子を見たり。
- 右ボタンで、制御点の位置を変更したり。
- Enterキーを押して、中間画像をアニメーション表示して具合を見たり。
ちなみに、制御点を追加するたび、中間画像を全部生成し直しているようで…。制御点の数が増えてくると、目に見えて反応が遅くなってくる…。制御点を1つ追加するだけで数秒待たされる感じ…。
制御点を配置し終わったら、ソース/ターゲットウインドウの右上の閉じるボタンをクリックして、ウインドウを閉じる。すると、G'MICが中間画像を生成して、中間画像をGIMPのレイヤーとして追加してくれる。
この時、十数秒〜数十秒ほど待たされてしまうけど、ずっと計算処理をしている最中なので、フリーズしていると勘違いしないように。
GIMP上で、1フレーム=1レイヤーとして扱われている画像は、アニメーションを再生して様子を見ることができる。フィルター → アニメーション → 再生、を選択。
アニメーション再生ウインドウが開く。左上の再生ボタン(右向きの三角)をクリックすれば、再生される。
再生fpsを変更した場合は、上のほうの再読み込みボタンをクリックしないと反映されないので注意。
後は、アニメgifとして保存してもいいし、各レイヤーをエクスポートして連番画像にして動画編集ソフトに読み込んで使ってもいい。
ちなみに、各レイヤーをエクスポートできるプラグインは以下。何故か最初の一発目のpng保存でエラーが出て、再チャレンジすると正常にpng保存できるあたりが気になるけど…。
_Releases - kamilburda/gimp-export-layers
そんな感じで出来上がったアニメgifが以下になります。
頭のてっぺんのあたり、制御点の置き方を失敗している気がする…。そもそもこの元画像が、この手の処理のサンプル素材としては良くない気も…。でもまあ、これでモーフィングができることぐらいは分かるかなと。
◎ GIMPの減色処理を疑ってしまった :
GIMP 2.10.34 の減色処理というか、インデックスカラーへの変換処理が、なんだかおかしいような…? どうして一定間隔で白い点が入るの? ちなみに、GIMP 2.8.22 Portable でインデックスカラーに変換してみても同じ結果になったので、GIMP 2.10 でエンバグしてるわけではなさそう。まあ、元々 GIMP の減色処理は品質が非常に悪いというのが定評なのだけど…。
試しに、GIMP から各レイヤーをpngでエクスポートして、ffmpeg でアニメgifにしてみた。一旦パレット画像(palette.png)を抽出してから、そのパレット画像を元に減色してアニメgifにする方法を試している。
GIMPで生成した版と比べると、アルファチャンネルに対してディザをかけられなくて、しきい値で2値化されてしまうのがアレだけど、それ以外はGIMPの処理結果より全然マシに見える。
以下のページが参考になった。ありがたや。
_ffmpeg で 256色を最適化する palettegen, paletteuse | ニコラボ
_ffmpegでGIFアニメを作る - 脳内メモ++
と、ここまで書いて気が付いた。もしかして、GIMPのソレは透過部分にディザをかけているのがいかんのではないか。ffmpeg と同様に、アルファチャンネルをしきい値で2値化したら違う結果にならないか…? 試してみた。
一定間隔で点々が入ってない。つまり元画像のアルファチャンネルに微妙な値が入ってしまっていたのが原因だった模様。GIMPの減色処理の品質云々は、冤罪だった…。
試しに、GIMP から各レイヤーをpngでエクスポートして、ffmpeg でアニメgifにしてみた。一旦パレット画像(palette.png)を抽出してから、そのパレット画像を元に減色してアニメgifにする方法を試している。
ffmpeg -i export_layers\%04d.png -vf palettegen=max_colors=256:reserve_transparent=1:transparency_color=lime:stats_mode=full -update 1 -frames:v 1 palette.png -y ffmpeg -f image2 -framerate 12 -r 12 -i export_layers\%04d.png -i palette.png -filter_complex paletteuse=dither=bayer:bayer_scale=2 -r 12 gimp_gmic_morph_test_by_ffmpeg.gif -y
GIMPで生成した版と比べると、アルファチャンネルに対してディザをかけられなくて、しきい値で2値化されてしまうのがアレだけど、それ以外はGIMPの処理結果より全然マシに見える。
以下のページが参考になった。ありがたや。
_ffmpeg で 256色を最適化する palettegen, paletteuse | ニコラボ
_ffmpegでGIFアニメを作る - 脳内メモ++
と、ここまで書いて気が付いた。もしかして、GIMPのソレは透過部分にディザをかけているのがいかんのではないか。ffmpeg と同様に、アルファチャンネルをしきい値で2値化したら違う結果にならないか…? 試してみた。
一定間隔で点々が入ってない。つまり元画像のアルファチャンネルに微妙な値が入ってしまっていたのが原因だった模様。GIMPの減色処理の品質云々は、冤罪だった…。
◎ GAPのモーフィングについて :
GIMP + G'MIC だけではなく、GIMP + GAP でもモーフィングはできるのだけど…。
- 作業ウインドウ上で画像の拡大表示ができない。Windowsの拡大鏡等を併用しないとツライ。
- 左右に画像が表示されていて、その間をマウスカーソルが行き来することになる。
- 結果をプレビュー再生できない。
◎ フレーム補間とモーフィングについて :
先日利用したフレーム補間ツール FILM と、今回利用したモーフィングについて、違いは何だろうと考えてみたのだけど…。
フレーム補間は、制御点を人間様が指定しなくても済むのは便利だなと。自動でイイ感じにやってくれる。その代わり、2枚の画像の変化量が大きい時は対応できなくて、中間画像が崩れてしまったりする。
モーフィングは、人間様が制御点を一々指定しないといけないのがツラい。その代わり、2枚の画像の変化量が大きくても、人間様の指定次第で、中間画像の破綻を少なくすることができそう。
画像の変化が少ない時はフレーム補間で済むだろうし…。変化が大きかったり、あるいは、こちらの思った通りにちゃんと動かしたかったら、作業時間はかかるけどモーフィングで、という感じになるのだろうか…?
フレーム補間は、制御点を人間様が指定しなくても済むのは便利だなと。自動でイイ感じにやってくれる。その代わり、2枚の画像の変化量が大きい時は対応できなくて、中間画像が崩れてしまったりする。
モーフィングは、人間様が制御点を一々指定しないといけないのがツラい。その代わり、2枚の画像の変化量が大きくても、人間様の指定次第で、中間画像の破綻を少なくすることができそう。
画像の変化が少ない時はフレーム補間で済むだろうし…。変化が大きかったり、あるいは、こちらの思った通りにちゃんと動かしたかったら、作業時間はかかるけどモーフィングで、という感じになるのだろうか…?
[ ツッコむ ]
#2 [gimp] GIMP 2.10 64bit Windows版でGAPが使えると知った
無料で利用できる画像編集ソフト、GIMP には、かつて、GAP (GIMP Animation Package)と呼ばれる、動画編集を可能にするプラグイン集が存在していた。まあ、動画編集と言っても、連番の.xcfファイルを作成すると1ファイルを1フレームとして扱えますよ、みたいな感じなのだけど…。
Linux版のGIMPはもちろんのこと、Windows版のGIMPでも、GIMP 2.6、GIMP 2.8 の頃はGAPが使えたのだけど。GIMP 2.10 になったらGAPが使えない状態になってしまって…。どうしても GAP を使いたいなら GIMP 2.8 や GIMP 2.6 を使いましょう、GIMP Portable版を使えば異なるバージョンを共存することもできるし ―― そんな状況になっていた。
しかし、今回ググってみたら、Windows版 GIMP 2.10 用のGAPを公開してくれている方が居ると、今頃になって知った。
_GimpScripts: Gimp-GAP Win_64bit
2020年頃から公開されていたらしい…。GAP は古いGIMPじゃないと使えないものと思い込んで、全然チェックしてなかった…。
GIMP 2.10.34 Portable に導入して少し動作確認してみたけど、ある程度は動いてるように見えた。全部の機能を試してみたわけではないけれど、少なくとも以下の機能は動いてくれた。
もっとも、このGAP、1フレーム移動する度に、現在のファイルを保存してから別ファイルを開き直すわけで…。ストレージに何度も何度もアクセスすることになるので、サクサク作業できる状況には程遠い面もあるのだけど。
それでも、現行版のGIMPで連番画像の編集が可能になる点はありがたいなと…。
Linux版のGIMPはもちろんのこと、Windows版のGIMPでも、GIMP 2.6、GIMP 2.8 の頃はGAPが使えたのだけど。GIMP 2.10 になったらGAPが使えない状態になってしまって…。どうしても GAP を使いたいなら GIMP 2.8 や GIMP 2.6 を使いましょう、GIMP Portable版を使えば異なるバージョンを共存することもできるし ―― そんな状況になっていた。
しかし、今回ググってみたら、Windows版 GIMP 2.10 用のGAPを公開してくれている方が居ると、今頃になって知った。
_GimpScripts: Gimp-GAP Win_64bit
2020年頃から公開されていたらしい…。GAP は古いGIMPじゃないと使えないものと思い込んで、全然チェックしてなかった…。
GIMP 2.10.34 Portable に導入して少し動作確認してみたけど、ある程度は動いてるように見えた。全部の機能を試してみたわけではないけれど、少なくとも以下の機能は動いてくれた。
- Video → Duplcate Frames で、フレーム数(連番xcfのファイル数)を増やす。
- Video → Go to → Next Frame / Previous Frame で、次フレーム/前フレームに移動する。
- Video → VCR Navigator で、連番 xcf をサムネイル画像サイズでアニメーション再生。
- Video → Morphing → Morph で、モーフィング。
もっとも、このGAP、1フレーム移動する度に、現在のファイルを保存してから別ファイルを開き直すわけで…。ストレージに何度も何度もアクセスすることになるので、サクサク作業できる状況には程遠い面もあるのだけど。
それでも、現行版のGIMPで連番画像の編集が可能になる点はありがたいなと…。
◎ 導入の仕方 :
一応、導入の仕方もメモしておく。
Gimp_GAP Win_64bit.zip をDLして解凍すると、中には以下のディレクトリが入ってる。
正しい場所に各ファイルがコピーできていれば、GIMP起動時に各プラグインが読み込まれて、メニューに「Video」という項目が増える。以下のように、使える機能が大量に増える。
ただ、言語ファイルは反映されてない感じがする…。どこも日本語表示にはならなかった。
Gimp_GAP Win_64bit.zip をDLして解凍すると、中には以下のディレクトリが入ってる。
bin plug-ins scripts share
- bin/ の中に入ってる .dll ファイルは、GIMPインストールフォルダ内の bin/ にコピー。
- plug-ins/gap_*.exe は、ユーザープロファイルフォルダ内の plug-ins/ 以下にコピー。もしくは、任意のフォルダに入れておいて、GIMPの設定で、プラグインフォルダとして追加してもいい。そのほうが、ファイルがグチャグチャにならなくて管理が楽かもしれない。
- scripts/*.scm は、これもユーザープロファイルフォルダ内の scripts/ 以下にコピー。
- share/ 内には各言語への対応ファイルが入っている。GIMPインストールフォルダ/share/locale/ja/LC_MESSAGES/ 以下に、gimp20-gap.mo をコピーする。
正しい場所に各ファイルがコピーできていれば、GIMP起動時に各プラグインが読み込まれて、メニューに「Video」という項目が増える。以下のように、使える機能が大量に増える。
ただ、言語ファイルは反映されてない感じがする…。どこも日本語表示にはならなかった。
◎ 使い方 :
簡単な使い方をメモ。
まずは、何かしら画像を新規作成して、0000.xcf というファイル名で保存。これが0フレーム目。
Video → Duplcate Frames を選べば、現在の画像(レイヤー構成)で、フレーム数(連番の.xcf)を増やせる。N times に増やしたいフレーム数を指定してOKをクリックすれば、指定した数のフレーム = .xcf が自動で作成される。例えば N times に16を指定すれば、0001.xcf - 0016.xcf が新規作成される。
Video → Go to → Next Frame / Previous Frame で、次のフレーム/前のフレームに移動できる。何かしら編集して、Next Frame / Previous Frame をすれば、今まで開いてた画像ファイル(.xcf)が上書き保存されて、次/前の .xcf が開かれる。
ちなみに、Next Frame に「.」を、Previous Frame に「,」を、ショートカットキーとして割り当てると、前後のフレームに移動するのが楽になる。
全フレームをアニメーションとして保存したい時は、Video → Frames to Image を選択。1レイヤーを1フレームとして扱う別画像を新規作成してくれる。
この状態になってしまえば、アニメgifとして保存することもできるし、各レイヤーをエクスポートして、別の動画編集ソフトで連番画像として読み込んで扱うこともできる。
そんな感じで作ったアニメが以下になります。
この程度のアニメでは何が便利なのか分らんだろうけど…。とりあえず、GIMP 2.10 でも GAP が使えた証明にはなるかなと…。
まずは、何かしら画像を新規作成して、0000.xcf というファイル名で保存。これが0フレーム目。
Video → Duplcate Frames を選べば、現在の画像(レイヤー構成)で、フレーム数(連番の.xcf)を増やせる。N times に増やしたいフレーム数を指定してOKをクリックすれば、指定した数のフレーム = .xcf が自動で作成される。例えば N times に16を指定すれば、0001.xcf - 0016.xcf が新規作成される。
Video → Go to → Next Frame / Previous Frame で、次のフレーム/前のフレームに移動できる。何かしら編集して、Next Frame / Previous Frame をすれば、今まで開いてた画像ファイル(.xcf)が上書き保存されて、次/前の .xcf が開かれる。
ちなみに、Next Frame に「.」を、Previous Frame に「,」を、ショートカットキーとして割り当てると、前後のフレームに移動するのが楽になる。
全フレームをアニメーションとして保存したい時は、Video → Frames to Image を選択。1レイヤーを1フレームとして扱う別画像を新規作成してくれる。
この状態になってしまえば、アニメgifとして保存することもできるし、各レイヤーをエクスポートして、別の動画編集ソフトで連番画像として読み込んで扱うこともできる。
そんな感じで作ったアニメが以下になります。
この程度のアニメでは何が便利なのか分らんだろうけど…。とりあえず、GIMP 2.10 でも GAP が使えた証明にはなるかなと…。
◎ 余談 :
ガシガシ描いてアニメーションを作りたいなら、Krita を使ったほうが良さそうな気もする。Krita なら、最初から標準機能としてアニメ作成機能を持っているので…。アニメを作る際には必須とも言えるオニオンスキン機能も使えるし。
[ ツッコむ ]
以上、1 日分です。