【要約】PillowでAPNGスタンプを動かす13エフェクト #02 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
筆者がLINEスタンプ制作において、高品質なアニメーションを効率的に生成しようとした際に直面した課題。具体的には以下の問題があった。
- ・生成コストの増大:AI(AnimateDiff)による動画生成は、1枚あたり11分を要し、大量制作には不向きである。
- ・仕様誤認による品質低下:容量制限を300KBと誤認したため、不要な256色量子化を行い、画質を損なう事態を招いた。
- ・実装の複雑性:単純な動きであっても、個別にアニメーションを作成するのは非効率である。
// Approach
筆者は、AIによる重い生成処理を避け、Pillowを用いた数学的なフレーム生成スクリプトを自作することで解決を図った。採用した手法は以下の通りである。
- ・数学的記述による制御:sin関数等を用いて、位置やスケールの変化をフレームごとに計算する。
- ・エフェクトの構造化:動作系、パーティクル系、コンボ系の3グループに分類して実装した。
- ・位相差の活用:jellyエフェクトにおいて、x軸とy軸の位相をπ/2ずらすことで、特有の伸縮感を表現した。
- ・機能の重ね掛け:既存のフレームに対し、目パチ(add_blink)等の処理を後付けできる設計とした。
// Result
筆者は、Pillowのみを用いて13種のエフェクトを持つAPNGスタンプを、極めて低コストで生成することに成功した。
- ・生成時間の劇的な短縮:AI生成では数時間を要した工程を、スクリプト実行による数秒へと短縮した。
- ・仕様への完全適合:LINEの要件(320×270px、1MB以内、無限ループ)を満たす出力を実現した。
- ・開発プロセスの改善:仕様の数値は作業前に必ず公式ソースで確認するという、重要な教訓を得た。
Senior Engineer Insight
> ツール(AI)の性能に依存せず、要件に合わせて自作スクリプトを選択する判断力が重要である。数学的記述によるアニメーション生成は、スケーラビリティと再現性に優れ、大量のアセット生成において極めて有効な戦略となる。ただし、本件のように「間違った制約は、間違った最適化を呼ぶ」という事実は、エンジニアリングにおける要件定義の正確性が、技術選定や実装の質を決定づけることを示している。