VRoid Studioで撮影した背景透過画像からGIFアニメを作ろうとしたら苦労した話

※本サイトはアフィリエイト広告を利用しています。

VRoid Studioでスクショを取れる機能があるので、それでYMM4で使う瞬き・口パクできる動く立ち絵は用意できたのですが、

同じノリで歩かせたりリアクションさせたりを一時停止しながらスクショ取ったパラパラ漫画でGIF化すればいいんじゃないかとやってみたところ、

結構大変だったので誰かの役に立つかもしれないので記事に残しておきます。

VRoid Studioで撮影した背景透過のPNGの連番画像から、本記事のコードで作成したアニメーション

うまくいかなかったGIF作戦

「背景透過で連番に保存してあるPNG画像をGIFに変換するpythonコードかいて」的な依頼を、chatGPTとかGeminiとかMS Copilotに相談したところ、
皆ほぼ一様にPillow使ってこんな感じでできまっせと、コードを書いてくれましたが、

背景が白塗りにされちゃうか、エラーで出力できないか、真っ黒で何も見えないかって感じで背景透過のアニメーションがつくれませんでした。

ValueError: invalid palette size

事前準備

python, pillow, imageioのインストール

pythonは割愛します。わからない人はchatGPTとかにでも聞けばわかるかと

Windowsなら適当なフォルダ右クリックから「ターミナルで開く」でPowerShell(かコマンドプロンプト)が開くと思うので、そこで

pip install pillow
pip install imageio

を実行するとダウンロードしてインストールされます

よっしー
よっしー

すでにしている方、numpyなど依存関係もインストールされる方などで表記は色々かわりますがエラーぽい雰囲気でなければたぶんOK

pythonコード

ということで、あきらめて、webp形式ならいけるか?ってのをためしたところ、YMM4に読み込んで再生可能かつ背景透過のアニメーションができました。

from PIL import Image
import imageio
import glob

# 合成したいGIFファイルのパスを指定
image_paths = sorted(glob.glob("./歩き.*.png"))
output_path = 'animation.webp'
duration=300

images = []
for image_path in image_paths:
image = Image.open(image_path)
images.append(image)

with imageio.get_writer(output_path, mode='I', duration=duration) as writer:
for image in images:
writer.append_data(image)

↑で「歩き.1.png」「歩き.2.png」とかって連番を想定しています。
10超えると1,10,2,3,4の順番になっちゃうのでご注意ください。

あと、durationが1枚の画像表示する時間の長さ(ミリ秒)です。

よっしー
よっしー

GeminiだかCopilotに質問したら秒単位だといわれたけど、なんかくっそ速すぎて
(。´・ω・)ん?って調べたところミリ秒単位でした。

使い方補足

いちおう、pythonの使い方はわかっている前提ですが、
上のコードをpng2webp.pyみたいなファイルに保存して、そのフォルダでPowerShellなりコマンドプロンプトでかきコマンドを実行します。

python .\png2webp.py

コメント

タイトルとURLをコピーしました