社交广告构建器 是做什么的?
scripts/build_ad.py 将一个镜头列表转换成两个成品文件。它只需要 ffmpeg 和 ffprobe(免费)。每一个默认设置都经过评分迭代循环和盲审AB测试的验证:
- 硬切。 每次切换时都会闪过黑场。
- 品牌色实心药丸形状上的菜品标签。 在杂乱的食物画面上,细小的文字难以阅读。
- 第0帧上的品牌标题。 大多数人看视频时是静音的。
- 每个食物镜头出现时带有4%的变焦推近。
- 轻微锐化加一个暖色调色, 使AI生成的片段和手机拍摄的素材看起来像出自同一台相机。
- 不从片段中提取音频, 因为AI视频模型会添加自己的音乐。声音如果有,使用真实的房间环境音,外加食物下方的柔和嘶嘶声。
- 响度设置为-14 LUFS并带有限制器, 确保真实峰值低于0 dB,在手机扬声器上不会失真。
- 文字位于4:5安全区域内(在1920分辨率下y约390),这样同一个主版本可以干净地裁剪为信息流格式。
镜头列表
{
"out": "out/my-ad",
"brand_color": "#A3192B",
"brand_line": "你的餐厅 · 你的城市",
"ambience": "room-recording.mov",
"shots": [
{"file": "clips/noodle-lift.mp4", "start": 3.0, "dur": 2.0, "label": "担担面"},
{"file": "clips/mapo.mp4", "start": 0.8, "dur": 1.5, "label": "麻婆豆腐"},
{"file": "clips/mapo-scoop.mp4", "start": 3.3, "dur": 1.5},
{"file": "clips/dining-room.mp4", "start": 0, "dur": 1.0, "label": "你的餐厅", "subline": "你的城市", "food": false}
],
"endcard": {"bg": "#F3ECE0", "logo": "logo.png", "dur": 2.0,
"lines": [{"text": "你的城市", "size": 58, "color": "#8B1E1E"},
{"text": "下单自取或预订餐位", "size": 56},
{"text": "yoursite.com", "size": 84, "color": "#8B1E1E", "bold": true}]}
}
运行 python3 scripts/build_ad.py shotlist.json。它会输出 out/my-ad-9x16.mp4 和 out/my-ad-4x5.mp4。
镜头字段:
start和dur的单位是秒,相对于片段内部。"food": false会关闭变焦推近和嘶嘶声(用于室内镜头)。"keep_label": true会在两个镜头之间保持标签不变,而不重新动画。"subline"会在标签下方添加一行较小的文字。"label_size"设置标签大小(默认78像素)。在标签中使用\n可以实现两行文字。标签和结尾卡文字会自动缩小以适应帧宽。- 文字中可以包含引号、冒号、逗号和
%。表情符号在标签字体中无法渲染,请勿使用。 - 如果片段短于请求的
dur,构建器会使用现有部分并打印一条提示。请注意这些提示:过早结束的钩子会在最后一帧上冻结。
来自获胜广告的节奏规则(参见广告拆解基准测试)
- 时长: 无言语的食物蒙太奇最佳时长为 12-20 秒。有对话或故事性的广告时长会更长。
- 镜头长度: 每约 1.8 秒 切一次,第一次切换约在 2 秒 内。拍摄长度落在 0.5 秒的网格上,可以让任何 120 BPM 的音乐节拍对齐在切换点。
- 顺序: 以手入画框的动态开场。连续展示食物。任何空镜头尽量保持在约 1 秒,放在靠近结尾处。
- 结尾: 使用最好的食物镜头,或者一个带有简洁行动文字的卡片。
- 音乐: 在上传时使用平台自己的授权音乐库添加。不要混入你没有版权的歌曲。
制作A/B变体
每个变体只修改 一个要素(钩子镜头、钩子文案、时长或菜品组合),这样获胜者就能解释自己胜出的原因。复制镜头列表,编辑一个字段,再次构建。