0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GPT Image 2.5スプライトシートの寸法ズレ検証とGIFアニメーション化手法

0
Posted at

結論

GPT Image 2.5を用いて生成したスプライトシートを均等なグリッドで分割してアニメーション化すると、キャラクターが水平方向に最大104ピクセル、垂直方向に最大48ピクセル揺れる現象が発生します。

このジッター(位置ズレによる揺れ)の原因はモデルの作画精度ではなく、生成される画像の寸法仕様およびフレーム配置の偏りに起因しています。検証によって判明した事実は以下の通りです。

  • 解像度の固定仕様: 要求解像度(1280x720など)に関わらず、GPT Image 2.5 FlareおよびSunburstの出力は1672x941ピクセルで返却されます。
  • 配置の非均等性: 水平方向のフレーム開始位置や各コマの描画幅が不均等であり、計算上の均等セル幅(418ピクセル)と実際の描画位置に最大51ピクセルの乖離が生じます。
  • 垂直解像度の端数: 941ピクセルを2行で割ると470.5ピクセルとなり、ピクセル単位での均等グリッド分割が数学的に成立しません。
  • ポーズの重複: 4x2の8フレーム構成で生成を要求した場合、下段のフレームは上段フレームと酷似した重複ポーズになります(MAD測定で4.95〜7.21)。

この問題を解決するためには、均等グリッドによる機械的な分割を避け、各フレームのバウンディングボックス(描画境界)を個別に検出して切り出し、接地位置(足元のベースライン)を基準に再配置する必要があります。

バウンディングボックス検出、足元アライメント、および共有64色パレットを用いたGIF生成を適用することで、垂直方向の揺れを0ピクセル、水平方向のズレを1ピクセルに抑え、ファイルサイズを611,294バイトから130,635バイトまで削減できることを確認しました。

検証環境と測定手法

本検証は2026年9月13日に実施しました。検証に使用した環境および条件は以下の通りです。

  • 生成プラットフォーム: GPT Image 2.5生成ツール
  • 使用モデル・チェックポイント:
    • GPT Image 2.5 Flare(OpenAIによる位置付け: 日常的な利用に適した高速チェックポイント)
    • GPT Image 2.5 Sunburst(OpenAIによる位置付け: 編集精度を最重視し、生成時間がより長いチェックポイント)
  • 入力設定: アスペクト比 16:9、解像度 1K指定、参照画像なし
  • 変換・測定ツール: Python画像解析スクリプト、ffmpeg

生成プロンプトには、レイアウトの均等性と背景の平坦性を指示する以下の英文を使用しました。

A 2D pixel-art sprite sheet of one character: a green-hooded courier with a brown satchel, side view facing right, running cycle, 4 frames in a single horizontal row, evenly spaced with equal margins on a flat mid-grey background, identical character height, proportions and colour palette in every frame, crisp 1px outlines, limited 16-colour palette, no text, no frame numbers, no grid lines, no drop shadows, no background scenery.

A four-frame pixel-art sprite sheet of a green-hooded courier running, generated with GPT Image 2.5 Flare

寸法測定ログ:要求サイズと出力サイズの乖離

WebUI上のコンポーザーでは解像度(1K/2K/4K)とアスペクト比(1:1、2:3、3:2、3:4、4:3、9:16、16:9、Auto)を選択可能です。16:9比率の1K指定(1280x720相当)で3回生成を行ったところ、得られた画像ファイルの寸法はすべて1672x941ピクセルでした。

この出力寸法に対して均等グリッドを適用した場合の幾何学的な不整合は以下の通りです。

  • 水平方向: 1672ピクセル ÷ 4列 = 418.0ピクセル(整数値)
  • 垂直方向: 941ピクセル ÷ 2行 = 470.5ピクセル(非整数値)

さらに、各フレームの描画開始位置(X座標)および描画幅をピクセル単位で測定した結果、モデル内部でのキャラクター配置は均等ではありませんでした。

フレーム開始位置と間隔の測定値

スプライトシート 1行目のフレーム開始X座標 開始位置の間隔(ピクセル) 均等グリッド時のセル幅 測定結果の差異
Flare(8フレーム) 145, 554, 928, 1295 409, 374, 367 418 第4フレームで51ピクセルの位置ズレが発生
Sunburst(8フレーム) 139, 539, 905, 1322 400, 366, 417 418 生成ごとに異なる間隔の偏りが発生
Flare(4フレーム) 113, 514, 908, 1305 401, 394, 397 418 8フレーム構成より安定するが非均等

