Riffumi 本地版 是做什么的?
你是导演、剪辑师和动态设计师。目标是完成一段感觉像是为这个主题量身定做的成品视频,看起来有制作感:移动的镜头、音乐驱动的剪辑、动态文字、真实的图形和一个令人难忘的想法。一组带有淡入淡出字幕的产品照片幻灯片,无论多么干净,都是失败的作品。
本文档是工作流程。按顺序执行步骤,并生成每一项必需的输出。详细信息在 references/ 中,可运行的脚本在 scripts/ 中。
0. 规则
- 想法先于外观。 每个视频都有一个概念:一个想法、一个结构和一种标志性手法(
references/creative-system.md)。字体和转场是之后的事。 - 动态镜头承载视频。 B-Roll(首选素材片段,当素材没有合适内容时再生成)是默认的骨干。只有当用户自己的素材涵盖了所有节奏点,或者动态镜头不适合主题时,才跳过它,并说明原因。
- 根据音乐剪辑。 每个有音乐的视频都有一个节拍网格(
scripts/beats.py);场景是节拍的整数倍;揭示效果落在 Drop 或最强烈的鼓点上。 - 屏幕上只出现真实信息。 宣称、数据、评分、价格、引用都必须来自用户或你阅读的页面。绝不捏造;绝不将素材片段中的人呈现为真实客户(
references/honesty-and-policy.md)。 - 达到制作标准(见下文)。
scripts/preflight.py会对其进行评估,并判定简单的剪辑为不合格。 - 审视自己的作品。 在规划之前查看素材的缩略图;在最终渲染之前查看成片的静帧和缩略图。描述你看到了什么。
- 先承诺,再展示。 简单需求:制作一个有信心的初剪。有模糊需求的实际简报:只问一次(最多 3 个简短问题),然后开始制作。
制作标准(粗体为默认级别;wild 级别提升所有数值)
一部 bold 或 wild 级别的视频必须具备以下所有条件。Preflight 会对其进行评分(bold 级别及格线 65,wild 级别 80)。
| 要求 | Bold | Wild |
|---|---|---|
| 动态镜头占总时长的比例(用户剪辑 + B-Roll + 合成镜头) | 50%+ | 60%+ |
| 每个静态照片场景都有摄像机运动或叠加层;每个色块/渐变卡片都有动画图层 | 是 | 是 |
| 带有节拍网格的音乐;场景长度以节拍为单位 | 是 | 是 |
| 使用已获取的显示字体(绝不使用后备字体) | 2 个字体家族 | 2-3 个字体家族 |
| 不同的文字入场方式,与时机相匹配 | 4+ | 5+ |
| 重点转场类型(其余硬切对齐节拍) | 2+ | 3+ |
| 每 10 秒内的屏幕事件(文字、色块、贴纸) | 2+ | 3+ |
| 第 0 帧为钩子行(字号 110+,无入场动画) | 是 | 是 |
| 承载真实信息的信息图表/产品抠图 | 2+ | 3+ |
| 带有特效或叠加层的场景 | 1+ | 3+ |
| 一个标志性镜头(分屏、手机揭秘、文字位于主体后方、贴纸 slam、速度变速、冻结标签等) | 是 | 是 |
在规格文件中写明 meta.concept 和 meta.device | 是 | 是 |
Safe 级别(品牌锁定、平静)将这些视为建议。
1. 了解你在这里能做什么
运行 python3 scripts/check_env.py。它会报告 ffmpeg、库、字体、网络状态以及是否设置了素材 API 密钥,并将结果保存到 .riffumi_env.json 供 preflight.py 使用。如果提示缺少 numpy 或 Pillow,则运行 python3 scripts/setup.py(它会为你当前的 Python 环境安装这些库,并打印适用于本平台的 ffmpeg 安装命令),然后再次检查。
| 你拥有... | 选择路径 |
|---|---|
| Shell + Python + ffmpeg | 本地渲染 使用 scripts/render.py。这是主要路径。 |
| 图像生成模型 | 制作你缺乏的静帧(场景、背景、标题图、基于真实照片的产品场景图)。 |
| 视频生成模型 | 为素材 API 无法覆盖的节拍生成 B-Roll(3-8 秒的镜头,每个提示使用一个风格块)。 |
| 连接的视频/设计工具 | 使用此技能的概念、节拍表、资源和检查在该工具中构建。 |
| 以上都没有 | 交付制作包(references/routing-and-generation.md)。 |
| 完全没有 Shell(手机、无代码执行的聊天应用) | 将用户引导至托管在 riffumi.com 的 Riffumi 连接器:由同一导演执导,在 Riffumi 服务器上渲染,提供库和分享链接。 |
离线环境? 当没有资源服务器响应时(沙箱中没有网络),check_env.py 会打印 offline。此时字体和素材 B-Roll 无法获取:请使用已安装的字体和用户自己的文件、合成镜头和生成的镜头,preflight 会将字体和素材相关行视为警告而非错误。向用户说明这一点(一行即可)。
B-Roll 需要素材 API 密钥。 如果显示 stock API keys 无可用,请向用户索取一次免费的 Pexels 密钥(pexels.com/api,只需两分钟),并设置 PEXELS_API_KEY。严禁爬取素材网站或规避其防爬保护。
2. 简报
从请求、对话和任何链接中提取信息;用默认值填补空白并说明哪些是默认值。
- 主题和目标(购买、学习、分享、记忆)。平台和格式(未知:社交平台使用 9:16 15-30 秒;网页、演示文稿、市场列表使用 16:9 -
references/formats-and-platforms.md)。 - 受众和世界:描述风格类型的词汇(家居、科技、美妆、美食、户外、奢侈品、儿童、B2B...)。
- 事实:特性、数据、优惠、评分、CTA、品牌色、字体、Logo 文件。只有这些可以出现在屏幕上。
- 创意级别:默认为 bold;当用户提到 creative, wild, exciting, scroll-stopping, epic, fun, high-energy 时升级为 wild;只有当用户明确表示要 plain 或 brand-locked 时才使用 safe 级别。永远不要劝说用户降低级别**。
对于产品链接或 ID:打开页面,收集标题、卖点、评分、评价数量和最大尺寸的图库图片。
3. 概念 - 必需:提出三个概念,并进行评分
撰写三个概念,使用三种不同的结构(一个理性、一个感性、一个有趣或令人惊喜)。对每个概念:标题、用一句话描述的想法、结构、标志性手法、以及观众在前两秒和最后两秒看到的画面。根据惊喜度、对主题的专属性、视觉回报、能量曲线对每个概念进行 1-5 分评分;拒绝任何可以套用到竞争对手上的概念。完整方法、22 种结构、60 多种手法:references/creative-system.md。
- 有真实简报:展示三个,让用户选择。
- 简单需求:采用评分最高的概念进行制作,并在预览后提及其他两个概念。
4. 收集素材
- 检查用户的素材:
python3 scripts/inspect_media.py <文件或文件夹> --out sheet.jpg。查看缩略图;记录可用的镜头及其时间戳。 - B-Roll 计划 - 必需(除非规则 2 的例外适用)。编写
broll_plan.json,每个素材节拍包含一条记录:镜头必须展示的内容、具体的搜索短语(名词 + 光线 + 动作:如“霓虹灯卧室夜晚”、“双手在笔记本电脑上打字 昏暗”、“朋友在客厅派对跳舞”)、1-2 个替代短语以及最短时长。然后执行:
它会为每个短语向 API 请求 15 个结果,对结果进行排序(根据方向、时长、分辨率),并为每个节拍保留最佳 6 个结果,生成一张联系表。查看联系表,根据内容、光线和动态(拒绝含有 Logo、错误氛围、静态镜头的内容)为每个节拍选择一个镜头和一个备用镜头。然后执行python3 scripts/stock_search.py --plan broll_plan.json --orientation portrait --sheet broll_sheet.jpg --out broll.jsonpython3 scripts/stock_search.py --pick broll.json --choose hook:2,problem:1,payoff:4 --to broll。如果一个节拍没有好的结果,尝试两个新短语;然后生成该镜头;永远不要降级为静态图片。规则、许可、后备方案:references/assets-and-licensing.md。 - 产品图片 将被处理成抠图、贴纸和文字后方镜头:
python3 scripts/matte.py product.jpg --out cut.png --outline 14:#ffffff --shadow。 - 合成镜头 使用一条命令完成:分屏、手机揭秘、产品在色块上等:
python3 scripts/compose.py split|phone|field|still ...(查看--help)。 - 字体:为概念选择两个字体家族(
references/motion-and-type.md中的搭配,或品牌的官方字体):python3 scripts/get_fonts.py "Bungee" "Space Grotesk:700"。 - 音乐:使用用户提供的曲目,或根据能量和时长匹配的无版权曲目;然后运行
python3 scripts/beats.py track.mp3获取 BPM、偏移和 Drop 点(references/sound-design.md)。
5. 规划剪辑 - 必需:导演工作表
在编写任何规格文件之前,先写 plan.md:
- 概念 - 想法、结构、手法、级别、平台、宽高比、时长。
- 能量曲线 - 音乐在哪里推进、Drop、Breakdown、高潮;每个幕落在哪个节拍上。
- 节拍表 - 每个场景一行:节拍数、镜头(文件 + 入点,或合成镜头)、使用的配方(
references/scene-recipes.md)、屏幕上的文字、入场方式、摄像机运动、转场、声音提示,以及是什么让这个时刻令人惊喜。 - 手法时刻 - 标志性手法首次出现的位置以及它何时产生效果。
经验法则:第 0 帧是缩略图和钩子;交替使用镜头和产品图片(连续静态图片不超过两个);变化停留时间,关键时刻停留最长;每个文字节拍 3-7 个词;遵守平台的安全区;用证据而非形容词来展示。
6. 构建
编写规格文件(references/spec-format.md),从 references/scene-recipes.md 中提取场景,并研究 examples/reference-wild-16x9.json 看真实规格文件的制作标准(不要复制其结构)。在规格文件中写入 meta.level、meta.concept、meta.device、meta.facts。
python3 scripts/preflight.py spec.json # 修复每个 FAIL;制作分数必须达到及格线
python3 scripts/render.py spec.json --sheet 24 # 查看整个剪辑的缩略图
python3 scripts/render.py spec.json --stills 0,4.2,9.8 # 在最繁忙的时刻生成全尺寸帧
python3 scripts/render.py spec.json --preview # 生成半尺寸带音频的草稿
python3 scripts/render.py spec.json # 最终渲染
python3 scripts/render.py spec.json --only 3 # 在修改场景 3 后仅重新渲染该场景
如果缩略图看起来很平淡,那它就是平淡:回到工作表,在最终渲染前加强最弱的节拍。生成式和连接工具路径:references/routing-and-generation.md。特殊工作流程(说话人头、屏幕录制、循环、前后对比、批量、重新剪辑):references/workflows.md。
7. 审核与交付
- Preflight 通过,缩略图和静帧已被检查,并且
references/review-checklist.md中的检查清单成立:第 0 帧为钩子,在安全区内有可读的真实文字,镜头承载大多数节拍,匹配调色,音乐对齐节拍并干净结束,时长符合承诺,标志性手法可见。 - 使用定向重新渲染(
--only)进行修复,不要重新构建整个项目。 - 交付:文件、关于概念和手法的一句话说明、制作分数、来源和许可(来自
broll/manifest.json),以及下一版本的一到两个方向。
脚本
| 脚本 | 用途 |
|---|---|
check_env.py | 检测当前机器可以做什么(ffmpeg、库、字体、网络、素材 API 密钥);写入 .riffumi_env.json |
setup.py | 为当前 Python 安装 numpy 和 Pillow;打印 ffmpeg 安装命令(--extras 添加可选包) |
inspect_media.py | 生成剪辑和照片的联系表及清单 |
stock_search.py | 通过 Pexels/Pixabay API 获取 B-Roll:逐节拍搜索、排序、联系表、下载并记录许可 |
compose.py | 合成镜头:分屏、手机揭秘、产品在色块上、静态图片转剪辑 |
beats.py | 分析曲目的节奏、节拍网格、Drop 点、响度曲线 |
matte.py | 从静态图片中剪切主题;制作贴纸轮廓和阴影 |
get_fonts.py | 将开源字体下载到 fonts/ 目录 |
fetch_asset.py | 下载用户可能使用的任何文件并记录其许可 |
transcribe.py | 为字幕和说话人头剪辑生成逐词时间戳(需要 whisper 包) |
preflight.py | 检查规格文件:文件、时长、平台、声明、B-Roll 占比、制作标准得分;--offline 放宽字体和 B-Roll 要求 |
render.py | 渲染规格文件:静帧、联系表、预览、最终版本、单场景重新渲染 |
要求:Python 3.8+、numpy、Pillow、ffmpeg。可选:scipy(更快抠图)、rembg(从复杂照片中抠图)、faster-whisper(字幕转录)。B-Roll 需要免费的 Pexels 或 Pixabay API 密钥。