用途:text-bubble-stack 是一个 Tella 技能,在说话人出镜(talking-head)的视频里,把一叠光泽质感、iOS 6 风格的聊天气泡放到发言人身后的画面位置;每个气泡对应说话人说出的一句短语,并按该短语的发音时刻依次弹入,形成聊天记录式的堆叠效果。参考图 references/reference.jpg 展示 9:16 竖屏成片效果(紫色主题,文案为 "No / Nope / Nooooope!")。脚本 scripts/make_bubbles.py 负责渲染气泡图片与白色渐变洗底。
主要能力与流程:
- 先询问:技能读取片段转录(get_transcript,含词级时间),找出适合做气泡的短语;然后用一次 ask_form 询问气泡颜色(匹配发言人或字幕、经典 iMessage 蓝、灰色接收气泡、绿色短信或自定义)、气泡数量(通常 2–4 个)以及每个气泡的文案(每行一个,用 / 分隔)。同一表单也会确认每个气泡对应哪一句发音时刻。
- 颜色主题:每个主题由垂直渐变(顶部浅、中部、底部深)加描边、阴影与文字颜色组成;资料给出了经典 iMessage 蓝和紫色两套具体色值,其他颜色从所选颜色推导浅顶部、中段和饱和底部,配深描边与同色系深色文字。匹配颜色时可对画面取样并读取 get_video 的 settings.captionStyle。
- 渲染图片:写 spec JSON(texts、fontSize 88、theme、画布尺寸取自 get_timeline、wash {top: 1.0, bottom: 0.1}),运行 python3 scripts/make_bubbles.py spec.json out/;脚本会打印每个气泡的 1x 宽度 W(高 170 px,尾巴在右下,宽度适配文字)并写出 wash.png。上传前先在灰色背景上查看气泡。逐个上传 PNG:create_source(kind image,使用打印的像素尺寸)、curl -T、wait_for_jobs,再用 add_library_item(private)获得托管 URL;Tella Motion 文档中的图片资源需要该 URL。
- 构建 Tella Motion 文档:create_motion_document 指定 videoId、宽度约 600(最宽气泡 + 30)、高度按 3 个槽位(每个槽 188 px:170 气泡 + 18 间隙;底部槽 y = height − 20 − 170)。同一批次中设置画布时长、按气泡设置 image 资源、为每个气泡插入分组节点(origin 在尾巴尖端、motion blur、子级 raster 填充),并用 addTitle 保持文字为实时文本。动画关键帧包括:透明度 0→1(0.12 秒)、缩放 0.4→1(0.45 秒)、y 轴上移一个槽位(0.45 秒)、旋转从约 ±8–10° 摆入并落到小幅静止倾斜,气泡之间左右交替;已有气泡被顶起时反向摇晃约 4–5° 再回位。缓动使用柔和过冲 {x1: 0.3, y1: 1.18, x2: 0.45, y2: 1},不使用弹簧预设。出现时间按词开始时间减去覆盖层起始时间计算,第一个气泡为 0。
- 放入视频:一次 apply_video_edits 批次中添加 wash.png 全画幅覆盖层(intro fade 300ms、depth: behind_presenter)和以文档 id 为 sourceId 的堆叠覆盖层(同样 behind_presenter,放在发言人头部上方或旁边)。用 list_overlays 比较 zIndex 并调整图层,使洗底位于堆叠之下;若之后修改文档画布尺寸,需移除并重新添加覆盖层,否则画面会被拉伸。
- 检查:在每个气泡出现时刻、出现前 0.1 秒、推入中途和最后一帧调用 get_filmstrip,检查气泡不重叠、文字可读且居中、洗底在发言人与气泡之间(气泡的 zIndex 高于洗底),以及没有被头部遮挡的重要内容;修复后复查,并报告每个气泡的时间和所用颜色。
适用场景:适合在 Tella 中制作竖屏或横屏的说话人出镜短片,用聊天气泡强调口语短语、制造幽默或排版节奏。
限制:资料仅描述 Tella 内的技能流程与脚本用法,未提供安装命令、收费、支持平台或其他集成方式;具体可用性取决于 Tella 环境与相关工具接口(get_transcript、create_source、create_motion_document 等)。