キャラクター描画幅の測定値

単一シート内におけるキャラクター本体の描画幅(左右の外輪郭間の幅)にもばらつきが確認されました。

  • Flare(8フレーム構成): 最小167ピクセル 〜 最大206ピクセル(差: 39ピクセル)
  • Sunburst(8フレーム構成): 最小181ピクセル 〜 最大212ピクセル(差: 31ピクセル)
  • Flare(4フレーム構成): 最小227ピクセル 〜 最大229ピクセル(差: 2ピクセル)

均等な幅(418ピクセル)で機械的にクロップした場合、キャラクターのバウンディングボックスがセルの中央に位置しないため、セル中央を基準に再生すると大きな揺れが発生します。

アライメント検証:均等グリッド vs 検出ベースライン補正

ジッターを解消するための実装アルゴリズムは以下の通りです。

  1. バウンディングボックス検出: 背景色(グレー)と異なるピクセル領域を走査し、各フレームの描画境界(上下左右端)を特定します。
  2. トリミング: 検出した境界線に沿って、各スプライトを個別に切り出します。
  3. キャンバス配置: 共通サイズのキャンバスを用意し、各フレームを配置します。
  4. 接地合わせ(ベースライン整列): 水平方向はキャンバス中央にセンタリングし、垂直方向はキャラクターの足元の最下部ピクセル(ベースライン)をキャンバス底面に合わせます。

クロップ手法による位置ズレ(ドリフト)の比較

クロップ手法 水平方向のズレ 垂直方向のズレ アニメーションへの影響
均等4x2グリッド 104 px 48 px コマごとにキャラクターが上下左右に大きく揺れる
検出バウンディングボックス + 足元アライメント(8フレーム) 19 px 0 px 上下の揺れが完全に消失。水平ズレは歩幅動作のみ残存
検出バウンディングボックス + 足元アライメント(4フレーム) 1 px 0 px 完全な定位置でのループアニメーションが成立

Eight frames averaged into one image twice: the grid cut on the left is a blur of eight scattered characters, the aligned cut on the right is one sharp character with only the limbs blurred

8フレーム全体をオニオンスキン合成(平均化合成)した画像において、均等グリッド切り出し(左)では輪郭全体が激しくブレていますが、足元アライメントを適用した切り出し(右)では胴体と頭部が固定され、四肢の動きのみがブレとして現れていることが確認できます。

フレーム類似度測定:8フレーム指定時の重複問題

4x2の8フレーム構成を指定した場合、上段の4コマと下段の4コマでポーズの重複が発生します。画像間の類似性を評価するため、ピクセルごとの平均絶対差(Mean Absolute Difference: MAD)を測定しました。数値が小さいほど2枚の画像が同一であることを示します。

上段・下段対応フレームのMAD測定値

  • ペア1(フレーム3 vs フレーム7): 4.95 MAD
  • ペア2(フレーム2 vs フレーム6): 5.62 MAD
  • ペア3(フレーム4 vs フレーム8): 5.73 MAD
  • ペア4(フレーム1 vs フレーム5): 7.21 MAD

これに対し、明らかに異なるポーズ間のMAD測定値は最小でも12.36であり、重複ペアの数値はその半分以下でした。下段の各フレームは上段の対応するフレームの微細なバリエーションに留まっています。

また、Sunburstチェックポイントでは行内および行間でのポーズ重複が確認され、フレーム開始位置の間隔も400、366、417ピクセルと不規則でした。

単一水平行の4フレーム構成(1x4)を選択した場合、フレーム開始位置のばらつきは7ピクセル以内(401、394、397)、描画幅の差は2ピクセル(227〜229ピクセル)、アライメント後の水平ズレは1ピクセルに収まりました。

パレット最適化とGIFビルド

GPT Image 2.5から出力される生画像は約48,000色のカラー情報を含んでいます。GIF形式の最大色数は256色であるため、フレームごとに個別のパレットを生成すると背景色の量子化誤差によりフリッカー(チラつき)が発生します。

安定したGIFを生成するため、全フレームから共通の64色パレットを生成し、ディザリングなしで適用するffmpegコマンドを使用します。

パレット生成コマンド

ffmpeg -i frame-%02d.png -vf "palettegen=max_colors=64:stats_mode=diff" -update 1 palette.png

