用 AI + Python 从 0 到 1 做了一套动态表情包,顺便把整套流程封装成了可复用 Skill
摘要:本文复盘我用「AI 出图 + Pillow 动效 + 工程化流水线」做一套微信动态表情包的全过程。重点不是设计审美,而是那些只有动手才会踩的坑:Windows 路径解析、并行调用的隐式冲突、Pillow 对 RGBA 的量化限制、灰底清理、平台体积预算、头像圆形裁切安全区,以及一个反直觉的"聊天查看器棋盘格"渲染 bug。最后我把这套流程固化成了一个可安装的 Skill,任何 Agent 装上就能复现,无需重新踩坑。
一、缘起:一个"没赚到钱"的静态表情包
起因很朴素——我去年手搓过两套静态微信表情包(章鱼宝宝的喜乐和啵啵嘴树懒鹦鹉),发出去零收益。复盘下来,静态图在微信表情平台的完播/下载转化天然吃亏,而且没有固定 IP 主角,用户记不住。因此综合考虑,这次以定位学生党摆烂日常——*「鸭摆摆」**一只头顶弹簧呆毛的黄色小鸭。
这次定了三个硬指标:
- 做成动态 GIF(240×240、透明底、单图 ≤ 500KB);
- 必须有固定主角 IP(品牌记忆点,决定复下载率);
- 走强共鸣场景向(大学生日常:早八、干饭、被点名、摸鱼、卷王……),而不是纯可爱。
目标受众和主题定下来后,技术上的核心矛盾只有一个:怎么让 AI 生成的 16 张图,长着同一张脸。
二、技术拆解:把"做表情包"变成可工程化的流程
我把它拆成四个阶段,每一阶段都有明确的输入输出,可以当流水线跑:
Phase 0 需求建模 → brief
Phase 1 IP 锁版 → 锁版稿 + 角色 DNA
Phase 2 分镜 → 16 张场景稿
Phase 3 动效 → 16 个 GIF
Phase 4 提交包 → 预览/横幅/图标/头像 + 文案
2.1 IP 一致性:锁版稿 + 图生图
AI 出图最大的痛是角色漂移——尤其是头上那根标志性呆毛,每次生成形状都不一样。我的解法是:
- 先生成一张锁版稿(正面、全身、高保真)作为所有后续调用的
input_image; - 后续全部走图生图(
input_fidelity: high)而非文生图; - 在提示词里强制锁定特征,例如那根呆毛要写
permanently on top, same shape every time,否则 AI 会"自作主张"。
这一步是后面所有一致性的地基,省掉了 80% 的返工。
2.2 动效流水线:ImageGen 出帧 + Pillow 拼 GIF
出图用 ImageGen,拼图用 Pillow。下面这几个坑,是这篇文章最想讲的部分。
坑 1:Windows + Git Bash 的路径解析
在 Windows 的 Git Bash 里,如果你传 /f/work/...,ImageGen 会把它误解析成 F:\f\work\...,于是找不到文件、静默失败。
解法:一律用 F:/work/...(盘符 + 正斜杠),不要写 /f/...。
# ❌ 错
/f/workBuddy/表情包/_final/01_png/scene08/frame1.png
# ✅ 对
F:/workBuddy/表情包/_final/01_png/scene08/frame1.png
坑 2:并行调用的隐式冲突
早期我为了快,对同一场景并行发 ImageGen 请求,结果出现两种诡异丢帧:
- 多个任务的
output_dir互相覆盖; - 同毫秒生成的时间戳文件名互吞,丢了一张关键帧。
解法:严格串行调用,且每场景独立目录。慢一点,但零丢帧。
另外遇到过 RequestLimitExceeded.JobNu


1874

被折叠的 条评论
为什么被折叠?



