爆款广告翻新 是做什么的?
将已验证的广告结构转化为用户应用的广告。AI模型提供人物和场景;手机屏幕上显示的所有内容均来自真实应用录制;剪辑时确保每个口播台词都能对应到说话人的脸部。
$S = 技能目录下的 scripts/ 文件夹。需要 ffmpeg、Python 3(含 numpy pillow opencv-python-headless),以及用于语音检查的 mlx-whisper(Apple Silicon)或 openai-whisper。应用画面使用屏幕录制工具录制,例如 app-demo-recorder 技能(发布版、真实账号、无广告状态)。
在首次编辑前,请先阅读 references/lessons.md。其中列出了此工作流程旨在避免的常见失败问题。
0. 确认目标(一条消息)
目标受众(实际留在应用内的人,而非你希望使用的人)、渠道(Meta / YouTube Shorts / TikTok)、要展示的一个核心功能,以及积分预算。年长用户偏好较慢的节奏、更大的字体、同龄人出镜以及具体的好处(金钱、时间)。未确定预算前,不要开始付费生成。
1. 寻找已验证的参考广告
python3 $S/find_reference_ads.py search --country KR --objective app_install --period 180 --order like
python3 $S/find_reference_ads.py search --country KR --keyword 앱테크 --lang ko
python3 $S/find_reference_ads.py download <id> <id> --out refs
选择4–30秒的广告(翻新模型接受该范围),其结构需匹配功能:发现 → 尝试 → 结果 → 行动号召。点赞量因投放支出而虚高;仅在相同搜索范围内进行比较,不要跨搜索比较。参考视频带有水印,归其广告主所有:仅将其作为翻新任务的结构性参考源。
2. 选角(角色设定画)
翻新模型需要一张面孔进行复制。如果用户没有模特照片,请在消耗任何视频积分前,为每位角色生成一张角色设定画,并获得用户的批准。
- 角色类型: 目标观众的同龄人(相同年龄、地区、职业、着装),普通而非模特级漂亮,匹配参考视频中的角色(主持人、顾客、邻居)。
- 设定画: 一张横版图像(约1600x900),照片级真实感,同一人物和服装在三个视角下:正面半身特写、半身、全身;中性浅色背景,柔和的日光。双手放松且完全可见,每只手五根手指。无文字、logo、水印或手持手机。
- 提示词框架: "Photorealistic character reference sheet of ONE fictional , <face/hair details>, wearing . Three views side by side on a plain light background: front close-up, half body, full body. Natural skin texture, soft daylight. No text, no logos, no props."
工具,按成本由低到高排序:
# Codex CLI 图像生成(含在 ChatGPT 计划中,不消耗视频积分)
codex exec --skip-git-repo-check --sandbox workspace-write -C cast \
"Use your image generation tool to create ONE image: <prompt skeleton>. Save it as ./cast_<name>.png and print its path."
- Higgsfield(或其他图像API)通过代理工具:使用相同提示词调用
generate_image,或使用其角色设定画工作流程生成多视角设定画。会消耗积分;需先报价。 - 用户已付费的任何图像模型。
打开图像并检查:各视角面部一致,双手自然,无文字,无任何真实或名人相似度。虚拟人物需在平台或法律要求时标注为AI生成。将设定画与需求说明放在一起:翻新任务将其作为演员图像。
3. 生成翻新内容
准备:参考视频、第二步的角色设定画、应用图标,以及1–2张真实应用截图。
编写需求说明,使AI输出易于修复:
- 保留参考视频的节拍和节奏;替换演员、场景、产品。提供原始口语台词,保持简短,使用目标语言。除非属实,否则避免使用证言式措辞(“我试过了,得到了……”);优先使用演示式表述(“让我们计算……”)。
- 要求无字幕或屏幕文字(它们会变得模糊不清),以及无手持手机打字的特写(手部看起来错误,手指会遮挡屏幕,无法进行屏幕替换)。
- 手机屏幕将被替换,因此要求手机保持静止且正对摄像头。
- 先报价;以最低分辨率草稿;一次只输出一个结果。
4. 在触碰AI输出前进行映射
python3 $S/analyze_source.py ai.mp4 work/ana # 镜头、口语台词、联系表 work/ana/shots.jpg
python3 $S/analyze_source.py ai.mp4 work/ana --no-speech --rms 17.2-17.6 # 在一句台词附近精确剪切音频点
查看 shots.jpg。将每个镜头分类:保留(人物、场景)、屏幕替换(手机正对摄像头)、丢弃(打字的手部、畸变面部、无法辨认的动作)。记录每句台词的说话位置和所在镜头。识别器标记的台词起始点通常提前0.3–0.7秒:在剪切音频前使用 --rms 确认。
5. 在每部手机上放置真实应用画面
python3 $S/screen_replace.py auto ai.mp4 3.33 6.50 app.mp4 work/shotB.mp4 --work work/B --app-start 2.4
python3 $S/screen_replace.py auto ai.mp4 17.46 21.25 app.mp4 work/shotE.mp4 --work work/E --app-start 10.6 --blank 0,1740,1080,2020
auto 模式提取镜头(在范围内的任何剪切点停止),找到关键帧和屏幕角点,将其吸附到边框内侧,通过整个镜头追踪手机(平面追踪,双向,包含旋转),进行亮度匹配并添加少量眩光,然后输出 work/X/key_preview.png(四边形 + 像素网格)和 work/X/qa.png(原始画面 vs 合成画面)。
始终打开这两张图像。 如果四边形偏移,从网格读取角点坐标,并使用 --key K --quad "x,y x,y x,y x,y"(左上、右上、右下、左下,内屏幕边缘)重新运行。使用分析所得安全范围内的 START/END。将应用片段与台词匹配:当演员提问时显示输入画面,当演员反应时显示结果画面。使用 --blank(应用像素坐标)遮盖过时或私密的UI。
6. 构建结果瞬间和文字
python3 $S/pop_highlight.py result_clip.mp4 x0,y0,x1,y1 work/pop.mp4 --blank 0,975,720,1145 # 关键数字弹出、发光、闪烁
python3 $S/captions.py captions.json work/caps # 钩子、逐行字幕、结束卡片以PNG格式输出
文字规则:第一帧显示钩子(一个吸引观众的问题),每句台词对应一行字幕,最多两行,大字号、高对比度,位于底部20%区域和右侧边缘之外,切勿遮盖观众需要阅读的应用UI。文字保持用户可接受的最小量;法律要求的标示保留但字号小。结束卡片 = 应用图标 + 名称(+ 行动号召,如果用户需要)。
7. 保持同步进行剪辑组装
编写时间线JSON(格式见 scripts/assemble.py --help)并运行:
python3 $S/assemble.py timeline.json out.mp4
- 音频使用原始源音频,剪切成片段;每个有人说话的镜头,视频和音频使用相同的源时间点。在应用画面、广角镜头和结束卡片上,台词可作为画外音播放。
- 删除静默时间(台词前、镜头间的空白)而非加速所有内容。
- 人物镜头必须从第一帧开始就有动作:切勿冻结面部来填充时间;如需延长反应时间,使用帧插值(
minterpolate)对静默部分进行慢放,并输入比所需稍长的源素材。 - 溶解效果使用剪切点之后的真实帧;应用画面可以直接硬切换。
- 视频和音频总时长必须匹配(否则工具会拒绝执行)。
8. 像挑剔的观众一样进行验证
python3 $S/verify.py out.mp4 --forbid ai.mp4:10.79-17.29 --person 0-3.2 --person 5.2-8.8 --sheet work/sheet.jpg
然后查看设定画,对照字幕阅读原始台词,并完整观看一遍。常见遗漏:下一镜头的边界帧、面部冻结4帧、台词播放时匹配到错误的面部、替换屏幕边缘的虚假UI、文字覆盖应用界面、钩子文字在应用UI上停留过久。在展示给用户之前,修复并重新验证。
9. 交付
一个文件夹:最终MP4、AI原始输出、合成画面、时间线JSON、包含时间线表格的README、消耗的积分以及待定风险(AI人物披露、证言式措辞、品牌名称发音错误)。如果需要独立审查,请将帧联系表、原始台词和时间线交给全新上下文的审查者,并告知其需保留哪些结构:仅被告知“使其合规且更短”的审查者会删掉人物和应用画面。