GIFビルドコマンド

ffmpeg -framerate 12 -i frame-%02d.png -i palette.png -lavfi "paletteuse=dither=none" run-cycle.gif

生成設定によるファイルサイズと品質の比較

生成条件 ファイルサイズ 特徴
均等グリッド分割 + 各フレーム個別パレット 611,294 bytes 位置ズレと背景チラつきが最大
アライメント補正済み + 各フレーム個別パレット 241,987 bytes 位置補正により差分が減少しサイズが約60%削減
アライメント補正済み + 共通64色パレット(8フレーム) 165,345 bytes 背景フリッカーが消失しサイズがさらに削減
4フレーム構成 + アライメント補正済み + 共通64色パレット 130,635 bytes 最適化された出力

A four-frame animated GIF of the pixel-art courier running in place with no bounce

フレーム位置を整列させ、全コマ共通のパレットを適用することで、ファイルサイズは初期状態の611,294バイトから130,635バイトまで圧縮されます。

代替手法との比較:動画生成モデルの利用

スプライトシートを直接切り出す手法の代替として、シートを参照画像として動画生成モデルに入力し、出力動画をGIF化するアプローチを検証しました。

4フレームのスプライトシートを参照画像としてSeedance 2.0 Mini(480p設定)に入力したところ、93秒で864x496ピクセル、121フレームの動画クリップが出力されました。

スプライト切り出しと動画モデル変換の比較

評価項目 スプライトシート切り出し(本手法) 動画生成モデル経由(Seedance 2.0 Mini)
生成コスト比率 1x(基準) 約19x
フレームの制御性 承認済みの4フレームを保持 モデルが再描画した121フレーム
1フレームあたりの色数 64色(指定可能) 7,433 〜 8,194色
同一幅でのGIFファイルサイズ 130,635 bytes 530,249 bytes
接地位置のズレ(ドリフト) 0 px 3 px

動画モデル経由の手法は5秒間で3ピクセルのドリフトに収まり接地安定性は高いものの、コスト比率が約19倍となるほか、ドット絵のピクセル情報が再レンダリングされ、色数や形状が元画像から変化します。元のピクセルアートを厳密に保持したい用途には、直接切り出しとアライメント補正を行うパイプラインが適しています。

既存ツール利用時の注意点とモデルの制約事項

ブラウザベースの分割ツールにおける問題

ezgifのスプライトカッターなど、行数と列数を指定して画像を等分割する一般的なWebツールでは、GPT Image 2.5の配置特性に対応できません。均等に格子状分割を行うと、キャラクターの輪郭が切り欠かれたり中心位置がずれたりし、前述の104ピクセルの横ズレおよび48ピクセルの縦揺れが発生します。

GPT Image 2.5固有の仕様制限

本検証において確認された、切り出しスクリプト側では根本回避できないモデル側の仕様制限は以下の3点です。

  1. 背景色の微細な変動: プロンプトで中間グレーを指定しても、生成ごとに背景のRGB値が変動します(実測例: RGB 122,121,122、RGB 127,126,125、RGB 130,129,130)。単一のカラーコードによる単純なクロマキー透過処理は行えません。
  2. 出力フォーマットの制限: ダウンロード形式がJPGに固定されており、PNG形式や透過レイヤーを持った状態での直接取得はできません。
  3. 複数行指定時のポーズ重複: 前述の通り、2行以上の多フレーム構成を指定すると、下段が上段のポーズの複製になります。

まとめ

GPT Image 2.5を用いたスプライトアニメーション作成における推奨フローは以下の通りです。

  • プロンプト設計: 8フレーム(2行)ではなく、単一水平行の4フレーム構成(1x4)を指定する。
  • 寸法処理: 要求解像度を基準にせず、出力画像の実サイズ(1672x941)を読み取る。
  • フレーム切り出し: 均等グリッド分割を行わず、ピクセル走査によるバウンディングボックス検出を行う。
  • アライメント: 各スプライトの最下部ピクセル(足元)を基準線として整列させる。
  • GIFエンコード: 全フレームから抽出した共通の64色パレットを適用し、フリッカーの防止とサイズ軽量化を行う。

Seadanse(筆者が開発に関わっているサービス)

筆者はGPT Image 2.5を提供するGPT Image 2.5の開発に関わっており、本稿の検証は同環境で実施しました。なお、検証手順および測定データの評価において特定の結果を誘導する処理は含んでいません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?