做过前端、游戏开发或者视频制作的人,对透明背景 PNG 素材的需求量巨大:图标、贴纸、吉祥物、UI 元素、视频叠加层。

以前获取这类素材要么去图库买(贵,而且撞图),要么请设计师画(慢),要么自己用 PS 抠图(累)。
在这里插入图片描述

Nano Banana 2 配合一套绿幕生成 + FFmpeg 自动抠图的管线,可以批量生产带透明通道的 PNG 素材。GitHub 上已经有一个开源的 CLI 工具把这个流程封装好了。我来拆解一下它的原理和实际效果。

原理:为什么是绿幕?

直接让 AI 生成透明背景的图片,目前大多数模型做不到。模型输出的是 JPEG 或 PNG,但里面并没有 Alpha 通道信息。

绿幕方案的思路很简单:

  1. 让模型生成一个纯绿色背景的图片(模拟绿幕拍摄)
  2. 用图像处理工具把绿色部分扣掉,变成透明
  3. 处理边缘的绿色溢出(Green Spill)

这个思路在影视后期里已经用了几十年,原理成熟,效果可靠。

第一步:绿幕提示词

在 Prompt 末尾加上绿幕指令。比如:

一个可爱的机器人吉祥物,白色金属材质,蓝色的眼睛,挥手打招呼的姿势。
背景是纯绿色 (pure green screen, #00FF00),均匀照明,无阴影。

关键点:

  • 明确写"pure green screen"或者"solid green background"
  • 要求"均匀照明,无阴影",否则绿色背景上会有深浅不一的色块,后面不好抠
  • 主体本身尽量避免绑色元素(如果吉祥物是绿色的,那就用蓝幕)

在这里插入图片描述
实测中,模型生成的绿色不一定是标准的 #00FF00,更可能是 #05F904 或者类似的近绿色。后面的抠图工具需要能容忍这个偏差。

我的实测渠道用的是Nano Banana AI

第二步:FFmpeg 抠图

在这里插入图片描述
FFmpeg 内置了 colorkey 滤镜,可以把指定颜色变透明:

ffmpeg -i input.jpg \
  -vf "colorkey=0x05F904:0.3:0.15,despill=type=green" \
  -c:v png output.png

参数含义:

  • colorkey=0x05F904:0.3:0.15:把 #05F904 附近的颜色(容差 0.3,柔和度 0.15)变透明
  • despill=type=green:去除主体边缘的绿色溢出。这一步很关键,否则白色机器人的边缘会带一圈绿色

关于容差值:0.3 是一个中等偏大的值,能处理大部分绿色不均匀的情况。如果误扣了主体的某些部分(比如主体上有浅绿色元素),需要调小到 0.2 左右。

第三步:自动裁切

抠完图后,图片四周会有大量透明区域。用 ImageMagick 自动裁切:

convert output.png -trim +repage output_trimmed.png

这样就得到了一张大小合适、背景透明的 PNG 素材。

完整管线脚本

把上面三步串成一个 Bash 脚本:

#!/bin/bash
PROMPT="$1"
OUTPUT_NAME="${2:-asset}"
GREEN_PROMPT="${PROMPT} Background is pure green screen, solid green, evenly lit, no shadows."

# 生成绿幕图(用 nano-banana CLI)
nano-banana "${GREEN_PROMPT}" -o "${OUTPUT_NAME}_green" -s 2K

# 检测绿幕颜色(取角落像素)
GREEN_COLOR=$(convert "${OUTPUT_NAME}_green.jpg" -crop 1x1+5+5 -format '%hex' info:)

# FFmpeg 抠图 + 去绿溢
ffmpeg -i "${OUTPUT_NAME}_green.jpg" \
  -vf "colorkey=0x${GREEN_COLOR}:0.3:0.15,despill=type=green" \
  -c:v png "${OUTPUT_NAME}_raw.png" -y

# ImageMagick 裁切
convert "${OUTPUT_NAME}_raw.png" -trim +repage "${OUTPUT_NAME}.png"

# 清理中间文件
rm -f "${OUTPUT_NAME}_green.jpg" "${OUTPUT_NAME}_raw.png"

echo "Done: ${OUTPUT_NAME}.png"

使用方法:

bash gen_transparent.sh "可爱的机器人吉祥物,白色金属材质" robot_mascot

批量生产

把多个素材需求写成一个列表,循环生成:

prompts=(
  "一只橙色的小狐狸站立|fox"
  "一顶牛仔帽|cowboy_hat"
  "一把中世纪宝剑|sword"
  "一个红色心形气球|heart_balloon"
  "一个金色奖杯|trophy"
)

for item in "${prompts[@]}"; do
  IFS='|' read -r prompt name <<< "$item"
  bash gen_transparent.sh "$prompt" "$name"
  sleep 2
done

5 个素材大约 2 分钟跑完,每个成本约 $0.1。

实际效果和局限

效果好的情况

  • 主体是实物(人物、动物、物体),轮廓清晰
  • 主体和绿色对比度高(白色、红色、蓝色主体效果最佳)
  • 主体没有半透明部分

效果差的情况

  • 主体有半透明元素(比如玻璃杯、翅膀、纱裙),绿色会透过来,抠出来有色偏
  • 主体本身是绿色或黄绿色,会被误扣
  • 主体有非常细的边缘(比如头发丝),容易出锯齿

对于半透明物体,可以尝试用蓝幕替代(Prompt 里写 “pure blue screen”,FFmpeg 改成 colorkey=blue),效果会好一些但仍不完美。

开源工具

如果不想自己写脚本,GitHub 上的 nano-banana-2-skill 工具直接带了 -t 参数:

nano-banana "可爱的机器人吉祥物" -t -o mascot

它会自动完成绿幕生成、颜色检测、FFmpeg 抠图、裁切的全部流程。前提是本地装了 FFmpeg 和 ImageMagick。

# macOS 安装依赖
brew install ffmpeg imagemagick
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