実況動画制作を自動化したい① ~GIMP編~

面倒くさい。ホントに面倒くさいんですよ。
動画作るの。。。
いつもお世話になっております。

 

動画制作が面倒くさすぎてどれだけ時間がかかっているのかざっくりまとめてみました。

f:id:YaliYalice:20210103202832p:plain

最速で8時間ですね。。。
これを週2は結構きついです。

どっか自動化できそうなところはないかと探しました。

f:id:YaliYalice:20210103203035p:plain

今回はNo.3の「素材用意」について自動化してみようと思います。
素材というのは、選出画面で使用してるこんなやつ↓です。

f:id:YaliYalice:20210117223758p:plain

ポケモンの画像と角が丸い四角形を組み合わせて作ります。
この画像はGIMPという画像編集ソフトで作っているのですが、GIMPスクリプト(python)で処理の自動化ができるようです。

ということで今回はGIMPの作業を自動化してみようと思います。

どんな作業をしているのか?

素材を作るときの手順はこんな感じです。

  1. ポケモンの画像をGIMPに読み込ませる
  2. 1で読み込ませた画像の大きさ・位置を調整する
  3. 角丸四角形からはみ出た部分をトリミングする
  4. 青色の角丸四角形と合わせてエクスポートする
  5. 黄色の角丸四角形と合わせてエクスポートする
  6. 2のポケモンの画像をグレースケール化する
  7. 黒色の角丸四角形と合わせてエクスポートする

赤字で書いているところが自動化できそうな作業です。

GIMPPythonで操作する

こちら(※1)を参考にGIMPPythonで操作してみました。

まずは、画像のトリミングです。
トリミングのGUI手順としては、、、
①角丸四角のレイヤーの不透明範囲を選択する
②選択範囲を反転する
ポケモンの画像を読み込ませたレイヤーをアクティブにする
④選択範囲を削除する

# 選択範囲を一度クリア
pdb.gimp_selection_none(image)
# 不透明範囲の選択
pdb.gimp_image_select_item(image, 0, base_layer)
# 選択範囲の反転
pdb.gimp_selection_invert(image)
# 選択範囲を削除
pdb.gimp_edit_clear(target_layer)
# 選択範囲をクリア
pdb.gimp_selection_none(image)

 ※ base_layer::角丸四角が描画されているレイヤー
   target_layer:ポケモンの画像を読み込ませたレイヤー

 

次に角丸四角形(青色、黄色、黒色)と合わせてpngファイルとしてエクスポートします。

GUI手順としては、、、
①合わせてエクスポートする角丸四角形(青色、黄色、黒色)のみ可視化する
②「ファイルタブ>名前を付けてエクスポートボタン」を実行

これだけなのですが、pythonでエクスポートする場合レイヤー単位でしかエクスポートできないようで、一工夫必要です。

# エクスポートするレイヤーの可視化
pdb.gimp_layer_set_visible(layer, TRUE)

# レイヤーを合体するため画像を複製する
new_image = pdb.gimp_image_duplicate(image)
# レイヤーを合体する
mergelayer = pdb.gimp_image_merge_visible_layers(new_image, CLIP_TO_IMAGE)

# エクスポートする
pdb.file_png_save2(new_image, mergelayer, filename, filename, 0,9,0,0,0,1,1,1,0)
# 複製したした画像を破棄
pdb.gimp_image_delete(new_image)
# レイヤーの不可視化
pdb.gimp_layer_set_visible(layer, FALSE)

レイヤーを合体するというのがポイントです。
レイヤーをそのまま合体させてしまうとエクスポートするたび角丸四角形を読み込ませないといけないので、いったん画像ごと複製しています。
複製した画像上でレイヤーを合体、合体したレイヤーをエクスポートという流れです。

 

最後にグレースケール化です。

GUI手順では、、、
①「色タブ>色相-彩度」を実行
②「彩度」パラメータを-100にする

pdb.gimp_drawable_hue_saturation(layer, 0, 0.0, 0.0, -100, 0.0)

これは非常に簡単で関数を一個呼ぶだけです。
引数は頭から、"描画領域(レイヤー指定でOK)", "調整する基準色", "色相", "輝度", "彩度", "オーバーラップ" です。
GUIの画面と見比べるとわかりやすいですね。

f:id:YaliYalice:20210114000659p:plain


ちなみに使用するライブラリ関数の仕様を知りたい場合は、
「ヘルプタブ>プロシージャ-ブラウザ」から調べることができます。
上記「gimp_drawable_hue_saturation」関数の仕様を調べるとこんな感じで出てきます。

f:id:YaliYalice:20210114001032p:plain
私はめっちゃ使いましたw

 

できたもの

f:id:YaliYalice:20210117223758p:plainf:id:YaliYalice:20210117223940p:plainf:id:YaliYalice:20210117223930p:plain

 

余談 

作ったPythonスクリプトデバッグするときは下記オプションをつけてGIMPを起動すると幸せになれます。

gimp-2.10.exe --console-messages

 デバッグログの出し方はこちら

gimp.message("ここにデバッグ用の文字列")

以上。。。

 

参考

※1

maywork.net